2009-08-18 4 views
6

Ich habe eine MySQL-Datenbank von etwa 1,7 GB. Ich unterstütze es normalerweise mit mysqldump und das dauert etwa 2 Minuten. Allerdings würde Ich mag die Antworten auf die folgenden Fragen wissen:Backup-MySQL-Datenbank

  1. Hat mysqldump Block Lese- und/oder Schreibvorgänge in der Datenbank? In einem Live-Szenario möchte ich die Benutzer nicht daran hindern, die Datenbank zu verwenden, während sie gesichert wird.

  2. Es wäre ideal für mich, die VOLLSTÄNDIGE Datenbank nur einmal innerhalb von etwa einer Woche zu sichern, aber in den dazwischenliegenden Tagen muss nur eine Tabelle gesichert werden, da sich die anderen nicht ändern. Gibt es einen Weg, dies zu erreichen?

  3. Ist mysqlhotcopy eine bessere Alternative für diese Zwecke?

Antwort

2
  1. Nein, können Sie Tabellen angeben --lock-Tabellen gesperrt werden verwendet, aber sie sind nicht standardmäßig
  2. Wenn Sie keine Tabellen angeben dann die gesamte DB gesichert wird , oder Sie können eine Liste der Tabellen angeben:

    mysqldump [Optionen] db_name [Tabellen]

  3. es nicht leid verwendet, aber ich eine Reihe von MySQL DBs laufen, größer einige etwas kleiner als 1,7 GB und ich Verwende mysqldump für alle meine Backups .

+0

Dank Makros für Ihre Antwort! – TMM

5

mysqlhotcopy funktioniert nicht in bestimmten Fällen, in denen die readlock verloren, und funktioniert nicht mit InnoDB-Tabellen.

mysqldump ist mehr verwendet, da es alle Arten von Tabellen sichern kann.

Von MySQL Dokumentation

mysqlhotcopy ist ein Perl-Skript, das ursprünglich geschrieben und wurde von Tim Bunce beigetragen. Er verwendet LOCK TABLES, FLUSH TABLES und cp oder scp, um schnell eine Datenbanksicherung durchzuführen. Dies ist der schnellste Weg, um eine Sicherungskopie der Datenbank oder einzelner Tabellen zu erstellen. Sie kann jedoch nur auf demselben Computer ausgeführt werden, auf dem sich auch die Datenbankverzeichnisse befinden. mysqlhotcopy funktioniert nur zum Sichern von MyISAM- und ARCHIVE-Tabellen. Es läuft unter Unix und NetWare

Die mysqldump Client ist ein Backup-Programm ursprünglich von Igor Romanenko geschrieben. Es kann verwendet werden, um eine Datenbank oder eine Sammlung von Datenbanken zum Sichern oder Übertragen auf einen anderen SQL-Server (nicht unbedingt einen MySQL-Server) zu sichern. Der Speicherauszug enthält normalerweise SQL-Anweisungen, um die Tabelle zu erstellen, sie aufzufüllen oder beides. Mysqldump kann jedoch auch zum Generieren von Dateien in CSV, anderem Text mit Trennzeichen oder XML verwendet werden.

Tschüss.

+0

Danke RRUZ für die nützlichen Informationen! – TMM

3

1) mysqldump blockiert nur, wenn Sie es anfordern (eine der --lock-Tabellen, --lock-all-tables, --eine-Transaktion). Wenn Sie jedoch möchten, dass Ihre Sicherung konsistent ist, sollte mysqldump blockieren (mit --single-transaction oder --lock-all-tables) oder Sie erhalten einen inkonsistenten Datenbank-Snapshot. Hinweis: - Eine einzige Transaktion funktioniert nur für InnoDB.

2) sicher, aufzuzählen, nur die Tabellen, die Sie nach dem Namen der Datenbank gesichert werden soll:

mysqldump OPTIONS DATABASE TABLE1 TABLE2 ... 

Alternativ können Sie die Tabellen ausschließen wollen Sie nicht:

mysqldump ... --ignore-table=TABLE1 --ignore-table=TABLE2 .. DATABASE 

So Sie können einmal pro Woche einen ganzen Datenbankspeicherauszug erstellen und nur einmal täglich die wechselnden Tabellen sichern.

3) mysqlhotcopy funktioniert nur auf MyISAM -Tabellen und in den meisten Anwendungen ist es besser mit InnoDB. Es gibt kommerzielle Tools (ziemlich teuer) zum Hotbackup von innodb -Tabellen. In letzter Zeit gibt es auch die neue Opensource für diesen Zweck - Xtrabackup

Auch, um den Prozess zu automatisieren, können Sie astrails-safe verwenden. Es unterstützt Datenbank-Backup mit mysqldump und Dateisystem mit tar. + Verschlüsselung + Upload auf S3, + viele andere Leckereien. Es gibt noch keine xtrabackup-Unterstützung, aber es sollte einfach hinzuzufügen sein, wenn Sie das brauchen.

+0

danke für die nützliche Antwort @Vitaly Kushner – kta

3

Wenn Sie einen mysql-Slave zu Ihrem Setup hinzufügen, können Sie konsistente Backups durchführen, ohne die Produktionsdatenbank zu sperren.

Das Hinzufügen eines Slave gibt Ihnen auch ein Binärlog der Änderungen. Ein Dump ist eine Momentaufnahme der Datenbank zu dem Zeitpunkt, zu dem Sie den Dump gemacht haben. Das Binärprotokoll enthält alle Anweisungen, die die Daten zusammen mit einem Zeitstempel geändert haben.

Wenn Sie mitten am Tag einen Fehler haben und Ihre Backups nur einmal am Tag durchführen, haben Sie einen halben Arbeitstag verloren. Mit Binärprotokollen und mysqldump können Sie vom vorherigen Tag wiederherstellen und die Protokolle bis zum Fehlerpunkt "abspielen".

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

Wenn Ihre laufenden MySQL auf einem Linux-Server mit LVM-Platten oder einem Windows-Server mit VSS, Sie Zamanda heraus überprüfen sollten. Es dauert Binär-Diffs der Daten auf der Festplatte, die viel schneller zu lesen und wiederherzustellen als ein Text-Dump der Datenbank ist.

0

für MySQL und PHP diese versuchen

$dbhost = 'localhost'; 
$dbuser = 'xxxxx'; 
$dbpass = 'xxxxx'; 
$dbname = 'database1'; 
$folder = 'backups/'; // Name of folder you want to place the file 
$filename = $dbname . date("Y-m-d-H-i-s") . ".sql"; 
$remove_days = 7; // Number of days that the file will stay on the server 



$command="mysqldump --host=$dbhost --user=$dbuser --password=$dbpass $dbname > $folder$filename"; 
system($command); 

$files = (glob("$folder"."*.sql")); 

    foreach($files as $file) { 
     if(is_file($file) 
     && time() - filemtime($file) >= $remove_days*24*60*60) { // 2 days = 2*24*60*60 
      unlink($file); 
      echo "$file removed \n"; 
     } else { echo "$file was last modified: " . date ("F d Y H:i:s.", filemtime($file)) . "\n"; } 
    }