2010-12-06 2 views
2

MySql 서버에 매일 다른 데이터베이스를 생성하는 프로덕션 서버가 있습니다.Perl DBI DBD :: mysql은 mysql 서버에서 데이터베이스 이름을 가져옵니다.

의 끝에서 실행될 perl script을 작성하고 다음을 수행해야합니다.

mysql 서버에 연결하고 데이터베이스의 모든 이름 목록을 가져옵니다. . 그런 다음 각각에 연결하고 저장된 데이터를 확인하십시오.

내가 할 수없는 유일한 일은 DBI and DBD::mysql 이며, mysql 서버의 데이터베이스 이름을 읽었습니다.

먼저 데이터베이스에 연결하지 않고 작동하는 DBI 기능을 찾을 수 없습니다.

어떤 도움/예/URL이 매우 도움이 :-)에게 것

+0

Sybase에는 이와 비슷한 정보가 저장되는 표준 "마스터"데이터베이스가 있습니다. 예 : 당신의 목적을 위해'master..sysdatabases'. MySQL에 대한 확신이 없음 – DVK

답변

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

감사합니다 .-- 그것이 효과가 있었고, 코드에 추가 했으므로 매력처럼 작동합니다 .--) 다시 한 번 감사드립니다. –

+0

+1. 이 답변은 3 년 이상 지난 후에도 양호합니다. – slayedbylucifer

4

INFORMATION_SCHEMA 데이터베이스를 사용해보십시오 - DBI에 하드 코딩 할 수있다, 따라서 그 데이터베이스 이름이 항상 존재를합니다.

more specific하기 위해, SHOW DATABASES에 동등은 다음과 같습니다

SELECT SCHEMA_NAME AS `Database` 
FROM INFORMATION_SCHEMA.SCHEMATA 
관련 문제