Mit den Programmen mysqldump
und mysql
können Backups einer MySQL Datenbank erstellt und wiederhergestellt werden. Dabei spielt die grösse einer Datenbank keine Rolle, was ein unschlagbarer Vorteil im Vergleich zum phpMyAdmin sein kann.
mysqldump
Der Grundaufruf von mysqldump sieht wie folgt aus:
mysqldump -u [USERNAME] --password="[PASSWORT]" [DATENBANK] > [BACKUP_DATEI_NAME].sql
Mit weiteren Parametern:
mysqldump --no-tablespaces --extended-insert --compress --quote-names --single-transaction --routines --triggers --opt -u [MYSQL_USER] --password="[MYSQL_PW]" [MYSQL_DB] > [BACKUP_DATEI_NAME].sql
Will man das Backup gleich auch mit gzip komprimieren:
mysqldump --max_allowed_packet=512M --no-tablespaces --extended-insert --compress --quote-names --single-transaction --routines --triggers --opt -u [MYSQL_USER] --password="[MYSQL_PW]" [MYSQL_DB] | gzip -c > [BACKUP_DATEINAME].sql.gz
mysqldump kann auch via SSH Remote ausgeführt werden. Dazu sollte die Ausführung in eine Scriptdatei ausgelagert werden:
ssh -C -f -L$[FORWARD_PORT]:[MYSQL_SERVER]:[MYSQLPORT -p [SSH_PORT] -i [SSH_PRIVATE_KEY] [SSH_USER]@[SSH_SERVER] sleep 5
mysqldump -h 127.0.0.1 -P $[FORWARD_PORT] --max_allowed_packet=512M --no-tablespaces --extended-insert --compress --quote-names --single-transaction --routines --triggers --opt -u [MYSQL_USER] --password="[MYSQL_PW]" [MYSQL_DB] > [BACKUP_DATEI_NAME].sql
Wenn man der Backupdatei ein Datum hinzufügen will, kann dies wie folgt gemacht werden:
mysqldump -u [USERNAME] --password="[PASSWORT]" [DATENBANK] > `date +%Y.%m.%d-%H.%M.%S`_DATEINAME.sql'
mysql
Um ein Datenbankbackup wiederherzustellen wird das mysql Programm genutzt:
mysql -u [MYSQL_USER] --password="[MYSQL_PW]" [MYSQL_DB] < [BACKUP_DATEI_NAME].sql
Wenn die Backupdatei mit gzip komprimiert ist.
gunzip < [BACKUP_DATEI_NAME].sql.gz | mysql [MYSQL_USER] --password="[MYSQL_PW]" [MYSQL_DB]
Die Datei auf einem Remoteserver wiederherstellen:
gunzip -c [BACKUP_DATEI_NAME].sql.gz | ssh -p [SSH_PORT] -i [SSH_PRIVATE_KEY] [SSH_USER]@[SSH_SERVER] "mysql -h [MYSQL_SERVER] -P [MYSQL_PORT] -u [MYSQL_USER] --password='[MYSQL_PW]' [MYSQL_DB]