UUGRN:Dienste/MySQL/backup
Aus UUGRN
< UUGRN:Dienste | MySQL
Umfang
Alle Schemata werden jeweils in einen MySQL-Dump geschrieben.
Zeiten
- täglich um 0:42 Uhr
- Archiv für 3 Wochen
Restore
ganzes Schema
Ein Schema kann durch Einlesen des Dumps in ein bestehendes Schema wiederhergestellt werden. Dabei werden bestehende Tabellen überschrieben.
# mysql [...] zielschema < /pfad/zum/dump/schema
einzelne Tabelle(n)
Soll nur eine Tabelle aus dem Backup geholt werden, so muss der gesamte Dump zunächst in ein leeres Schema eingelesen werden und anschließend die gewünschte Tabelle durch mysqldump | mysql in das Zielschema kopiert werden:
# mysqladmin [...] create tmp_restore01 # mysql [...] tmp_restore01 < /pfad/zum/dump/schema # mysqldump --opt [...] tmp_restore01 tabellenname | mysql -u root ... zielschema # mysqladmin [...] drop tmp_restore01
Backup-Script
UUGRN:MySQL wird täglich um 0:42 Uhr mit folgendem Script gesichert und 3 Wochen lang archiviert:
#! /bin/sh # # # Datenbanken einzeln dumpen # DBSERVER=localhost DBAUTH="-u root -p********" cd -P /data/backup/mysql/ DIR="./$(date +%Y%m%d)" mkdir -p "$DIR" || exit 1 echo "$(date): $0: Dumping MySQL Databases: start" echo "show databases;" | /usr/local/bin/mysql ${DBAUTH} -h ${DBSERVER} | tail -n +2 | while read DB; do NOW=$(date +%Y%m%d%H%M%S) FILE="${DIR}/${DB}.${NOW}.dump" echo "$(date): $0: Dumping mysql://${DBSERVER}/${DB} to ${FILE} ..." /usr/local/bin/mysqldump --opt ${DBAUTH} -h ${DBSERVER} "${DB}" > "${FILE}" 2>"${FILE}.err" done # Symlink setzen rm latest; ln -svf ${DIR} latest echo "$(date): $0: Dumping MySQL Databases: all done" # 3 Wochen Tagessicherungen aufheben echo "$(date): $0: delete old backups: start" ( ls -1d 200?????/ | sort -rn | tail -n +22 | while read dir; do echo "./${dir}/*" ; rm -Rvf ./$dir; done ) 1>/dev/null echo "$(date): $0: delete old backups: done"