UUGRN:Dienste/MySQL/backup

Aus UUGRN
< UUGRN:Dienste‎ | MySQL
Version vom 22. April 2009, 08:51 Uhr von Rabe (Diskussion | Beiträge) (erstellt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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"