== MySQL == === MySQL Backup === * -> feature mysql * Script ''/var/lib/mysql/mysql_backups'' verwendet für * MyISAM Tabellen: hotcopy * Innodb Tabellen: innobackupex (script, ruft xtrabackup) * wird als rpm installiert, zu finden unter http://ideenschmiede.lotum.de/2010/09/mysql-backups-mit-xtrabackup/ * ''mysql_backups'' kennt die Optionen -n (Anzeige der Kommandos) -m (nur MyISAM DB backup) -i (nur InnoDB backup) * schreibt die Dumps ins Verzeichnis /var/lib/mysql/dumps * Logfile in /var/log/mysqlbackup * ist '''eine''' innodb Tabelle vorhanden, wird diese Datenbank mit ''innobackupex'' gesichert * noaction Modus: ''/var/lib/mysql/mysql_backups -n'' * ''/var/lib/mysql/mysql_backups -i'' sichert nur innodb DBs === Restore von MyISAM Datenbanken === * erfolgt auf dem mysql Server durch einfaches Umkopieren der Dumpfiles in das Datenbankverzeichnis * die Dumpfiles müssen vom Backup geholt werden, wenn die aktuellen (nächtlichen) Dumps zu neu sind * danach sollten fehlende Transaktionslogs appliziert werden, um die DB zu einem exakten Zeitpunkt zu restaurieren * der mysql Server ist dazu zu stoppen * die aktuelle Datenbank wird überschrieben und kann nicht wieder hergestellt werden {{{ # entweder im Backup vorhandene Dumps anzeigen, ist durch DB name zu ersetzen dsmc q b -inactive -sub=yes /var/lib/mysql/dumps/ # und restore der Dumps nach /tmp (statt gewünschtes Datum einsetzen) cd /tmp dsmc rest -inactive -pitdate= "/var/lib/mysql/dumps//*" -sub=yes /tmp/ # oder alternativ letzten Dump zum restaurieren benutzen cd ~mysql/dumps # Rückkopieren der Dumps service mysql stop cp -a ~mysql/mysqldb service mysql start # Anwenden zusätzlicher Transaktionslogs mit mysqlbinlog, falls exakter Zeitpunkt gewünscht }}} === Restore von InnoDB Datenbanken === * sollte auf test mysql server erfolgen * man kann nicht eine innodb Datenbank zurückspeichern * deshalb * Backup /var/lib/mysql/dumps/innodb/innodb.tar.gz vom gewünschten Datum aus Backup holen und auspacken * Transaktionslog applizieren * Testserver stoppen, * Umkopieren, Rechte und SELinux Attribute anpassen * Testerver starten * evtl. Änderungen vom binlog des Zielservers anwenden * Datenbank dumpen * File im Ziel MySQL Server anwenden {{{ tar -tizvf /var/lib/mysql/dumps/innodb/innodb.tar.gz mkdir /tmp/innodb cd /tmp/innodb tar -xizvf /var/lib/mysql/dumps/innodb/innodb.tar.gz # bzw. vom TSM recoverten File # Abfrage mit dsmc q b -inactive -su=yes /var/lib/mysql/dumps/innodb/innodb.tar.gz innobackupex --defaults-file=/root/.myxtrabackup.conf --apply-log /tmp/innodb # auf Test-server: service mysqld stop # ibdata und DB Files nach ~mysql/mysqldb kopieren: drwxr-xr-x 2 root root 4096 Jun 24 15:55 cecdb drwxr-xr-x 2 root root 4096 Jun 24 15:55 cecdb2 -rw-r--r-- 1 root root 5242880 Jun 24 15:57 ib_logfile0 -rw-r--r-- 1 root root 5242880 Jun 24 15:56 ib_logfile1 -rw-rw---- 1 mysql mysql 10485760 Jun 24 15:57 ibdata1 # auf Test-Server: service mysqld start # auf dem Ziel-Server für gewünschte Binlogs (evtl. auch aus Backup holen) mysqlbinlog ~mysql/binlogs/binlog.000008 >/tmp/statements.sql mysqlbinlog ~mysql/binlogs/binlog.000009 >>/tmp/statements.sql ... # /tmp/statements auf Test-Server kopieren und anwenden mysql -e "source /tmp/statements.sql" # Dump auf Test-server erstellen mysqldump --opt >/tmp/db.dump # Datenbank auf Zielserver aus dem Dump neu erzeugen mysql < /tmp/db.dump }}} === Weitere Informationen === https://dvinfo.zeuthen.desy.de/Procedures/MySQL