翼度科技»论坛 编程开发 mysql 查看内容

mysql数据误删后的数据回滚

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
mysql数据误删后的数据回滚

第一步:下载MyFlash工具
  1. # 创建文件夹
  2. mkdir  /back_data
  3. cd /back_data
  4. # 下载压缩包
  5. wget https://codeload.github.com/Meituan-Dianping/MyFlash/zip/master
  6. # 安装编译相关软件
  7. yum install gcc -y
  8. yum install glib2 glib2-devel -y
  9. # 解压缩包
  10. yum -y install unzip
  11. unzip master
  12. # 进入软件目录
  13. cd /back_data/MyFlash-master
  14. # 编译
  15. sh build.sh
  16. #验证
  17. cd binary
  18. ./flashback --help
复制代码
如果显示
  1. [root@localhost binary]# ll
  2. 总用量 7380
  3. -rwxr-xr-x. 1 root root   87648 10月 31 14:20 flashback
  4. -rwxr-xr-x. 1 root root 7463125 11月  5 2020 mysqlbinlog20160408
  5. [root@localhost binary]# ./flashback --help
  6. Usage:
  7.   flashback [OPTION?]
  8. Help Options:
  9.   -h, --help                  Show help options
  10. Application Options:
  11.   --databaseNames             databaseName to apply. if multiple, seperate by comma(,)
  12.   --tableNames                tableName to apply. if multiple, seperate by comma(,)
  13.   --tableNames-file           tableName to apply. if multiple, seperate by comma(,)
  14.   --start-position            start position
  15.   --stop-position             stop position
  16.   --start-datetime            start time (format %Y-%m-%d %H:%M:%S)
  17.   --stop-datetime             stop time (format %Y-%m-%d %H:%M:%S)
  18.   --sqlTypes                  sql type to filter . support INSERT, UPDATE ,DELETE. if multiple, seperate by comma(,)
  19.   --maxSplitSize              max file size after split, the uint is M
  20.   --binlogFileNames           binlog files to process. if multiple, seperate by comma(,)
  21.   --outBinlogFileNameBase     output binlog file name base
  22.   --logLevel                  log level, available option is debug,warning,error
  23.   --include-gtids             gtids to process. if multiple, seperate by comma(,)
  24.   --include-gtids-file        gtids to process. if multiple, seperate by comma(,)
  25.   --exclude-gtids             gtids to skip. if multiple, seperate by comma(,)
  26.   --exclude-gtids-file        gtids to skip. if multiple, seperate by comma(,)
  27. [root@localhost binary]#
复制代码
即安装成功!
第二步:开启binlog日志
  1. #登录数据库 (一般或是mysql -uroot -p123456)
  2. [root@localhost binary]# mysql -uroot
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.
  4. Your MySQL connection id is 4
  5. Server version: 5.6.40 MySQL Community Server (GPL)
  6. Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  7. Oracle is a registered trademark of Oracle Corporation and/or its
  8. affiliates. Other names may be trademarks of their respective
  9. owners.
  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  11. mysql>
  12. #查询binlog日志是否开启
  13. mysql> show variables%log_bin%';
  14. +---------------------------------+-------+
  15. | Variable_name                   | Value |
  16. +---------------------------------+-------+
  17. | log_bin                         | OFF   |
  18. | log_bin_basename                |       |
  19. | log_bin_index                   |       |
  20. | log_bin_trust_function_creators | OFF   |
  21. | log_bin_use_v1_row_events       | OFF   |
  22. | sql_log_bin                     | ON    |
  23. +---------------------------------+-------+
  24. 6 rows in set (0.01 sec)
  25. mysql> SHOW VARIABLES LIKE '%binlog_row_image%';
  26. +------------------+-------+
  27. | Variable_name    | Value |
  28. +------------------+-------+
  29. | binlog_row_image | FULL  |
  30. +------------------+-------+
  31. 1 row in set (0.00 sec)
  32. mysql>
  33. #开启binlog日志
  34. #第一个:binlog_format=row
  35. [root@localhost ~]# cd /etc/
  36. [root@localhost etc]# vim my.cnf
  37. [mysqld]
  38. log-bin=mysql-bin
  39. binlog_format=row
  40. server_id=1
  41. #第二个:binlog_row_image=FULL。
  42. #默认开启
  43. #重启mysqld
  44. [root@localhost etc]# systemctl restart mysqld
复制代码
第三步:检查第二步
  1. [root@localhost etc]# systemctl restart mysqld
  2. [root@localhost etc]# mysql -uroot
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.
  4. Your MySQL connection id is 1
  5. Server version: 5.6.40-log MySQL Community Server (GPL)
  6. Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  7. Oracle is a registered trademark of Oracle Corporation and/or its
  8. affiliates. Other names may be trademarks of their respective
  9. owners.
  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  11. mysql> SHOW VARIABLES LIKE '%binlog_row_image%';
  12. +------------------+-------+
  13. | Variable_name    | Value |
  14. +------------------+-------+
  15. | binlog_row_image | FULL  |
  16. +------------------+-------+
  17. 1 row in set (0.00 sec)
  18. mysql> show variables like '%log_bin%';
  19. +---------------------------------+-----------------------------------------+
  20. | Variable_name                   | Value                                   |
  21. +---------------------------------+-----------------------------------------+
  22. | log_bin                         | ON                                      |
  23. | log_bin_basename                | /application/mysql/data/mysql-bin       |
  24. | log_bin_index                   | /application/mysql/data/mysql-bin.index |
  25. | log_bin_trust_function_creators | OFF                                     |
  26. | log_bin_use_v1_row_events       | OFF                                     |
  27. | sql_log_bin                     | ON                                      |
  28. +---------------------------------+-----------------------------------------+
  29. 6 rows in set (0.00 sec)
  30. mysql>
复制代码
第四步:开始测试

基础用法
  1. # 查看所有binglog日志
  2. SHOW MASTER LOGS;
  3. # 当前使用的日志
  4. show master status;
  5. # 查看日志记录
  6. show binlog events in '日志文件名';
复制代码



建立测试表
  1. create database if EXISTS itcast;
  2. use itcast;
  3. create table tb_user(
  4.         id int(11) not null,
  5.         name varchar(50) not null,
  6.         sex varchar(1),
  7.         primary key (id)
  8. )engine=innodb default charset=utf8;
  9. insert into tb_user(id,name,sex) values(1,'Tom','1');
  10. insert into tb_user(id,name,sex) values(2,'Trigger','0');
  11. insert into tb_user(id,name,sex) values(3,'Dawn','1');
复制代码

第五步:误删数据库


查看删库后的binlog


第六步:新建binglog,减少外来日志影响

之后立即flush logs; 生成新的binlog

由于我们执行 flush logs 命令新生了一个文件,所以我们执行的删除的命令应该在 binlog.000001 文件里面
查看具体的命令行
  1. show binlog events in 'mysql-bin.000001';
复制代码

得到数据恢复的起始位置为 120,结束位置为 1166
mysqlbinlog辅助恢复

接下来使用 mysqlbinlog 命令执行 binlog 文件,恢复数据,命令如下:
  1. mysqlbinlog -v /application/mysql-5.6.40/data/mysql-bin.000001 --start-position=120 --stop-position=1166 | mysql -uroot -p123456
复制代码
来源:https://www.cnblogs.com/guixiangyyds/p/18518859
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具