centos

centos mysql数据丢失怎么恢复

小樊
49
2025-10-06 21:16:20
栏目: 云计算

CentOS环境下MySQL数据丢失恢复方法

一、恢复前的准备工作

  1. 停止MySQL服务:防止数据被进一步修改或覆盖,执行systemctl stop mysqld
  2. 备份现有数据:即使数据丢失,也需备份当前数据库文件(默认路径/var/lib/mysql),避免恢复过程中出现意外,执行cp -r /var/lib/mysql /var/lib/mysql_backup

二、基于备份文件的恢复(最常用)

1. mysqldump备份恢复

若之前使用mysqldump工具做过全量备份(命令示例:mysqldump -u root -p database_name > backup.sql),可通过以下步骤恢复:

2. xtrabackup备份恢复

若使用Percona XtraBackup工具做过物理备份(适用于InnoDB引擎),步骤如下:

三、基于二进制日志(binlog)的恢复(时间点恢复)

若开启了binlog(默认路径/var/lib/mysql/mysql-bin.*,可通过SHOW VARIABLES LIKE 'log_bin';确认),可恢复到特定时间点或删除操作前:

  1. 定位binlog文件:执行SHOW BINARY LOGS;,找到包含误操作(如删除)的binlog文件(如mysql-bin.000002)。
  2. 提取误操作SQL:使用mysqlbinlog工具解析binlog,过滤出误操作语句(如删除Bob的记录):
    mysqlbinlog --no-defaults --start-datetime="2025-10-01 10:00:00" --stop-datetime="2025-10-01 10:30:00" /var/lib/mysql/mysql-bin.000002 > binlog.sql
    
    --start-datetime--stop-datetime需根据误操作时间调整)
  3. 恢复数据
    • 方式一(手动):打开binlog.sql,找到误删除的DELETE语句(如DELETE FROM users WHERE name = 'Bob';),将其改为INSERT语句(需知道原数据值),执行mysql -u root -p database_name < binlog.sql
    • 方式二(自动回放):若需恢复到误操作前的状态,直接执行mysqlbinlog --start-datetime="2025-10-01 10:00:00" /var/lib/mysql/mysql-bin.000002 | mysql -u root -p(跳过误操作时间点后的语句)。
  4. 验证数据:登录MySQL检查数据是否恢复。

四、第三方工具恢复(无备份时的补充)

若未做备份且binlog未开启,可尝试第三方工具(如undrop-for-innodb),但恢复成功率取决于数据覆盖情况:

  1. 安装工具:下载并编译undrop-for-innodb(参考官方文档)。
  2. 执行恢复
    ./undrop-for-innodb --innodb_data_file_path=/var/lib/mysql/ibdata1 --socket=/var/lib/mysql/mysql.sock --table=database_name.table_name
    
  3. 保存恢复的数据:工具会生成恢复脚本,执行后将数据导入新表。

注意事项

0
看了该问题的人还看了