InnoDB Backups beschleunigen (wie mysqlhotcopy)

andreask2
RSAC
Posts: 701
Joined: 2004-01-27 14:16
Location: Aachen

InnoDB Backups beschleunigen (wie mysqlhotcopy)

Post by andreask2 »

Hi!

Wir führen Backups von InnoDB Tabellen mit mysqldump durch, was teilweise mehrere Stunden dauert. Das mysqlhotcopy Skript kann man soweit ich weiß nicht verwenden. Gibt es irgendwelche Tricks, diese zu beschleunigen?

Grüße
Andreas
Top

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: InnoDB Backups beschleunigen (wie mysqlhotcopy)

Post by daemotron »

Bei InnoDB reicht ein Lock AFAIR nicht; man muss den Slave runterfahren, um einen konsistenten Snapshot zu bekommen. Bei Datenbanken, die so groß sind, dass ein Dump ewig dauert, würde ich generell aber auch eher zu File System Snapshots (LVM, ZFS - je nachdem was verfügbar ist) übergehen, um ein Full Backup zu machen. Für Incrementals kann man ja einfach das abgesaugte Binlog seit dem letzten Full Backup wegsichern.
Top

andreask2
RSAC
Posts: 701
Joined: 2004-01-27 14:16
Location: Aachen

Re: InnoDB Backups beschleunigen (wie mysqlhotcopy)

Post by andreask2 »

jfreund wrote:Bei InnoDB reicht ein Lock AFAIR nicht; man muss den Slave runterfahren, um einen konsistenten Snapshot zu bekommen. Bei Datenbanken, die so groß sind, dass ein Dump ewig dauert, würde ich generell aber auch eher zu File System Snapshots (LVM, ZFS - je nachdem was verfügbar ist) übergehen, um ein Full Backup zu machen. Für Incrementals kann man ja einfach das abgesaugte Binlog seit dem letzten Full Backup wegsichern.


Wenn der DB-Server runtergefahren ist, kann ich das doch auch einfach mit tar wegsichern, oder? Da kann sich ja dann nichts mehr dran verändern. Ich habe Replikation noch nicht wirklich verwendet, heißt das, die Master-DB läuft weiter, und gibt alle fehlenden Daten an den Slave weiter, wenn dieser wieder online ist? automatisch?

Was ist mit Binlog, kann ich das nicht einfach auch ohne Replikation verwenden? Also einfach die Binlog-Datei vor der Sicherung umbenennen und den MySQL-Server ab da in eine neue, leere Datei schreiben lassen? Aber halt so, dass es nicht zu Inkonsistenzen kommen kann. Kann man nicht Binlogs in Dateien schreiben, mit Namen nach dem Muster dbserver-YYYY-MM-DD.bin ? Also sowas wie Logrotation?

Oder kann man das irgendwie mit einem Cronjob machen?

Mit Binlogs müsste man ja nur einmal einen kompletten Dump machen, und könnte dann die Binlogs sichern. Sollte ja unabhängig vom Tabellen-Treiber funktionieren und deutlich schneller gehen als ein Dump.
Top

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: InnoDB Backups beschleunigen (wie mysqlhotcopy)

Post by daemotron »

andreask2 wrote:Wenn der DB-Server runtergefahren ist, kann ich das doch auch einfach mit tar wegsichern, oder? Da kann sich ja dann nichts mehr dran verändern. Ich habe Replikation noch nicht wirklich verwendet, heißt das, die Master-DB läuft weiter, und gibt alle fehlenden Daten an den Slave weiter, wenn dieser wieder online ist? automatisch?

Ja, Du kannst die Data-Files etc. per tar oder wie auch immer sichern, aber eben nur, wenn der mysqld heruntergefahren ist. Replikation und/oder FS-Snapshots sind hier nur Mittel, um die Downtime zu verkürzen oder ganz ohne auszukommen. Der Slave nimmt einfach die Replikation an dem Punkt auf, an dem Du ihn zwecks Backup heruntergefahren hast (Replikation funktioniert bei MySQL nach dem Pull- und nicht nach dem Push-Prinzip).

andreask2 wrote:Was ist mit Binlog, kann ich das nicht einfach auch ohne Replikation verwenden? Also einfach die Binlog-Datei vor der Sicherung umbenennen und den MySQL-Server ab da in eine neue, leere Datei schreiben lassen? Aber halt so, dass es nicht zu Inkonsistenzen kommen kann. Kann man nicht Binlogs in Dateien schreiben, mit Namen nach dem Muster dbserver-YYYY-MM-DD.bin ? Also sowas wie Logrotation?

Oder kann man das irgendwie mit einem Cronjob machen?

Das ist eine der Schwächen von MySQL z. B. gegenüber PostgreSQL - letzteres besitzt eine Rotationssteuerung für das Log, mit der man auch externe Anwendungen (z. B. ein Backup-Skript) ansteuern kann. Bei MySQL ist das ein bisschen tricky, denn das jeweils aktuell genutzte Logfile könnte ja gerade im Status write sein, wenn man einen Snapshot zieht. Sicher geht das nur, wenn man das Log flusht, den Server lockt oder runterfährt und dann die Binlog-Dateien sichert (MySQL rotiert die von sich aus, wird über max_binlog_size gesteuert).

andreask2 wrote:Mit Binlogs müsste man ja nur einmal einen kompletten Dump machen, und könnte dann die Binlogs sichern. Sollte ja unabhängig vom Tabellen-Treiber funktionieren und deutlich schneller gehen als ein Dump.

Würde ich nicht empfehlen. Das Backup geht so zwar schnell, aber das Recovery aus dem Binlog dauert lange - es wird ja jede einzelne Transaktion wiederholt, also im dümmsten Fall eine Tabelle angelegt, mit Daten gefüllt und dann wieder alles gelöscht etc. Je nach Schreib-Intensität würde ich schon mindestens wöchentlich ein Voll-Backup machen und das Binlog auf die Position des Backups purgen.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: InnoDB Backups beschleunigen (wie mysqlhotcopy)

Post by isotopp »

andreask2 wrote:Hi!

Wir führen Backups von InnoDB Tabellen mit mysqldump durch, was teilweise mehrere Stunden dauert. Das mysqlhotcopy Skript kann man soweit ich weiß nicht verwenden. Gibt es irgendwelche Tricks, diese zu beschleunigen?

Grüße
Andreas


Verwende mylvmbackup. Es ist dann auch nicht notwendig, den Server runter zu fahren.
Top

andreask2
RSAC
Posts: 701
Joined: 2004-01-27 14:16
Location: Aachen

Re: InnoDB Backups beschleunigen (wie mysqlhotcopy)

Post by andreask2 »

Danke Euch für die Tipps, ich denke, mylvmbackup ist das was ich gesucht habe!
Top