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.