温馨提示×

ubuntu mysql怎么恢复误删

小樊
73
2026-10-04 02:22:13
栏目: 云计算

在 Ubuntu 上恢复 误删的 MySQL 数据,要看你是“删了什么”以及“有没有备份/二进制日志”。下面按常见情况说明:


一、误删的是【整个数据库 / 表】(DROP)

✅ 情况 1:有备份(最推荐)

如果你之前用 mysqldump 或物理备份过:

# 恢复整个库
mysql -u root -p 数据库名 < backup.sql

如果是所有库:

mysql -u root -p < all_backup.sql

✅ 情况 2:开启了 binlog(二进制日志)

MySQL 默认在 Ubuntu 上可能已开启:

SHOW VARIABLES LIKE 'log_bin';

如果是 ON,可以恢复。

步骤:

  1. 查看 binlog 文件
ls -lh /var/lib/mysql/
# 如 mysql-bin.000001
  1. 找到删除时间前后的日志
mysqlbinlog --base64-output=DECODE-ROWS -v \
/var/lib/mysql/mysql-bin.000001 > binlog.sql
  1. 编辑 binlog.sql,删除 DROP 语句

  2. 恢复

mysql -u root -p 数据库名 < binlog.sql

⚠️ 只能恢复到“未删除前”的状态


二、误删的是【某几条数据】(DELETE)

✅ 有 binlog(ROW 模式)

SHOW VARIABLES LIKE 'binlog_format';

如果是 ROW,可以恢复。

使用:

mysqlbinlog --base64-output=DECODE-ROWS -v \
/var/lib/mysql/mysql-bin.000001 > binlog.sql

在文件中找到 DELETE 对应的旧数据,手动转成 INSERT 执行。


三、没有备份 + 没有 binlog(最危险)

❌ 基本无法恢复

但可以尝试:

1. 停止 MySQL 服务

sudo systemctl stop mysql

2. 使用数据恢复工具(仅限 InnoDB 文件未被覆盖)

  • extundelete
  • testdisk
  • 专业工具:undrop-for-innodb

⚠️ 成功率低,且不要往磁盘写新数据


四、Ubuntu 常见路径

项目 路径
数据目录 /var/lib/mysql
配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf
binlog /var/lib/mysql/mysql-bin.*

五、以后怎么防误删 ✅

  1. 开启 binlog
[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
  1. 定期备份
mysqldump -u root -p --all-databases > backup.sql
  1. 删除前先 SELECT 确认
  2. 使用只读账号做查询

六、如果你愿意

你可以告诉我:

  • MySQL 版本
  • 删的是库 / 表 / 数据
  • 是否有备份或 binlog

我可以直接帮你写恢复命令。

0 踩