Ubuntu环境下MySQL数据丢失恢复方法
如果有定期备份(如.sql文件或数据库目录备份),这是恢复数据的首选方法。
.sql备份恢复:使用mysql命令导入备份文件。例如,恢复名为mydatabase的数据库:mysql -u root -p mydatabase < /path/to/backup.sql
/var/lib/mysql_backup)复制到MySQL默认数据目录(/var/lib/mysql),并修复权限:sudo systemctl stop mysql
sudo cp -R /var/lib/mysql_backup/* /var/lib/mysql/
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysql
注意:恢复前务必停止MySQL服务,避免数据覆盖。
若启用了二进制日志(默认路径/var/log/mysql/),可通过日志回放精确恢复到误操作前的时间点。
SHOW VARIABLES LIKE 'log_bin';,若值为ON则表示开启。mysqlbinlog查看日志内容,找到误删除操作的时间段:mysqlbinlog /var/log/mysql/mysql-bin.000001
2025-09-20 10:00:00之前的状态:mysqlbinlog --start-datetime="2025-09-20 09:00:00" --stop-datetime="2025-09-20 10:00:00" /var/log/mysql/mysql-bin.000001 | mysql -u root -p
提示:二进制日志需提前开启,否则无法使用此方法。
若无备份且二进制日志不可用,可尝试专业工具(适用于InnoDB引擎)。
wget https://github.com/twindb/undrop-for-innodb/archive/master.zip && unzip master.zip && cd undrop-for-innodb-master && make./undrop-for-innodb --innodb_data_file_path=/var/lib/mysql/ibdata1 --socket=/var/run/mysqld/mysqld.sock --table=test/test_table若误删除操作在未提交的事务中,可通过ROLLBACK命令撤销。
SHOW ENGINE INNODB STATUS\G,找到未提交的事务ID。ROLLBACK TO SAVEPOINT命令回滚到指定保存点(需提前设置保存点):ROLLBACK TO SAVEPOINT trx_123;
说明:若事务已提交,此方法无效。
sudo systemctl stop mysql,防止新数据覆盖丢失数据。sudo cp -R /var/lib/mysql /var/lib/mysql_current),避免恢复失败导致二次丢失。CHECK TABLE table_name;,验证表是否正常。