Mysqldump aus der Produktionsdatenbank jeden Morgen

7

Unsere Datenbank ist ungefähr 2 GB groß. Wir führen jeden Morgen um 3 Uhr morgens einen geplanten Job aus, wenn der Datenverkehr ziemlich gering ist. Dabei exportieren wir die gesamte Datenbank und senden sie außerhalb des Standorts.

Ist es eine schlechte Praxis, dies auf einer Produktionsdatenbank zu tun? Das langsame Abfrageprotokoll wächst dabei immer mit etwa 10 Abfragen. Offene / geöffnete Tische wachsen ebenfalls etwas.

Ist dies also keine gute Backup-Strategie? Was ist eine gute / Standardalternative dazu? Ist es überhaupt schlecht für die db?

Vielen Dank.

BEARBEITEN

Wir befinden uns auf einem Linode 4096, auf dem nur die Datenbank ausgeführt wird. Es hat SSDs, aber keine Weltklasse. Wir verwenden 2 GB des 4 GB-Speichers für den innodb_buffer_pool. Der Befehl lautet wie folgt:

mysqldump --opt --u USER -pPASSWORD DATABASE | gzip > /path/to/database.sql.gz
Adergaard
quelle
InnoDB oder Myisam-Tabellen? Zeigen Sie Ihren Befehl mysqldump. Beschreiben Sie Ihre Hardware (schnelle Festplatten?
Genügend
Siehe Bearbeitung in Frage oben
Adergaard
Sind alle Tische innodb?
da_didi
Ja, alle Tische innodb
Adergaard

Antworten:

8

Da die Datenbank groß ist, sollten Sie den Befehl dump wie folgt ausführen:

mysqldump -u USER -p --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz

--quick: Diese Option ist nützlich, um große Tabellen zu sichern. Es wird erzwungen mysqldump, zeilenweise Zeilen für eine Tabelle vom Server abzurufen, anstatt den gesamten Zeilensatz abzurufen und im Speicher zu puffern, bevor er ausgeschrieben wird

--single-transaction: Diese Option setzt den Transaktionsisolationsmodus auf REPEATABLE READ und sendet eine START TRANSACTION- SQLAnweisung an den Server, bevor Daten ausgegeben werden. Dies ist nur bei Transaktionstabellen nützlich, z. B. InnoDBweil der konsistente Status der Datenbank zum Zeitpunkt der Ausgabe von START TRANSACTION ausgegeben wird, ohne dass Anwendungen blockiert werden.

--lock-tables=false: Option verhindert, dass MyISAMTabellen (falls sie beendet werden) während der Sicherung gesperrt werden.

Ahmad Abuhasna
quelle
1

Sie sollten den Befehl mysqldump ändern und verwenden --single-transaction. Alle neuen Änderungen an der Datenbank werden in einer Transaktion gespeichert, und Sie verfügen über eine gültige Datenbank-Sicherung zu einem bestimmten Zeitpunkt.

Ich habe zwei Schritte: Ich exportiere die Datenbank als Dump und der nächste Schritt ist das Zipen des Dumps, aber ich habe nie getestet, ob dies Unterschiede macht.

Sie können auch eine andere Backup-Software wie das Percona xtrabackup verwenden

da_didi
quelle