Debian MariaDB 数据恢复方法
一 恢复前的关键准备
SET GLOBAL read_only=1; SET GLOBAL super_read_only=1;(如版本支持)。随后执行 FLUSH LOGS; 切到新 binlog,并把当前所有 binlog 文件复制到安全位置备份。记录恢复基准点:SHOW MASTER STATUS\G(关注 File、Position 或 GTID)。同时确认已启用二进制日志且为 ROW 格式:SHOW VARIABLES LIKE 'log_bin';、SHOW VARIABLES LIKE 'binlog_format';。这些步骤能显著提升可恢复性与恢复精度。二 有备份时的恢复
mysql < backup.sql;若仅导出数据(不含 CREATE DATABASE),需先建库:CREATE DATABASE db;,再导入:mysql db < backup.sql。导入大量数据时,可在会话中临时关闭二进制日志以减少冗余:SET sql_log_bin=OFF; SOURCE /path/backup.sql; SET sql_log_bin=ON;。--master-data=2 会在 dump 中写入 CHANGE MASTER TO ... 的注释行,包含 MASTER_LOG_FILE 与 MASTER_LOG_POS)。恢复流程:先恢复全备,再用 mysqlbinlog 回放增量到误删前。示例:mysqlbinlog --start-position=POS --stop-datetime="2025-12-15 14:30:00" mysql-bin.000123 | mysql。如仅需某库,可加 --database=dbname 过滤。mariabackup --prepare --target-dir=/backup/full),停库,将数据目录清空(或移走),执行拷贝回滚(mariabackup --copy-back --target-dir=/backup/full),修正权限属主(常见为 mysql:mysql),再启动实例。此方式恢复速度快、适合大体量数据。三 无备份或仅文件损坏时的恢复
[mysqld] 逐步设置 innodb_force_recovery=1 并重启,逐级递增至能启动的最高值(通常不超过 6)。启动后立刻逻辑导出数据(如 mysqldump 全库),随后重建实例并从导出文件恢复。完成导出后务必移除该参数并正常重启,避免长期运行在恢复模式带来风险。chown -R mysql:mysql /var/lib/mysql),再启动实例并导出数据。此法本质是“文件级移植”,对 MyISAM 与 InnoDB 的文件布局有明确依赖,操作需谨慎。四 常见场景与命令速查
| 场景 | 关键动作 | 核心命令示例 |
|---|---|---|
| 误删表/库,需回到误删前 | 只读→备份 binlog→全备恢复→增量回放 | `SET GLOBAL read_only=1; FLUSH LOGS; mysql < full.sql; mysqlbinlog --start-position=POS --stop-datetime=“2025-12-15 14:29:00” mysql-bin.000123 |
| 仅部分库/表恢复 | 逻辑备份按库/表导入 | mysql db < tb.sql 或 mysql -e "CREATE DATABASE db;"; mysql db < backup.sql |
| 无备份但实例可强制启动 | 强制恢复→导出→重建 | 配置 innodb_force_recovery=1..N→mysqldump -A > dump.sql→重装→导入 |
| 物理损坏或文件仍在 | 文件拷贝恢复 | 停库→拷文件→chown mysql:mysql→启动→导出 |
五 恢复后的验证与加固
log_bin=ON,建议 binlog_format=ROW),采用“全量 + 增量(binlog)”或“物理全量(mariabackup)+ binlog”的组合;定期做恢复演练与备份可用性验证,确保 RPO/RTO 达标。