Alle Daten sind InnoDB
So erhalten Sie eine genaue Momentaufnahme der Daten:
mysqldump -uuser -ppass --single-transaction --routines --triggers --all-databases > backup_db.sql
--single-transaction
Erzeugt einen Checkpoint, der es dem Dump ermöglicht, alle Daten vor dem Checkpoint zu erfassen, während eingehende Änderungen empfangen werden. Diese eingehenden Änderungen werden nicht Teil des Dumps. Dies stellt für alle Tabellen den gleichen Zeitpunkt sicher.
--routines
Sichert alle gespeicherten Prozeduren und gespeicherten Funktionen
--triggers
Sichert alle Trigger für jede Tabelle, in der sie enthalten sind
Alle Daten sind MyISAM oder ein Mix aus InnoDB / MyISAM
Sie müssen eine globale Lesesperre festlegen, den mysqldump ausführen und die globale Sperre aufheben
mysql -uuser -ppass -Ae"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)" &
sleep 5
mysql -uuser -ppass -ANe"SHOW PROCESSLIST" | grep "SELECT SLEEP(86400)" > /tmp/proclist.txt
SLEEP_ID=`cat /tmp/proclist.txt | awk '{print $1}'`
echo "KILL ${SLEEP_ID};" > /tmp/kill_sleep.sql
mysqldump -uuser -ppass --single-transaction --routines --triggers --all-databases > backup_db.sql
mysql -uuser -ppass -A < /tmp/kill_sleep.sql
Versuche es !!!
UPDATE 2012-06-22 08:12 EDT
Da Sie <50 MB Gesamtdaten haben, habe ich eine andere Option. Anstatt einen SLEEP-Befehl im Hintergrund zu starten, um die globale Lesesperre für 86400 Sekunden (diese 24 Stunden) zu halten, nur um die Prozess-ID abzurufen und außerhalb zu beenden, sollten Sie in mysql statt im Betriebssystem eine Zeitüberschreitung von 5 Sekunden festlegen:
SLEEP_TIMEOUT=5
SQLSTMT="FLUSH TABLES WITH READ LOCK; SELECT SLEEP(${SLEEP_TIMEOUT})"
mysql -uuser -ppass -Ae"${SQLSTMT}" &
mysqldump -uuser -ppass --single-transaction --routines --triggers --all-databases > backup_db.sql
Dies ist ein sauberer und einfacherer Ansatz für sehr kleine Datenbanken.