2010-12-06 4 views
2

J'ai un serveur de production qui crée des bases de données différentes chaque jour dans un serveur MySql .Perl DBI DBD :: mysql récupère le nom des bases de données depuis le serveur mysql

J'ai besoin d'écrire un perl script qui tournerait à la fin de la journée et de faire ce qui suit.

connectez-vous au serveur mysql et obtenez la liste de tous les noms des bases de données il a. Puis connectez-vous à chacun d'entre eux et vérifiez les données qui ont été stockées.

la seule chose que je n'ai pas pu faire avec DBI and DBD::mysql a été lu les noms de base de données du serveur mysql.

Je n'ai pas pu trouver de fonction DBI qui fonctionnerait sans se connecter à une base de données en premier.

toute aide/exemple/URL serait très utile :-)

+0

Dans Sybase, il existe une base de données "maître" standard où des informations de ce type sont stockées. Par exemple. pour votre but 'master..sysdatabases'. Pas sûr de MySql – DVK

Répondre

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' 
    ]; 

bases de données autorisés uniquement à l'utilisateur de connecter avec sera affiché.

+0

MERCI :-) ça a marché, je l'ai ajouté à mon code et ça fonctionne comme un charme :-) merci encore. –

+0

+1. Cette réponse est valable même après 3+ ans. – slayedbylucifer

4

Essayez d 'utiliser la base de données INFORMATION_SCHEMA - ce nom de base de données existe toujours et peut ainsi être codées en dur dans DBI.

Pour être more specific, l'équivalent SHOW DATABASES est:

SELECT SCHEMA_NAME AS `Database` 
FROM INFORMATION_SCHEMA.SCHEMATA 
Questions connexes