【问题标题】:How to dynamically reset database config in Laravel?如何在 Laravel 中动态重置数据库配置?
【发布时间】:2018-08-26 03:32:44
【问题描述】:

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

我想从我的 Laravel 应用程序中获取所有这些数据库的大小。实际上,我知道如何reset 配置。这是我正在使用的代码,但它只给了我第一个数据库的正确数据库大小。其他人正在获得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 有问题。这是因为当我尝试获取特定服务器上所有数据库的大小时,我得到了完美的结果。

【问题讨论】:

    标签: php mysql laravel laravel-5


    【解决方案1】:

    未经测试,因为我目前没有类似的设置,但我确定您需要在配置交换后清除 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');,但人们已经记录了它的问题

    【讨论】:

    • 哇哦!工作!这就是我要找的东西!
    • 我已经搜索了一个小时。非常感谢。
    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2022-01-17
    • 2017-12-22
    相关资源
    最近更新 更多