p01*_*ath 4 php mysql laravel laravel-5
我正在尝试获取托管在多个服务器上的数据库的大小。例如,我在 上有 2 个数据库Server A,在 上有 3 个数据库Server B。
我想从我的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
由于我已经在循环内配置了凭据,因此它应该更新mysqlClient每个服务器的凭据或配置。如果它更新配置,我应该获得所有数据库的正确大小,但情况并非如此。
该脚本没有抛出任何异常。我确信配置有问题。这是因为当我尝试获取特定服务器上所有数据库的大小时,我得到了完美的结果。
未经测试,因为我当前没有类似的设置,但我确信您需要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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:也有\DB::reconnect('mysqlClient');但人们已经记录了它的问题
| 归档时间: |
|
| 查看次数: |
6572 次 |
| 最近记录: |