您需要考虑两件事
确实没有什么可以替代进行还原。这只是 mysqldump 的重播。如果您需要执行PITR,您可能需要针对适用的二进制日志运行mysqlbinlog并在所需的日期和时间之前播放事件。
您应该定期执行此操作,以防 mysqldump 所在的磁盘损坏或 mysqldump 包含 BLOB 中的字符序列,从而无法恢复。
您应该能够毫无问题地启动 mysqld。mysqld 运行后,您需要测试每个表的可用性。您可以通过运行此查询来做到这一点:
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;
Run Code Online (Sandbox Code Playgroud)
这将为每个 MyISAM、InnoDB、ARCHIVE 和 CSV 表创建一个CHECK TABLE命令来检查它们的完整性。您可以将其输出到脚本并执行该脚本。CHECK TABLE 命令还可以让您将所有表作为单个命令进行检查。您可以更改查询以将表名收集为逗号分隔的列表并添加:
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;
Run Code Online (Sandbox Code Playgroud)
警告:该GROUP_CONCAT()
函数的默认限制为 1024 个字符。如果你的表数量不多,你不会列出所有的表,最后列出的表会被截断,导致错误。您可以在命令前加上SET SESSION group_concat_max_len = 10000;
以增加返回的长度。
这是我笔记本电脑上 MySQL 5.6.16 (Windows) 的示例:
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>
Run Code Online (Sandbox Code Playgroud)
然后,将该输出存储到变量并从命令行执行。请注意,我们group_concat_max_len
在运行命令之前暂时增加了。
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}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21865 次 |
最近记录: |