如何在mysql中恢复误删数据

说实话,误删MySQL中的数据是非常烦人的。
恢复密钥取决于之前是否打开过二进制记录或是否进行过备份。
我会帮你找出来的。

1 .使用binlog进行恢复(必须事先打开binlog) 这取决于条件,即您必须使用二进制记录,并且您必须知道它们何时被意外删除。

1 .首先确认binlog是否打开。
输入命令: SQL 将变量显示为“log_bin”; 如果显示则说明正在运行。
如果没有激活,则无法使用此技巧。

2 找到对应的binlog文件。
输入命令: SQL 显示二进制记录; 这将列出所有二进制日志文件。
找出哪个文件被删除了。

3 使用工具解析binlog生成SQL。
例如,如果您确定删除发生在 2 02 4 年 4 月 1 日 1 0:00 到 1 0:1 0 之间,请使用以下命令: 重击 mysqlbinlog --start-datetime="2 02 4 -04 -01 1 0:00:00" --stop-datetime="2 02 4 -04 -01 1 0:1 0:00" /var/lib/mysql/mysql-bin.000001 > Recover.sql 此 Recovery.sql 文件中将有删除数据的命令。

4 再次更改删除数据命令。
例如,将DELETE更改为INSERT并手动更改Recovery.sql文件。

5 执行这个SQL: 重击 源/path/to/recover.sql
2 使用备份来恢复(必须有备份) 这个比较简单,只需从备份中恢复即可。

1 .如果有全量备份,直接导入: 重击 mysql -uroot -p your_database 2 如果只删除了部分数据,您可以从备份中导出该部分表的数据: 重击 mysql -uroot -p your_database < Part>如果开启了binlog,还是需要使用binlog来弥补这一点。

3 立即停止写入过程(如果不存在日志或备份) 如果没有打开任何内容,请立即停止所有写入。

1 .如果发现数据被删除了,立即告诉程序不要写入数据库。
2 . 这样可以防止新数据覆盖已删除的日志空间。
稍后您可能必须依赖文件系统恢复,这比较困难。

4 使用第三方工具恢复(如果没有数据历史记录或备份) 这一招非常高深,不是一般人能玩出来的。

1 .使用 Percona 的 InnoDB 恢复工具从 .ibd 文件恢复数据。
2 .或者使用extundelete/photorec。
如果文件被删除数据,您还可以从磁盘恢复 .frm 和 .ibd 文件。

注意:这个东西技术要求很高,需要了解文件系统。
如果删除后写入大量新数据,成功率就会很低。

5 如何预防 最好的方法是提前这样做:
1 打开binlog并设置过期时间。
在my.cnf中添加: .ini [混乱] log_bin=/var/lib/mysql/mysql-bin.log Experience_logs_days=7
2 定期备份。
使用 mysqldump: 重击 mysqldump -uroot -p --all-databases > full_backup.sql 或者使用 PerconaXtraBackup 进行快速备份。

3 做恢复练习。
定期模拟删除数据,看看备份和恢复过程如何。

说实话,让我们把这个带回来。
没有备份或二进制日志是最糟糕的事情。
最安全的就是事先打开binlog并备份,不要等到有事情发生才惊慌。

mysql误删数据怎么恢复

上次有客户问我MySQL数据误删了怎么办。
我在这里经历了一些陷阱,并将与您分享一些实用的方法。

上周,一位客户问我,他们生产环境中的 MySQL 中的一个重要表被删除了。
他当时很困惑。
我很快要求他们首先执行以下步骤:
1 立即停止服务 这一步是最关键的!如果你仔细想想,数据仍然在磁盘上,但数据库不断执行新的操作,新数据在写入时会被覆盖。
我见过的最糟糕的事情是,停止5 分钟后,我发现它能够恢复,但停止1 5 分钟后,它就完全消失了。
直接关闭mysqladmin或者停止服务器进程,越早越好。

2 快速查找Binlog 如果在删除数据之前binlog是打开的,一般都会保存下来。
首先查看最新的binlog文件: sql 查看二进制日志; 找到文件名后,用mysqlbinlog解析,例如: 巴什 mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysqlbinlog /var/log/mysql/mysql-bin.000001 | grep '删除自' 这使您可以查看具体删除了哪些表和数据记录。
然后手动更改SQL,将DELETE更改为INSERT,然后倒回: sql INSERT INTO 表名 SELECT FROM 备份表名 WHERE 条件; 不过有一个坑:如果binlog设置为ROW模式,直接看文本是找不到的。
要解析,您需要使用 --base64 -output=DECODE-ROWS 参数。

3 尝试恢复工具
MyISAM Table:不再推荐这种旧技术。
不过如果是这样的话,myisamchk是可以修复表的,但是恢复效果就看运气了。

InnoDB表:如果删除数据时Binlog没有打开或者Binlog无法恢复,可以尝试InnoDB的Binlog恢复。
不过前提是安装了mysqlbinlog工具和innodb恢复工具。
恢复当前交易需要事先安装插件。
过程相当复杂。
上次我花了3 个小时才完成。

4 从备份恢复是最安全的选择 这个是最靠谱的。
如果客户有备份,直接使用: 巴什 mysql -u root < /path/to/backup.sql 或者使用像Percona XtraBackup这样的热备份工具,它可以保留事务日志并更快地恢复它们。

5 扭转慢查询日志 对于大表,误删除的SQL可能会在慢查询日志中找到。
检查执行时间戳附近的所有语句: sql 从 Slow_log 中选择时间 > '2 02 3 -1 0-2 7 1 0:00:00' AND 时间 < '2 02 3 -1 0-2 7 1 0:3 0:00';
注意事项
必须启用Binlog,InnoDB默认使用它,MyISAM必须手动设置,并且使用binlog格式的ROW更安全(虽然文件较大)。

忘记备份。
我建议使用时间点备份(Percona)可以精确到特定时间点的恢复。

删除数据前请确认。
最好在测试环境中运行它。
例如: sql -
测试灭火条件 SELECT FROM 表名 WHERE 条件; -
确认删除之前没有问题 DELETE FROM 表名 WHERE 条件;
权限控制:如果无需 root 即可工作,请勿使用它。
仅授予应用程序帐户REPLACE或INSERT权限,并单独对其进行操作和维护的删除权限。

最后提醒:恢复数据之前最好在测试计算机上运行它。
不要直接在生产环境中工作。
如果你纠正错误,事情会变得更糟。

mysql删除数据怎么恢复

从备份恢复: 在丢失之前备份您的数据。
命令:mysql -u root -p <数据库名>;来源<备份文件.sql>。

使用 MySQL 二进制存档: 二进制日志已启用。
订单: 1 .停止MySQL - systemctl mysql stop。
2 . 重命名日志文件:mv /var/lib/mysql/<数据库名称>/<表名称>.bin /var/lib/mysql/<数据库名称>/<表名称>.ibd。
3 .重新启动MySQL:systemctl mysql start。

使用磁盘恢复工具: 像 Recuva 这样的工具。
不保证恢复所有数据。

注意事项: 1 . 数据不会被覆盖。
2 . 升级前备份数据库。

实用警告:开始操作前请确保备份已完成。