Es gibt zwei Dinge, die Sie berücksichtigen möchten
SICHERUNGSPROZESS
Es gibt wirklich keinen Ersatz für eine Wiederherstellung. Dies ist nur eine Wiederholung eines mysqldump. Wenn Sie PITR ausführen müssen , müssen Sie möglicherweise mysqlbinlog für die entsprechenden Binlogs ausführen und die Ereignisse bis zu dem erforderlichen Datum und der erforderlichen Uhrzeit abspielen.
Sie sollten dies regelmäßig tun, wenn die Festplatte, auf der sich der mysqldump befindet, fehlerhaft ist oder wenn der mysqldump eine Zeichenfolge in einem BLOB enthält, die eine Wiederherstellung unmöglich macht.
SICHERUNGSINTEGRITÄT
Sie sollten in der Lage sein, mysqld ohne Probleme zu starten. Sobald Sie mysqld ausgeführt haben, müssen Sie die Benutzerfreundlichkeit jeder Tabelle testen. Sie können dies tun, indem Sie diese Abfrage ausführen:
SELECT CONCAT('CHECK TABLE ',dbtb,';') FROM
(SELECT CONCAT(table_schema,'.',table_name) dbtb FROM
information_schema.tables WHERE table_schema NOT IN
('information_schema','performance_schema','mysql')) A;
Dadurch wird für jede MyISAM-, InnoDB-, ARCHIVE- und CSV-Tabelle ein Befehl CHECK TABLE erstellt , um deren Integrität zu überprüfen. Sie können dies in ein Skript ausgeben und das Skript ausführen. Mit dem Befehl CHECK TABLE können Sie auch alle Tabellen als einen einzigen Befehl überprüfen. Sie können die Abfrage ändern, um die Tabellennamen als durch Kommas getrennte Liste zu erfassen und Folgendes voranzustellen:
SELECT CONCAT('CHECK TABLE ',dbtblist,';') FROM
(SELECT GROUP_CONCAT(table_schema,'.',table_name) dbtblist FROM
information_schema.tables WHERE table_schema NOT IN
('information_schema','performance_schema','mysql')) A;
WARNUNG: Die GROUP_CONCAT()
Funktion ist standardmäßig auf 1024 Zeichen begrenzt. Wenn Sie eine bescheidene Anzahl von Tabellen haben, werden nicht alle Tabellen aufgelistet, und die zuletzt aufgeführte Tabelle wird abgeschnitten, was zu einem Fehler führt. Sie können Ihrem Befehl ein Vorwort geben SET SESSION group_concat_max_len = 10000;
, um die Länge der Rückgabe zu erhöhen.
Hier ist ein Beispiel aus MySQL 5.6.16 (Windows) auf meinem Laptop:
mysql> SELECT CONCAT('CHECK TABLE ',dbtblist,';') FROM
-> (SELECT GROUP_CONCAT(table_schema,'.',table_name) dbtblist FROM
-> information_schema.tables WHERE table_schema NOT IN
-> ('information_schema','performance_schema','mysql')) A;
+----------------------------------------------------------------------------+
| CONCAT('CHECK TABLE ',dbtblist,';') |
+----------------------------------------------------------------------------+
| CHECK TABLE ayman.articles,ayman.topics,test.nuoji,test.prod,test.prodcat; |
+----------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql>
Speichern Sie diese Ausgabe dann in einer Variablen und führen Sie sie über die Befehlszeile aus. Beachten Sie, dass wir die group_concat_max_len
vor dem Ausführen des Befehls vorübergehend erhöht haben .
MYSQL_USER=root
MYSQL_PASS=rootpass
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SET SESSION group_concat_max_len = 1048576;"
SQL="${SQL} SELECT CONCAT('CHECK TABLE ',dbtblist,';') FROM"
SQL="${SQL} (SELECT GROUP_CONCAT(table_schema,'.',table_name) dbtblist FROM"
SQL="${SQL} information_schema.tables WHERE table_schema NOT IN"
SQL="${SQL} ('information_schema','performance_schema','mysql')) A"
mysql ${MYSQL_CONN} -ANe"${SQL}" | mysql ${MYSQL_CONN}
Versuche es !!!
SET SESSION group_concat_max_len = 10000;
vor dem Befehl.Ein Ansatz, den ich für eine normale mysqldump- Konsistenz verfolge
Schreiben Sie ein Shell-Skript in den unten genannten Ablauf und speichern Sie es als "mysqlbackup.sh".
! # / usr / bin / bash
Spoolen Sie die Datenbanknamen in der FOR-Schleife und erstellen Sie eigene .sqls wie db1.sql
mysqldump -uroot -pPASSWORD --single-transaction "db1"> /backup/mysql/TODAY_DATE/db1.sql
cd / backup / mysql /
tar -czvf TODAY_DATE.tar.gz TODAY_DATE # Tar Gun Zip-Verzeichnis
gzip -t /backup/mysql/TODAY_DATE.tar.gz # Zur Überprüfung der Integrität von gzip
scp /backup/mysql/TODAY_DATE.tar.gz-Datei auf einen anderen Server # Um den Ausfall auf Serverebene als minimalen Fehlerpunkt oder Archiv in SAN oder Multiplex abzudecken, können je nach Ausfallstufe Rechenzentrumsebene, Netzwerkebene usw. .,
Bereinigen und drehen Sie alte Sicherungen innerhalb von 7 Tagen (abhängig von Ihrer Notwendigkeit, sie vom lokalen Server wiederherzustellen).
crontab -l
00 3 * * * /usr/scripts/mysqlbackup.sh 2> / usr / scripts / log_mysqlbackup.
date +%Y_%m_%d_M
.irrenÜberwachen Sie Ihre Nagios oder Netcool, um auf die Datei / usr / scripts / log_mysqlbackup zu verweisen.
date +%Y_%m_%d_M
.irrenSie können andere Prüfkriterien hinzufügen, um die Warnung auszulösen, z. B. sollte die Größe der Sicherungsdatei mehr als 3 GB betragen (abhängig von der Standardgröße der Sicherung) und einen Alarm auslösen, wenn sie geringer ist usw. Analysieren Sie diese Kriterien in mysqlbackup.sh und geben Sie die Details in / usr / scripts / log_mysqlbackup ein, falls Probleme auftreten, die Ihren Kriterien entsprechen.
date +%Y_%m_%d_M
.irren. Da das Überwachungstool einen Alarm auslöst, wenn die Fehlerdatei eine Größe enthält.Da Sie die Master-Binlog-Datei und die Master-Binlog-Position in sqldump aufgezeichnet haben, ist dies bei PITR hilfreich, wenn Sie später Binärprotokolldateien anwenden müssen.
Andere Level-Checks:
Dies stellt die Konsistenz Ihrer Sicherungsdaten sicher und kann Situationen vermeiden, in denen Sicherungsdaten zum Zeitpunkt einer dringenden Wiederherstellung ungültig sind.
quelle
Sie sollten sich daran erinnern, dass ein MySQL-Dump im Grunde eine große SQL-Skript-Textdatei ist, die das Datenbankschema erstellt und alle Daten in dieses einfügt. Sobald mysqldump korrekt beendet wurde, können Sie ziemlich sicher sein, dass alles gut gelaufen ist (vorausgesetzt natürlich, Sie sichern die richtigen Datenbanken!)
Mir ist nicht bekannt, wie eine mysqldump-Datei beschädigt werden könnte (es sei denn, es gab Probleme mit dem Dateisystem. In diesem Fall könnte eine Datei beschädigt werden). MySQL ist (zu Recht) ziemlich zimperlich; Wenn die Datenbank einige beschädigte Tabellen enthält, stürzt mysqld ab und lässt mysqldump nicht beenden, um die Datenbankintegrität zu schützen.
quelle