php - 如何在 Laravel 中动态重置数据库配置?

标签 php mysql laravel laravel-5

我正在尝试获取托管在多台服务器上的数据库的大小。例如,我在 Server A 上有 2 个数据库,在 Server B 上有 3 个数据库。

我想从我的 Laravel 应用程序中获取所有这些数据库的大小。实际上,我知道如何重置 配置。这是我正在使用的代码,但它只为我提供了第一个数据库的正确数据库大小。其他人得到的大小为 NULL,这是不正确的,因为我知道 Server B 上的其中一个数据库的大小是 0.6MB 因为我已经在上面安装了 WordPress。

$databases = array();
foreach($servers as $server){
    // Setting Config
    Config::set('database.connections.mysqlClient.host',$server->ip);
    Config::set('database.connections.mysqlClient.password',$server->mysql_password);

    foreach($server->databases as $database){
        $database->size = DB::connection('mysqlClient')->select('SELECT Round(Sum(data_length + index_length) / 1024 / 1024, 1) "db_size"
            FROM   information_schema.tables 
            where table_schema = "'.$database->name.'";'
        )[0]->db_size;

        $databases[] = $database;
    }
}

由于我在循环内配置了凭据,它应该为每个服务器更新 mysqlClient 的凭据或配置。如果它更新配置,我应该得到所有数据库的正确大小,但事实并非如此。

脚本没有抛出任何异常。我确定 Config 有问题。这是因为当我尝试获取特定服务器上所有数据库的大小时,我得到了完美的结果。

最佳答案

未经测试,因为我目前没有这样的设置,但我确定您需要在配置交换后清除 DB:

$databases = array();
foreach($servers as $server){
    // Setting Config
    Config::set('database.connections.mysqlClient.host',$server->ip);
    Config::set('database.connections.mysqlClient.password',$server->mysql_password);

    foreach($server->databases as $database){
        DB::purge('mysqlClient'); // <-- Get rid of old connection
        $database->size = DB::connection('mysqlClient')->select('SELECT Round(Sum(data_length + index_length) / 1024 / 1024, 1) "db_size"
            FROM   information_schema.tables 
            where table_schema = "'.$database->name.'";'
        )[0]->db_size;

        $databases[] = $database;
    }
}

编辑:还有 \DB::reconnect('mysqlClient'); 但人们已经记录了它的问题

关于php - 如何在 Laravel 中动态重置数据库配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49331364/

相关文章:

mysql - SQL 查询未给出所需结果

MySQL UNION - 检测几个 SELECT 的返回结果

MySQL ROLLBACK 不删除新记录-sequelize

php - 指令 'magic_quotes_gpc' 在 PHP 5.3 和更高的 laravel 中被弃用

php - mysql如果列包含

mysql 选择计数 = 0 的地方

javascript - 读取 Angular2 和 ionic 中的 API 响应

php - 当变量变为 0 时无法停止代码执行

php - 使用第三个参数自定义登录

php - JSON 中的关联数组解码