为什么有这样奇葩的需求呢, 场景是这样的, 公司当前的系统架构为微服务架构, 然后需要写统计时就非常恶心, 特别是各自分类下的各种支付方式的金额, 然后支付表在另一个服务器上门的数据库, 虽然通过php也可以两边拿数据, 但是写统计时在微服务架构下要多恶心有多恶心, 无法通过一条sql得到结果太过于麻烦, 终于还是在网络上找到了办法, 手动写一遍记录一下

Mysql的跨服务器 关联查询--Federated引擎
1.确认开启Federated引擎

查询FEDERATED功能是否开启:
show ENGINES;

2、如果状态为NO则需修改my.ini文件,增加一行federated配置:

在[mysqld]下面添加 federated,然后重启mysql 

3.建立映射表

注意:
- 表名可以不同,但表结构要完全相同
- ENGINE=InnoDB 要改成 ENGINE=FEDERATED
- 添加最下面一行:CONNECTION='mysql://用户名(数据库用户名):密码(数据库密码)@ip:端口/数据库名/表名'

4.结果(此时数据已经映射过来了)

注意, 虽然可以这样干, 但是会有问题, 每次哪怕查询很少的数据时, 都会把目标的所有数据拉过来, 如果表很小还行, 表很大不适合

RewriteEngine on
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# 防止目录浏览
Options All -Indexes

不喜欢修改配置后再去使用, 所以修改了些代码, 实现了免除配置的修改, 让以后修改博客路径不需要修改数据库的值
修改文件
\var\Widget\Options.php
增加代码

/*
 * 数据库的变量值覆盖
 * */
protected function covePush(&$value)
{
    switch ($value['name']) {
        case 'siteUrl':
            if (($c = strpos($_SERVER['SCRIPT_NAME'], '/admin/')) !== false) {
                $this->siteUrl = (empty($_SERVER['REQUEST_SCHEME']) ? 'https' : $_SERVER['REQUEST_SCHEME']) . '://' . $_SERVER['SERVER_NAME'] . substr($_SERVER['SCRIPT_NAME'], 0, $c);
            } else {
                $this->siteUrl = substr($_SERVER['SCRIPT_NAME'], 0, -10);
            }
            $value['siteUrl'] = $this->siteUrl;
            break;
    }
}

再在该文件中搜索 public function push(array $value), 粘贴下面代码在return $value; 之前

$this->covePush($value);