一、下载my2sql
my2sql下载地址https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_7.x/my2sql
二、my2sql工具注意事项
1. binlog格式必须为row,且binlog_row_image=full
-
原因:
binlog_row_image
参数决定了 binlog 中是否记录完整的旧值和新值。当设置为FULL
时,binlog 会记录:-
旧值(Before Image):在更新或删除操作之前,记录了完整的行数据。
-
新值(After Image):在更新或插入操作之后,记录了完整的行数据。
-
2. 只能回滚 DML,不能回滚 DDL
-
DML(Data Manipulation Language):数据操作语言,包括
INSERT
、UPDATE
、DELETE
等操作。这些操作涉及数据的增删改,可以通过 binlog 中的旧值和新值进行回滚。 -
DDL(Data Definition Language):数据定义语言,包括
CREATE
、ALTER
、DROP
等操作。这些操作涉及表结构的变更,无法通过 binlog 直接回滚。 -
注意事项:
-
如果需要回滚 DDL 操作,通常需要手动恢复(例如通过备份)。
-
my2sql
工具只能解析 DML 操作的 binlog,无法处理 DDL 操作。
-
2. 用户密码认证必须是 mysql_native_password
-
原因:
my2sql
工具依赖于 MySQL 的原生认证机制(mysql_native_password
)来解析用户密码。如果使用其他认证方式(如sha256_password
或caching_sha2_password
),可能会导致连接失败。
三、delete误删除恢复
- 模拟误操作
use ads;
delete from ads_xehz;
- 把误操作的binlog目录复制到新目录
cd /data/mysql/binlog/
ll
# 根据写入时间大致判断这个误操作在哪个binlog日志上
mkdir /data/backup/rollback
cp /data/mysql/binlog/mysql-bin.000001 /data/backup/rollback
- 查看误操作事务开始和结束的位点
mysqlbinlog mysql-bin.000001 --start-datetime='2025-04-11 16:00:00' --stop-datetime='2025-04-11 17:00:00' --base64-output=decode-rows -v > test.sql
# 查看test.sql文件,查找误操作的表,找到开始位点和结束位点
- 生成回滚SQL
cd /data/backup
mkdir test
./my2sql -user ccj -password ccj1 -host 127.0.0.1 -databases ads -tables ads_xehz -work-type rollback -start-file /data/backup/rollback/mysql-bin.000001 -start-pos 310 -stop-pos 131992 -output-dir /data/backup/test
再进入/data/backup/test
rollback.1.sql就是回滚的SQL文件
mysql -uroot -p < rollback.1.sql