MySQL數據恢復依賴兩大信息源:備份文件將數據恢復至備份時間點,二進制日志重放增量事務恢復至故障點。掌握兩者協同機制,是構建RPO≈0恢復能力的關鍵。
mysqldump備份:mysql -u root -p db_name < backup.sqlmysqlbinlog解析二進制日志重做事務# 恢復至錯誤發生前一秒
mysqlbinlog --stop-datetime="2023-04-20 09:59:59" /var/log/mysql/bin.123456 | mysql -u root -p
# 恢復錯誤後的正常業務
mysqlbinlog --start-datetime="2023-04-20 10:01:00" /var/log/mysql/bin.123456 | mysql -u root -p
mysqlbinlog --start-datetime="..." --stop-datetime="..." bin.xxx > /tmp/review.sqlDROP/DELETE),記錄log_pos位置號mysqlbinlog --stop-position="368312" bin.123456 | mysql -u root -p
mysqlbinlog --start-position="368315" bin.123456 | mysql -u root -p
日志文件名含數字後綴時,ls -t -r可能因字符串排序錯誤(如bin.9 > bin.10)。解決方案:
# Perl腳本按數字後綴排序
ls -l binlog.[0-9]* | perl -e 'print sort { ($a=~/(\d+)$/)[0] <=> ($b=~/(\d+)$/)[0] } <>' | xargs mysqlbinlog | mysql --one-database db_name
BACKUP TABLE / RESTORE TABLE(MyISAM專用)BACKUP TABLE t1, t2 TO '/backup/dir';
RESTORE TABLE t1, t2 FROM '/backup/dir';
SET FOREIGN_KEY_CHECKS=0;
-- 導入表數據
SET FOREIGN_KEY_CHECKS=1;
innodb_force_recovery=1..6控制恢復激進程度(生產建議4)啟用--log-isam生成文本格式變更日志,恢復時無需mysqlbinlog轉換,直接管道導入:cat text_log | mysql --one-database db_name。