EINBLICK IN DIE DURCHFÜHRUNG VON BACKUPS MIT mysqldump
IMHO Backups zu machen ist mehr eine Kunstform geworden, wenn man nur weiß, wie man damit umgeht
Sie haben Optionen
Option 1: mysqldump eine gesamte mysql-Instanz
Dies ist der einfachste, der Kinderspiel !!!
mysqldump -h... -u... -p... --hex-blob --routines --triggers --all-databases | gzip > MySQLData.sql.gz
Alles in einer Datei geschrieben: Tabellenstrukturen, Indizes, Trigger, gespeicherte Prozeduren, Benutzer, verschlüsselte Passwörter. Andere mysqldump-Optionen können auch verschiedene Stile von INSERT-Befehlen, Protokolldateien und Positionskoordinaten aus Binärprotokollen, Datenbankerstellungsoptionen, Teildaten (Option --where) usw. exportieren.
Option 2: mysqldump separate Datenbanken in separate Datendateien
Beginnen Sie mit der Erstellung einer Liste von Datenbanken (2 Techniken, um dies zu tun)
Technik 1
mysql -h... -u... -p... -A --skip-column-names -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > ListOfDatabases.txt
Technik 2
mysql -h... -u... -p... -A --skip-column-names -e"SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ListOfDatabases.txt
Technik 1 ist der schnellste Weg. Technik 2 ist die sicherste und sicherste. Technik 2 ist besser, da Benutzer manchmal Ordner für allgemeine Zwecke in / var / lib / mysql (datadir) erstellen, die nicht datenbankbezogen sind. Das Informationsschema würde den Ordner als Datenbank in der Tabelle information_schema.schemata registrieren. Technik 2 würde Ordner umgehen, die keine MySQL-Daten enthalten.
Sobald Sie die Liste der Datenbanken kompiliert haben, können Sie die Liste in einer Schleife durchlaufen und sie auf Wunsch auch parallel mit mysqldump sichern.
for DB in `cat ListOfDatabases.txt`
do
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
done
wait
Wenn zu viele Datenbanken gleichzeitig gestartet werden können, sichern Sie diese 10 gleichzeitig:
COMMIT_COUNT=0
COMMIT_LIMIT=10
for DB in `cat ListOfDatabases.txt`
do
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
Option 3: mysqldump separate Tabellen in separate Datendateien
Beginnen Sie mit der Erstellung einer Tabellenliste
mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ListOfTables.txt
Dann geben Sie alle Tabellen in 10er-Gruppen aus
COMMIT_COUNT=0
COMMIT_LIMIT=10
for DBTB in `cat ListOfTables.txt`
do
DB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $1}'`
TB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $2}'`
mysqldump -h... -u... -p... --hex-blob --triggers ${DB} ${TB} | gzip > ${DB}_${TB}.sql.gz &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
Option 4: NUTZEN SIE IHRE FANTASIE
Probieren Sie Variationen der oben genannten Optionen und Techniken für saubere Schnappschüsse aus
Beispiele
- Ordnen Sie die Liste der Tabellen nach der Größe der einzelnen Tabellen auf- oder absteigend.
- Führen Sie in einem separaten Prozess "FLUSH TABLES WITH READ LOCK; SELECT SLEEP (86400)" aus, bevor Sie mysqldumps starten. Beenden Sie diesen Vorgang, nachdem mysqldumps abgeschlossen ist. Dies ist hilfreich, wenn eine Datenbank sowohl InnoDB als auch MyISAM enthält
- Speichern Sie die mysqldumps in datierten Ordnern und drehen Sie alte Sicherungsordner heraus.
- Laden Sie die gesamte Instanz von mysqldumps auf eigenständige Server.
VORBEHALT
Nur Option 1 bringt alles. Der Nachteil ist, dass mysqldumps, die auf diese Weise erstellt wurden, nur in dieselbe Majot-Release-Version von mysql zurückgeladen werden können, die der mysqldump generiert hat. Mit anderen Worten, ein mysqldump aus einer MySQL 5.0-Datenbank kann in 5.1 oder 5.5 nicht geladen werden. Der Grund ? Das MySQL-Schema unterscheidet sich grundlegend zwischen den Hauptversionen.
In den Optionen 2 und 3 werden keine Benutzernamen und Kennwörter gespeichert.
Hier ist die allgemeine Möglichkeit, die SQL-Berechtigungen für Benutzer zu sichern, die lesbar und portabler sind
mysql -h... -u... -p... --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -h... -u... -p... --skip-column-names -A | sed 's/$/;/g' > MySQLGrants.sql
Option 3 speichert die gespeicherten Prozeduren nicht, daher können Sie Folgendes tun
mysqldump -h... -u... -p... --no-data --no-create-info --routines > MySQLStoredProcedures.sql &
Ein weiterer Punkt, der beachtet werden sollte, betrifft InnoDB. Wenn Sie über einen großen InnoDB-Pufferpool verfügen, ist es sinnvoll, diesen so gut wie möglich zu leeren, bevor Sie Sicherungen durchführen. Andernfalls verbringt MySQL die Zeit damit, Tabellen mit verbliebener Dirty Page aus dem Pufferpool zu leeren. Folgendes schlage ich vor:
Führen Sie diesen SQL-Befehl ca. 1 Stunde vor der Durchführung der Sicherung aus
SET GLOBAL innodb_max_dirty_pages_pct = 0;
In MySQL 5.5 beträgt der Standardwert für innodb_max_dirty_pages_pct 75. In MySQL 5.1 und früheren Versionen beträgt der Standardwert für innodb_max_dirty_pages_pct 90. Wenn Sie innodb_max_dirty_pages_pct auf 0 setzen, beschleunigt dies das Leeren von fehlerhaften Seiten auf die Festplatte. Dies verhindert oder mindert zumindest die Auswirkungen der Bereinigung unvollständiger zweiphasiger Festschreibungen von InnoDB-Daten, bevor ein mysqldump für InnoDB-Tabellen ausgeführt wird.
LETZTES WORT ZU mysqldump
Die meisten Leute scheuen mysqldump zugunsten anderer Tools und diese Tools sind in der Tat gut.
Solche Werkzeuge umfassen
- Maatkit (parallel Dump / Restore - Skripts von Percona [veraltet , aber groß])
- XtraBackup (TopNotch Snapshot Backup von Percona)
- CDP R1Soft ( MySQL- Moduloption , die Momentaufnahmen macht)
- MySQL Enterprise Backup (früher InnoDB Hot Backups [kommerziell])
Wenn Sie den Geist eines echten MySQL-DBAs haben, können Sie mysqldump annehmen und die vollständige Beherrschung darüber erlangen, die erreicht werden kann. Mögen alle Ihre Backups ein Spiegelbild Ihrer Fähigkeiten als MySQL-DBA sein .