mysqlhotcopy ist ein Perl-Skript, das mit der MySQL-Installation geliefert wird. Dies sperrt die Tabelle, leert die Tabelle und führt dann eine Kopie der Datenbank durch. Sie können mysqlhotcopy auch verwenden, um das Backup mit scp
.
1. mysqlhotcopy-Befehl:
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold
Das obige Beispiel führt eine Sicherung von sugarcrm, einer MySQL-Datenbank, im Verzeichnis /home/backup/database durch.
- –allowold:Diese Option benennt das alte Backup in {Datenbankname}_old um, bevor ein neues Backup erstellt wird. Wenn in diesem Beispiel das sugarcrm-Backup bereits unter /home/backup/database vorhanden ist, wird das alte Backup nach /home/backup/database/sugarrcrm_old verschoben, bevor /home/backup/database/sugarrcrm erstellt wird.
- –keepold:Diese Option weist mysqlhotcopy an, das alte Backup (d. h. das umbenannte _old) aufzubewahren, nachdem das Backup abgeschlossen ist.
Sehen Sie sich die mysqlhotcopy-Dokumentation mit perldoc wie unten gezeigt an.
[local-host]# perldoc mysqlhotcopy
Im Folgenden sind die verfügbaren Optionen aufgeführt, die an den mysqlhotcopy-Befehl übergeben werden können.
Option | Beschreibung |
–addtodest | Zielverzeichnis nicht umbenennen (falls vorhanden); fügen Sie einfach Dateien hinzu |
–erlaubt | Nicht abbrechen, wenn ein Ziel vorhanden ist; Benennen Sie es um, indem Sie ein _old Suffix | hinzufügen
–checkpoint=db_name.tbl_name | Checkpoint-Einträge einfügen |
–chroot=Pfad | Basisverzeichnis des Chroot-Gefängnisses, in dem mysqld arbeitet |
–debuggen | Schreiben Sie ein Debugging-Protokoll |
–Trockenlauf | Melden Sie Aktionen, ohne sie auszuführen |
–flushlogs | Protokolle leeren, nachdem alle Tabellen gesperrt wurden |
–Hilfe | Hilfemeldung anzeigen und beenden |
–host=host_name | Verbinden Sie sich mit dem MySQL-Server auf dem angegebenen Host |
–halten | Vorheriges (umbenanntes) Ziel nicht löschen, wenn fertig |
–noindices | Nehmen Sie keine vollständigen Indexdateien in die Sicherung auf |
–Passwort[=Passwort] | Das für die Verbindung zum Server zu verwendende Passwort |
–port=port_num | Die für die Verbindung zu verwendende TCP/IP-Portnummer |
–leise | Sei still außer bei Fehlern |
–Regexp | Alle Datenbanken kopieren, deren Namen mit dem angegebenen regulären Ausdruck übereinstimmen |
–resetmaster | Setzen Sie das Binärlog zurück, nachdem Sie alle Tabellen gesperrt haben |
–resetslave | Setzen Sie die Datei master.info zurück, nachdem Sie alle Tabellen gesperrt haben |
–socket=Pfad | Für Verbindungen zu localhost |
–tmpdir=Pfad | Das temporäre Verzeichnis |
–user=Benutzername, | Der MySQL-Benutzername, der beim Verbinden mit dem Server verwendet werden soll |
–Version | Versionsinformationen anzeigen und beenden |
2. mysqlhotcopy-Befehlsausgabe:
Der obige mysqlhotcopy-Befehl zeigt eine Ausgabe ähnlich der folgenden an.
[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).
Standardmäßig befindet sich die MySQL-Datenbank unter /var/lib/mysql/{db-name}. mysqlhotcopy erstellt eine Sicherungskopie der Tabellendateien von diesem Standardspeicherort der Datenbank in das Sicherungsverzeichnis. Das Backup-Verzeichnis /home/backup/database/sugarrcrm enthält exakte Kopien aller Dateien aus dem Verzeichnis /var/lib/mysql/sugarrcrm der echten MySQL-Datenbank.
[local-host]# ls -1 /var/lib/mysql/sugarcrm | wc -l 295 [local-host]# ls -1 /home/backup/database/sugarcrm | wc -l 295
Bitte beachten Sie, dass jede Tabelle drei entsprechende Dateien mit der Endung *.frm, *.MYD und *.MYI hat. Das Datenbankverzeichnis enthält auch eine db.opt-Datei, die die datenbankbezogenen Parameter enthält.
Im obigen Beispiel können Sie sehen, dass mysqlhotcopy ein Backup von 98 sugarcrm-Datenbanktabellen erstellt. Die Gesamtzahl der Dateien im Sicherungsverzeichnis =98 Tabellen * 3 + 1 db-Konfigurationsdatei =296 Dateien.
3. Wiederherstellung aus mysqlhotcopy
Um das Backup aus dem mysqlhotcopy-Backup wiederherzustellen, kopieren Sie einfach die Dateien aus dem Backup-Verzeichnis in das Verzeichnis /var/lib/mysql/{db-name}. Stellen Sie sicher, dass Sie mysql stoppen, bevor Sie die Dateien wiederherstellen (kopieren), um auf der sicheren Seite zu sein. Nachdem Sie die Dateien nach /var/lib/mysql/{db-name} kopiert haben, starten Sie mysql erneut.
4. Fehlerbehebung bei mysqlhotcopy
So lösen Sie das Problem Kann DBD/mysql.pm nicht finden? mysqlhotcopy ist ein Perl-Skript und benötigt das Perl-DBD-Modul. Möglicherweise erhalten Sie beim Ausführen von mysqlhotcopy die folgende Fehlermeldung, wenn das Perl-DBD-Modul nicht installiert ist.
[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
Stellen Sie sicher, dass Sie das perl-DBD-Paket wie unten gezeigt installieren.
[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm Preparing... ########################################### [100%] 1:perl-DBD-MySQL ########################################### [100%]
Wie behebt man das Problem mit der Perl-DBD-Installation? Während der Installation der Perl-DBD erhalten Sie möglicherweise die folgende Fehlermeldung.
[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
Laden Sie MySQL-shared-compat von mysql.com herunter und installieren Sie es. Dies sollte den oben erwähnten Fehler bei der Installation des Perl-DBD-Pakets beheben.
[local-host]# rpm -ivh MySQL-shared-compat-5.1.25-0.rhel5.i386.rpm Preparing... ########################################### [100%] 1:MySQL-shared-compat ########################################### [100%]
Verwenden Sie andere Methoden zum Sichern oder Wiederherstellen Ihrer MySQL-Datenbank? Bitte hinterlassen Sie Ihre Kommentare.