mysqlhotcopy est un script perl fourni avec l'installation de MySQL. Cela verrouille la table, vide la table, puis effectue une copie de la base de données. Vous pouvez également utiliser mysqlhotcopy pour copier automatiquement la sauvegarde directement sur un autre serveur à l'aide de scp
.
1. Commande mysqlhotcopy :
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold
L'exemple ci-dessus effectue une sauvegarde de sugarcrm, une base de données MySQL dans le répertoire /home/backup/database.
- –allowold :cette option renomme l'ancienne sauvegarde en {nom de la base de données}_old avant d'effectuer une nouvelle sauvegarde. Dans cet exemple, si la sauvegarde sugarcrm existe déjà sous /home/backup/database, elle déplacera l'ancienne sauvegarde vers /home/backup/database/sugarcrm_old avant de créer /home/backup/database/sugarcrm.
- –keepold :cette option indique à mysqlhotcopy de conserver l'ancienne sauvegarde (c'est-à-dire la _old renommée) une fois la sauvegarde terminée.
Consultez la documentation mysqlhotcopy en utilisant perldoc comme indiqué ci-dessous.
[local-host]# perldoc mysqlhotcopy
Voici les options disponibles qui peuvent être transmises à la commande mysqlhotcopy.
Option | Description |
–addtodest | Ne renommez pas le répertoire cible (s'il existe) ; il suffit d'y ajouter des fichiers |
–allowold | Ne pas abandonner si une cible existe ; renommez-le en ajoutant un suffixe _old |
–checkpoint=db_name.tbl_name | Insérer des entrées de point de contrôle |
–chroot=chemin | Répertoire de base de la prison chroot dans laquelle mysqld opère |
–débogage | Écrire un journal de débogage |
–dryrun | Signaler des actions sans les exécuter |
–flushlogs | Vider les journaux une fois toutes les tables verrouillées |
–aide | Afficher le message d'aide et quitter |
–host=nom_hôte | Se connecter au serveur MySQL sur l'hôte donné |
–à garder | Ne supprimez pas la cible précédente (renommée) lorsque vous avez terminé |
–noindices | Ne pas inclure les fichiers d'index complets dans la sauvegarde |
–password[=password] | Le mot de passe à utiliser lors de la connexion au serveur |
–port=num_port | Le numéro de port TCP/IP à utiliser pour la connexion |
–silencieux | Soyez silencieux sauf pour les erreurs |
–expression régulière | Copier toutes les bases de données avec des noms qui correspondent à l'expression régulière donnée |
–resetmaster | Réinitialiser le journal binaire après avoir verrouillé toutes les tables |
–resetslave | Réinitialiser le fichier master.info après avoir verrouillé toutes les tables |
–socket=chemin | Pour les connexions à localhost |
–tmpdir=chemin | Le répertoire temporaire |
–user=nom_utilisateur, | Le nom d'utilisateur MySQL à utiliser lors de la connexion au serveur |
–version | Afficher les informations de version et quitter |
2. Sortie de la commande mysqlhotcopy :
La commande mysqlhotcopy ci-dessus affichera une sortie similaire à la suivante.
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold Locked 98 tables in 0 seconds. Flushed tables (`sugarcrm`.`accounts`, `sugarcrm`.`accounts_audit`, `sugarcrm`.`accounts_bugs`) in 0 seconds. Copying 295 files... Copying indices for 0 files... Unlocked tables. mysqlhotcopy copied 98 tables (295 files) in 0 seconds (0 seconds overall).
Par défaut, la base de données MySQL est située sous /var/lib/mysql/{db-name}. mysqlhotcopy effectue une sauvegarde des fichiers de la table à partir de cet emplacement de base de données par défaut vers le répertoire de sauvegarde. Le répertoire de sauvegarde /home/backup/database/sugarcrm contiendra une copie exacte de tous les fichiers du répertoire réel de la base de données MySQL /var/lib/mysql/sugarcrm.
[local-host]# ls -1 /var/lib/mysql/sugarcrm | wc -l 295 [local-host]# ls -1 /home/backup/database/sugarcrm | wc -l 295
Veuillez noter que chaque table a trois fichiers correspondants avec l'extension *.frm, *.MYD et *.MYI. Le répertoire de la base de données contient également un fichier db.opt qui contient le paramètre lié à la base de données.
Dans l'exemple ci-dessus, vous pouvez voir que mysqlhotcopy prend une sauvegarde de 98 tables de base de données sugarcrm. Ainsi, le nombre total de fichiers dans le répertoire de sauvegarde =98 tables * 3 + 1 fichier de configuration db =296 fichiers.
3. Restaurer depuis mysqlhotcopy
Pour restaurer la sauvegarde à partir de la sauvegarde mysqlhotcopy, copiez simplement les fichiers du répertoire de sauvegarde vers le répertoire /var/lib/mysql/{db-name}. Juste pour être sûr, assurez-vous d'arrêter mysql avant de restaurer (copier) les fichiers. Après avoir copié les fichiers dans /var/lib/mysql/{db-name}, redémarrez mysql.
4. Dépannage de mysqlhotcopy
Comment résoudre le problème Impossible de localiser DBD/mysql.pm ? mysqlhotcopy est un script perl et il nécessite le module perl-DBD. Vous pouvez recevoir l'erreur suivante lors de l'exécution de mysqlhotcopy si le module perl-DBD n'est pas installé.
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 7) line 3. Perhaps the DBD::mysql perl module hasn't been fully installed, or perhaps the capitalisation of 'mysql' isn't right. Available drivers: DBM, ExampleP, File, Proxy, Sponge. at /usr/bin/mysqlhotcopy line 177
Assurez-vous d'installer le package perl-DBD comme indiqué ci-dessous.
[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm Preparing... ########################################### [100%] 1:perl-DBD-MySQL ########################################### [100%]
Comment résoudre le problème avec l'installation de perl-DBD ? Lors de l'installation de perl-DBD, vous pouvez obtenir le message d'erreur suivant.
[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm rpmdb: Program version 4.3 doesn't match environment version error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch error: cannot open Packages index using db3 - (-30974) warning: cannot open Solve database in /usr/lib/rpmdb/i386-redhat-linux/redhat rpmdb: Program version 4.3 doesn't match environment version error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch warning: cannot open Solve database in /usr/lib/rpmdb/i386-redhat-linux/redhat error: Failed dependencies: libmysqlclient.so.15 is needed by perl-DBD-MySQL-3.0007-1.fc6.i386 libmysqlclient.so.15(libmysqlclient_15) is needed by perl-DBD-MySQL-3.0007-1.fc6.i386
Téléchargez et installez MySQL-shared-compat depuis mysql.com et cela devrait résoudre l'erreur mentionnée ci-dessus lors de l'installation du package perl-DBD.
[local-host]# rpm -ivh MySQL-shared-compat-5.1.25-0.rhel5.i386.rpm Preparing... ########################################### [100%] 1:MySQL-shared-compat ########################################### [100%]
Utilisez-vous d'autres méthodes pour sauvegarder ou restaurer votre base de données MySQL ? Veuillez laisser vos commentaires.