2010-12-06 143 views
2

我有一臺生產服務器,每天在MySql 服務器中創建不同的數據庫。Perl DBI DBD :: mysql從mysql服務器獲取數據庫名稱

我需要編寫一個perl script,在當天結束時運行 並執行以下操作。

連接到mysql服務器,並獲取它擁有的所有數據庫名稱的列表 。然後連接到它們中的每一個並檢查存儲的數據。

我唯一不能做的事DBI and DBD::mysql 從mysql服務器讀取數據庫名稱。

我無法找到任何DBI功能,如果不先連接到 數據庫就可以正常工作。

任何幫助/例子/ URL將是非常有益:-)

+0

在Sybase中,有一個標準的「主」數據庫,其中存儲了類似這樣的信息。例如。爲你的目的`master..sysdatabases`。不知道關於MySql – DVK 2010-12-06 13:56:58

回答

4
use DBI; 
use strict; 
use warnings; 
my $dbh = DBI->connect('dbi:mysql:information_schema', $ENV{'USER'}, $ENV{'PASSWD'}, { 'RaiseError' => 1 }); 
my $databases = $dbh->selectcol_arrayref('show databases'); 

use Data::Dumper; 
print Dumper $databases; 
__END__ 
$VAR1 = [ 
     'information_schema', 
     'mysql', 
     'your_database_1', 
     'your_database_2' 
    ]; 

只有數據庫授權你會顯示連接的用戶。

+0

謝謝:-)工作,我已經將它添加到我的代碼,它的作品就像一個魅力:-)再次感謝你。 – 2010-12-08 06:16:04

4

嘗試使用INFORMATION_SCHEMA數據庫 - 該數據庫名始終存在,因此可以硬編碼到DBI。

more specific,相當於SHOW DATABASES是:

SELECT SCHEMA_NAME AS `Database` 
FROM INFORMATION_SCHEMA.SCHEMATA