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

flashback实现数据快速复原

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
flashback实现数据快速复原

MyFlash 限制


  • 仅支持 5.65.7 版本
  • binlog 格式必须为 row,且 binlog_row_image=full
  • 只能回滚DML(增、删、改
第零步:确定日志
  1. mysql> show variables like 'log_bin%';
  2. +---------------------------------+------------------------------------------------+
  3. | Variable_name                   | Value                                          |
  4. +---------------------------------+------------------------------------------------+
  5. | log_bin                         | ON                                             |
  6. | log_bin_basename                | /application/mysql-5.6.40/data/mysql-bin       |
  7. | log_bin_index                   | /application/mysql-5.6.40/data/mysql-bin.index |
  8. | log_bin_trust_function_creators | OFF                                            |
  9. | log_bin_use_v1_row_events       | OFF                                            |
  10. +---------------------------------+------------------------------------------------+
  11. 5 rows in set (0.01 sec)
  12. mysql>  SHOW VARIABLES LIKE '%binlog_row_image%';
  13. +------------------+-------+
  14. | Variable_name    | Value |
  15. +------------------+-------+
  16. | binlog_row_image | FULL  |
  17. +------------------+-------+
  18. 1 row in set (0.00 sec)
  19. vi /etc/my.cnf
  20. [mysqld]
  21. log-bin=mysql-bin
  22. binlog_format=row
  23. server_id=1
  24. [root@localhost home]#
复制代码
第一步:下载myflash

官网:Meituan-Dianping/MyFlash: flashback mysql data to any point
  1. yum -y install git
  2. git clone https://github.com/Meituan-Dianping/MyFlash.git
  3. #装依赖
  4. yum install -y gcc pkg-config glib2 libgnomeui-devel
  5. #编译
  6. gcc -w  `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c  -o binary/flashback
复制代码
提示
  1. #编译在这个目录下
  2. [root@localhost ~]# cd /root/MyFlash/
  3. [root@localhost MyFlash]# ll
  4. 总用量 16
  5. drwxr-xr-x. 2 root root   50 10月 31 19:38 binary
  6. -rw-r--r--. 1 root root  490 10月 31 19:38 binlog_output_base.flashback
  7. -rw-r--r--. 1 root root  122 10月 31 19:38 build.sh
  8. drwxr-xr-x. 2 root root   97 10月 31 19:38 doc
  9. -rw-r--r--. 1 root root 1103 10月 31 19:38 License.md
  10. -rw-r--r--. 1 root root 1273 10月 31 19:38 README.md
  11. drwxr-xr-x. 4 root root   65 10月 31 19:38 source
  12. drwxr-xr-x. 2 root root  101 10月 31 19:38 testbinlog
  13. [root@localhost MyFlash]# gcc -w  `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c  -o binary/flashback
复制代码
成功示范
  1. [root@localhost binary]# pwd
  2. /root/MyFlash/binary
  3. [root@localhost binary]# ./flashback --help
  4. Usage:
  5.   flashback [OPTION?]
  6. Help Options:
  7.   -h, --help                  Show help options
  8. Application Options:
  9.   --databaseNames             databaseName to apply. if multiple, seperate by comma(,)
  10.   --tableNames                tableName to apply. if multiple, seperate by comma(,)
  11.   --tableNames-file           tableName to apply. if multiple, seperate by comma(,)
  12.   --start-position            start position
  13.   --stop-position             stop position
  14.   --start-datetime            start time (format %Y-%m-%d %H:%M:%S)
  15.   --stop-datetime             stop time (format %Y-%m-%d %H:%M:%S)
  16.   --sqlTypes                  sql type to filter . support INSERT, UPDATE ,DELETE. if multiple, seperate by comma(,)
  17.   --maxSplitSize              max file size after split, the uint is M
  18.   --binlogFileNames           binlog files to process. if multiple, seperate by comma(,)
  19.   --outBinlogFileNameBase     output binlog file name base
  20.   --logLevel                  log level, available option is debug,warning,error
  21.   --include-gtids             gtids to process. if multiple, seperate by comma(,)
  22.   --include-gtids-file        gtids to process. if multiple, seperate by comma(,)
  23.   --exclude-gtids             gtids to skip. if multiple, seperate by comma(,)
  24.   --exclude-gtids-file        gtids to skip. if multiple, seperate by comma(,)
  25. [root@localhost binary]#
复制代码
STEP1:构造测试数据
  1. CREATE TABLE test01 (  
  2.     id INT AUTO_INCREMENT PRIMARY KEY,  
  3.     name VARCHAR(255) NOT NULL,  
  4.     birthday DATE NOT NULL  
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  6. INSERT INTO test01 (id, name, birthday) VALUES  
  7. (1, '小明', '1993-01-02'),  
  8. (2, '小华', '1994-08-15'),  
  9. (3, '小丽', '1995-07-12');
复制代码
STEP2:执行插入、更新、删除操作
  1. mysql> insert into test01 values(4,'小红','2000-01-01');
  2. Query OK, 1 row affected (0.01 sec)
  3. mysql> delete from test01 where id = 1;
  4. Query OK, 1 row affected (0.03 sec)
  5. mysql> update test01 set birthday = '1994-09-15';
  6. Query OK, 3 rows affected (0.00 sec)
  7. Rows matched: 3  Changed: 3  Warnings: 0
  8. mysql> select * from test01;
  9. +----+--------+------------+
  10. | id | name   | birthday   |
  11. +----+--------+------------+
  12. |  2 | 小华   | 1994-09-15 |
  13. |  3 | 小丽   | 1994-09-15 |
  14. |  4 | 小红   | 1994-09-15 |
  15. +----+--------+------------+
  16. 3 rows in set (0.00 sec)
复制代码
STEP3:确认上面的DML操作二进制日志
  1. mysql>  show master status;
  2. +------------------+----------+--------------+------------------+-------------------+
  3. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +------------------+----------+--------------+------------------+-------------------+
  5. | mysql-bin.000001 |     1716 |              |                  |                   |
  6. +------------------+----------+--------------+------------------+-------------------+
  7. 1 row in set (0.00 sec)
复制代码
STEP4:发现误删除(delete)数据,要求恢复(需要2步)

执行闪回操作,将闪回结果存放到binlog_output_base.flashback中
  1. [root@localhost binary]# [root@localhost binary]# ./flashback --databaseNames=test --tableNames=test01 --sqlTypes='DELETE' --binlogFileNames=/application/mysql-5.6.40/data/mysql-bin.000001
  2. [root@localhost binary]# ll
  3. 总用量 7324
  4. -rw-r--r--. 1 root root     390 10月 31 20:34 binlog_output_base.flashback
  5. -rwxr-xr-x. 1 root root   58768 10月 31 19:51 flashback
  6. -rwxr-xr-x. 1 root root 7463125 10月 31 19:38 mysqlbinlog20160408
  7. 出现这个报错原因是bin
复制代码
应用闪回的日志:
  1. [root@masterdb binary]# mysqlbinlog binlog_output_base.flashback | mysql -uroot -p123456
复制代码
STEP5:确认结果,已经将“DELETE”删除的数据找了回来
  1. mysql> select * from test01;
  2. ERROR 1046 (3D000): No database selected
  3. mysql> use test
  4. Reading table information for completion of table and column names
  5. You can turn off this feature to get a quicker startup with -A
  6. Database changed
  7. mysql> select * from test01;
  8. +----+--------+------------+
  9. | id | name   | birthday   |
  10. +----+--------+------------+
  11. |  1 | 小明   | 1993-01-02 |
  12. |  2 | 小华   | 1994-09-15 |
  13. |  3 | 小丽   | 1994-09-15 |
  14. |  4 | 小红   | 1994-09-15 |
  15. +----+--------+------------+
  16. 4 rows in set (0.00 sec)
  17. mysql>
复制代码
来源:https://www.cnblogs.com/guixiangyyds/p/18518858
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具