创建模拟数据
CREATE DATABASE test_bk;
USE test_bk;
CREATE TABLE t1 (id int);
INSERT INTO t1 VALUES(1),(2),(3);
COMMIT;
SELECT * FROM t1;
首先进行全备份
mysqldump -uroot -p123456 -A -E -R --triggers --set-gtid-purged=OFF --master-data=2 --single-transaction|gzip > backup/full_$(date +%F).sql.gz
删除数据
cd test_bk && rm -rf *
创建其他数据
CREATE TABLE t2 (id INT);
INSERT INTO t2 VALUES(111),(222),(333);
SELECT * FROM t2;
解压sql文件,进行查找 master_log_pos号
gunzip full_2018_07_10.sql
大概在行数的第 20~30行
show binlog events in 'mysql-bin.000004';
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=2446;
然后通过 过滤查找出 误操作的命令所在的 start号
mysql -uhailong -p123456 -e "show binlog events in 'mysql-bin.000004'" | tail -100 | grep -i 'drop'
mysql-bin.000004 259 Query 1 2446 DROP DATABASE test_bk
进行 Mysqlbinlog导出数据
mysqlbinlog --skip-gtids --start-position=2339 --stop-position=2446 -d backup_bk ../mysql-bin.000004 > /tmp/bk.sql
最后进行备份恢复
source /tmp/bk.sql;
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)