systemctl stop mysqld。/var/lib/mysql),避免恢复过程中出现意外,执行cp -r /var/lib/mysql /var/lib/mysql_backup。若之前使用mysqldump工具做过全量备份(命令示例:mysqldump -u root -p database_name > backup.sql),可通过以下步骤恢复:
DROP DATABASE database_name; CREATE DATABASE database_name;。mysql -u root -p database_name < backup.sql。mysql -u root -p -e "USE database_name; SHOW TABLES;"。若使用Percona XtraBackup工具做过物理备份(适用于InnoDB引擎),步骤如下:
tar -zxvf backup.tar.gz -C /data/mysql/backup/。innobackupex --apply-log /data/mysql/backup/。innobackupex --copy-back /data/mysql/backup/。chown -R mysql:mysql /var/lib/mysql。systemctl start mysqld。若开启了binlog(默认路径/var/lib/mysql/mysql-bin.*,可通过SHOW VARIABLES LIKE 'log_bin';确认),可恢复到特定时间点或删除操作前:
SHOW BINARY LOGS;,找到包含误操作(如删除)的binlog文件(如mysql-bin.000002)。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需根据误操作时间调整)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(跳过误操作时间点后的语句)。若未做备份且binlog未开启,可尝试第三方工具(如undrop-for-innodb),但恢复成功率取决于数据覆盖情况:
undrop-for-innodb(参考官方文档)。./undrop-for-innodb --innodb_data_file_path=/var/lib/mysql/ibdata1 --socket=/var/lib/mysql/mysql.sock --table=database_name.table_name
/etc/my.cnf),添加log_bin=ON,重启MySQL服务。