zoukankan      html  css  js  c++  java
  • MySQL闪回工具之myflash 和 binlog2sql

    MySQL闪回工具之:binlog2sql  https://github.com/danfengcao/binlog2sql

    MYSQL Binglog分析利器:binlog2sql使用详解  :http://blog.itpub.net/27067062/viewspace-2135398/

    实践

    利用binlog2sql查询两个binlog之间的SQL:必须是两个binlog日志,指定start-file和stop-file

    binlog2sql -h127.0.0.1 -P3309 -udba -p'xxxxxx' -dsakila -t employee --start-file='mysql-bin.000112' --stop-file='mysql-bin.000113' > /tmp/db.sql

    利用binlog2sql查询两个binlog之间的闪回SQL:

    binlog2sql --flashback -h127.0.0.1 -P3309 -udba -p'xxxxxx' -dsakila -t employee --start-file='mysql-bin.000112' --stop-file='mysql-bin.000113' > /tmp/flashback.sql

    美团点评MyFlash工具   https://github.com/Meituan-Dianping/MyFlash

     http://blog.itpub.net/29987453/viewspace-2151627

     


    数据恢复测试案例DELETE:
    1)在sakila库,删除actors表的actor_id < 6的数据
    mysql> use sakila;
    Database changed
    mysql> select * from actors limit 10;
    +----------+------------+--------------+---------------------+
    | actor_id | first_name | last_name | last_update |
    +----------+------------+--------------+---------------------+
    | 1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 |
    | 2 | NICK | WAHLBERG | 2006-02-15 04:34:33 |
    | 3 | ED | CHASE | 2006-02-15 04:34:33 |
    | 4 | JENNIFER | DAVIS | 2006-02-15 04:34:33 |
    | 5 | JOHNNY | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
    | 6 | BETTE | NICHOLSON | 2006-02-15 04:34:33 |
    | 7 | GRACE | MOSTEL | 2006-02-15 04:34:33 |
    | 8 | MATTHEW | JOHANSSON | 2006-02-15 04:34:33 |
    | 9 | JOE | SWANK | 2006-02-15 04:34:33 |
    | 10 | CHRISTIAN | GABLE | 2006-02-15 04:34:33 |
    +----------+------------+--------------+---------------------+
    10 rows in set (0.00 sec)
    mysql> show binary logs;
    +------------------+-----------+
    | Log_name | File_size |
    +------------------+-----------+
    | mysql-bin.000005 | 120 |
    | mysql-bin.000006 | 120 |
    +------------------+-----------+
    2 rows in set (0.00 sec)

    mysql> delete from actors where actor_id < 6;
    Query OK, 5 rows affected (0.00 sec)

    mysql> select * from actors limit 10;
    +----------+------------+-----------+---------------------+
    | actor_id | first_name | last_name | last_update |
    +----------+------------+-----------+---------------------+
    | 6 | BETTE | NICHOLSON | 2006-02-15 04:34:33 |
    | 7 | GRACE | MOSTEL | 2006-02-15 04:34:33 |
    | 8 | MATTHEW | JOHANSSON | 2006-02-15 04:34:33 |
    | 9 | JOE | SWANK | 2006-02-15 04:34:33 |
    | 10 | CHRISTIAN | GABLE | 2006-02-15 04:34:33 |
    | 11 | ZERO | CAGE | 2006-02-15 04:34:33 |
    | 12 | KARL | BERRY | 2006-02-15 04:34:33 |
    | 13 | UMA | WOOD | 2006-02-15 04:34:33 |
    | 14 | VIVIEN | BERGEN | 2006-02-15 04:34:33 |
    | 15 | CUBA | OLIVIER | 2006-02-15 04:34:33 |
    +----------+------------+-----------+---------------------+
    10 rows in set (0.00 sec)
    mysql> show binary logs;
    +------------------+-----------+
    | Log_name | File_size |
    +------------------+-----------+
    | mysql-bin.000005 | 120 |
    | mysql-bin.000006 | 4836 |
    +------------------+-----------+
    2 rows in set (0.00 sec)

    2)确定binlog 确认start position、stop position
    [root@prod logs]#mysqlbinlog --base64-output=decode-rows -v -d sakila mysql-bin.000006 > /tmp/delactors.sql

    BEGIN
    /*!*/;
    # at 4601
    #181019 8:40:49 server id 33051132 end_log_pos 4660 CRC32 0x9c986f17 Table_map: `sakila`.`actors` mapped to number 94
    # at 4660
    #181019 8:40:49 server id 33051132 end_log_pos 4805 CRC32 0x5839b8ff Delete_rows: table id 94 flags: STMT_END_F
    ### DELETE FROM `sakila`.`actors`
    ### WHERE
    ### @1=1 /* SHORTINT meta=0 nullable=0 is_null=0 */
    ### @2='PENELOPE' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @3='GUINESS' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @4=1139949273 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
    ### DELETE FROM `sakila`.`actors`
    ### WHERE
    ### @1=2 /* SHORTINT meta=0 nullable=0 is_null=0 */
    ### @2='NICK' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @3='WAHLBERG' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @4=1139949273 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
    ### DELETE FROM `sakila`.`actors`
    ### WHERE
    ### @1=3 /* SHORTINT meta=0 nullable=0 is_null=0 */
    ### @2='ED' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @3='CHASE' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @4=1139949273 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
    ### DELETE FROM `sakila`.`actors`
    ### WHERE
    ### @1=4 /* SHORTINT meta=0 nullable=0 is_null=0 */
    ### @2='JENNIFER' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @3='DAVIS' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @4=1139949273 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
    ### DELETE FROM `sakila`.`actors`
    ### WHERE
    ### @1=5 /* SHORTINT meta=0 nullable=0 is_null=0 */
    ### @2='JOHNNY' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @3='LOLLOBRIGIDA' /* VARSTRING(135) meta=135 nullable=0 is_null=0 */
    ### @4=1139949273 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
    # at 4805
    #181019 8:40:49 server id 33051132 end_log_pos 4836 CRC32 0xa24d4dbb Xid = 143
    COMMIT/*!*/;
    # at 4836
    # at 4915
    #181019 8:45:55 server id 33051132 end_log_pos 4962 CRC32 0xf0172e13 Rotate to mysql-bin.000007 pos: 4
    COMMIT /* added by mysqlbinlog *//*!*/;
    DELIMITER ;
    # End of log file
    binlog

    3)生成闪回binlog_output_base.flashback文件

    binlog的偏移量
    start-positon=4601
    stop-position=4962
    [root@prod logs]# flashback --binlogFileNames=/data/mysql_33051/logs/mysql-bin.000006 --start-position=4601 --stop-position=4962
    [root@prod logs]# ls
    binlog_output_base.flashback
    4)闪回数据
    [root@cgdb logs]#mysqlbinlog --skip-gtids /data/mysql_33051/logs/binlog_output_base.flashback |mysql -uroot -p -S /data/mysql_33051/run/mysql.sock
    验证恢复的数据:
    mysql> use sakila;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A

    Database changed
    mysql> select * from actors limit 10;
    +----------+------------+--------------+---------------------+
    | actor_id | first_name | last_name | last_update |
    +----------+------------+--------------+---------------------+
    | 1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 |
    | 2 | NICK | WAHLBERG | 2006-02-15 04:34:33 |
    | 3 | ED | CHASE | 2006-02-15 04:34:33 |
    | 4 | JENNIFER | DAVIS | 2006-02-15 04:34:33 |
    | 5 | JOHNNY | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
    | 6 | BETTE | NICHOLSON | 2006-02-15 04:34:33 |
    | 7 | GRACE | MOSTEL | 2006-02-15 04:34:33 |
    | 8 | MATTHEW | JOHANSSON | 2006-02-15 04:34:33 |
    | 9 | JOE | SWANK | 2006-02-15 04:34:33 |
    | 10 | CHRISTIAN | GABLE | 2006-02-15 04:34:33 |
    +----------+------------+--------------+---------------------+
    10 rows in set (0.00 sec)

    actors表的actor_id < 6的数据,已经恢复!

  • 相关阅读:
    jaxb解析xml工具类
    JQuery的父、子、兄弟节点查找方法
    jw player 配置参数
    jQuery判断当前元素是第几个元素&获取第N个元素
    正则表达式中test,match,exec区别
    php常用函数file
    php常用函数time
    php常用array函数
    php常用string函数
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/elontian/p/9560636.html
Copyright © 2011-2022 走看看