zoukankan      html  css  js  c++  java
  • 还想删库跑路?看我怎么破你

    1、进入数据库,查看binlog状态
    mysql> show variables like '%log-bin%' ;
    Empty set (0.00 sec)
    
    
    2、修改MySQL配置文件
    [root@localhost bin]# vi /etc/my.cnf
    
    // 找到mysqld,在下面添加如下数据
    server-id = 1   # 单个节点id
    log-bin=/var/lib/mysql/mysql-bin   # binlog日志文件保存地址
    expire_logs_days = 10   # 日志过期时间
    
    保存并退出
    
    
    3. 重启MySQL
    service mysqld restart 
    
    
    4. 再次查看binlog状态
    mysql> show variables like '%log_bin%';
    +---------------------------------+--------------------------------+
    | Variable_name                   | Value                          |
    +---------------------------------+--------------------------------+
    | log_bin                         | ON                             |
    | log_bin_basename                | /var/lib/mysql/mysql-bin       |
    | log_bin_index                   | /var/lib/mysql/mysql-bin.index |
    | log_bin_trust_function_creators | OFF                            |
    | log_bin_use_v1_row_events       | OFF                            |
    | sql_log_bin                     | ON                             |
    +---------------------------------+--------------------------------+
    6 rows in set (0.00 sec)
    
    可以看到,binlog已经开启
    
    5. Binlog日志包括两类文件;第一个是二进制索引文件(后缀名为.index),第二个为日志文件(后缀名为.00000*),记录数据库所有的DDL和DML(除了查询语句select)语句事件
    可以查看所有binlog日志文件列表
    mysql> show master logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       154 |
    +------------------+-----------+
    1 row in set (0.00 sec)
    
    
    6. 查看最后一个binlog日志的编号名称及其最后一个操作事件pos结束点的值
    mysql> show master status; 
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.01 sec)
    
    
    7. 执行Flush logs ,   刷新日志,此刻开始产生一个新编号的binlog文件
    mysql> Flush logs;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> show master logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       201 |
    | mysql-bin.000002 |       154 |
    +------------------+-----------+
    2 rows in set (0.00 sec)
    
    每当mysqld服务重启时,会自动执行刷新binlog日志命令,mysqldump备份数据时加-F选项也会刷新binlog日志
    
    8. 可以通过mysqlbinlog查看binlog日志,(cat命令无法查看)
    [root@localhost ~]# whereis mysqlbinlog
    mysqlbinlog: /usr/bin/mysqlbinlog /usr/share/man/man1/mysqlbinlog.1.gz
    [root@localhost mysql]# /usr/bin/mysqlbinlog  mysql-bin.000001
    mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'
    
    // 此处报错是因为mysqlbinlog这个工具无法识别binlog中的配置中的default-character-set=utf8这个指令
    //有两个解决方案:
    1.是在MySQL的配置/etc/my.cnf中将default-character-set=utf8 修改为 character-set-server = utf8,但是这需要重启MySQL服务,如果你的MySQL服务正在忙,那这样的代价会比较大。
    2.用mysqlbinlog --no-defaults mysql-bin.000001 命令打开
    
    [root@localhost mysql]# /usr/bin/mysqlbinlog  --no-defaults mysql-bin.000001
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #200715 19:58:14 server id 1  end_log_pos 123 CRC32 0x1c66870e  Start: binlog v 4, server v 5.7.27-log created 200715 19:58:14 at startup
    # Warning: this binlog is either in use or was not closed properly.
    ROLLBACK/*!*/;
    BINLOG '
    Vu8OXw8BAAAAdwAAAHsAAAABAAQANS43LjI3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAABW7w5fEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
    AQ6HZhw=
    '/*!*/;
    # at 123
    #200715 19:58:14 server id 1  end_log_pos 154 CRC32 0x59a19e6a  Previous-GTIDs
    # [empty]
    SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
    DELIMITER ;
    # End of log file
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    
    
    9. 也可以在mysql中以show binlog events in 'mysql-bin.000001'; 查看
    mysql> show binlog events in 'mysql-bin.000001';
    +------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
    +------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | mysql-bin.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.27-log, Binlog ver: 4 |
    | mysql-bin.000001 | 123 | Previous_gtids |         1 |         154 |                                       |
    +------------------+-----+----------------+-----------+-------------+---------------------------------------+
    2 rows in set (0.00 sec)
    
    
    10. 执行下面SQL
    create database hello ;
    create table student(id int primary key auto_increment , name varchar(20) , age int );
    insert into 
        student 
            (name , age ) 
        values 
             ('张三',18),
             ('李四',20),
             ('王五',19);
    
    
    
    11. 将hello数据库备份到本地
    [root@localhost ~]# mysqldump -u root -p  hello > /root/hello.sql
    Enter password: 
    
    
    12. 执行flush logs 生成新的binlog日志
    mysql> flush  logs ;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> show master logs ;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       201 |
    | mysql-bin.000002 |       896 |
    | mysql-bin.000003 |       154 |
    +------------------+-----------+
    3 rows in set (0.00 sec)
    
    mysql> show master status ;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000003 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    
    
    14. 往student表中新增两条数据
    mysql> insert into student (name , age ) values ('赵六',28),('周七',25);
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> select * from student ;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 张三   |   18 |
    |  2 | 李四   |   20 |
    |  3 | 王五   |   19 |
    |  4 | 赵六   |   28 |
    |  5 | 周七   |   25 |
    +----+--------+------+
    5 rows in set (0.00 sec)
    
    
    
    15.模拟误删操作(当然也可能是删库跑路那种...),删除hello数据库
    mysql> drop database hello ;
    Query OK, 1 row affected (0.01 sec)
    
    
    16. 新建hello数据库,执行之前备份的SQL文件,数据已经恢复到备份那一刻
    mysql> create database hello ;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use hello ;
    Database changed
    mysql> source /root/hello.sql
    Query OK, 0 rows affected (0.00 sec)
    mysql> select * from student ;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 张三   |   18 |
    |  2 | 李四   |   20 |
    |  3 | 王五   |   19 |
    +----+--------+------+
    3 rows in set (0.00 sec)
    
    
    
    17. 执行flush logs 生成新的binlog日志,方便操作之前的binlog日志
    mysql> flush logs
        -> ;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show master logs ;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       201 |
    | mysql-bin.000002 |       896 |
    | mysql-bin.000003 |      1347 |
    | mysql-bin.000004 |      154 |
    +------------------+-----------+
    5 rows in set (0.00 sec)
    
    mysql> show master status ;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000004 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    
    
    18. 查看日志4:show binlog events  in 'mysql-bin.000003' ;
    mysql> show binlog events  in 'mysql-bin.000003' ;
    +------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
    +------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | mysql-bin.000003 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.27-log, Binlog ver: 4 |
    | mysql-bin.000003 | 123 | Previous_gtids |         1 |         154 |                                       |
    | mysql-bin.000003 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
    | mysql-bin.000003 | 219 | Query          |         1 |         292 | BEGIN                                 |
    | mysql-bin.000003 | 292 | Table_map      |         1 |         347 | table_id: 113 (hello.student)         |
    | mysql-bin.000003 | 347 | Write_rows     |         1 |         414 | table_id: 113 flags: STMT_END_F       |
    | mysql-bin.000003 | 414 | Xid            |         1 |         445 | COMMIT /* xid=242 */                  |
    | mysql-bin.000003| 445 | Anonymous_Gtid |         1 |         510 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
    | mysql-bin.000003| 510 | Query          |         1 |         605 | drop database hello                   |
    | mysql-bin.000003 | 605 | Anonymous_Gtid |         1 |         670 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
    | mysql-bin.000003| 670 | Query          |         1 |         767 | create database hello                 |
    | mysql-bin.000003| 767 | Rotate         |         1 |         814 | mysql-bin.000007;pos=4                |
    +------------------+-----+----------------+-----------+-------------+---------------------------------------+
    
    
    可以看出,在292开启事务,414开始写入内容,445提交事务
    
    19. 在mysql外部执行数据恢复指令
    [root@localhost mysql]# /usr/bin/mysqlbinlog  --no-defaults --start-position=292 --stop-position=445 --database=hello  /var/lib/mysql/mysql-bin.000003 | /usr/bin/mysql -uroot -pitheima -v hello
    mysql: [Warning] Using a password on the command line interface can be insecure.
    --------------
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/
    --------------
    
    --------------
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/
    --------------
    
    --------------
    BINLOG '
    YP0OXw8BAAAAdwAAAHsAAAAAAAQANS43LjI3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
    Af0bDWo=
    '
    --------------
    
    --------------
    BINLOG '
    gP0OXxMBAAAANwAAAFsBAAAAAHEAAAAAAAEABWhlbGxvAAdzdHVkZW50AAMDDwMCPAAGrW1P0A==
    gP0OXx4BAAAAQwAAAJ4BAAAAAHEAAAAAAAEAAgAD//gGAAAABui1teWFrRwAAAD4BwAAAAblkajk
    uIMZAAAAZ7sssw==
    '
    --------------
    
    --------------
    COMMIT
    --------------
    
    --------------
    SET @@SESSION.GTID_NEXT= 'AUTOMATIC'
    --------------
    
    --------------
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/
    --------------
    
    --------------
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/
    --------------
    
    [root@localhost mysql]# 
    
    
    
    20.mysql查看student表数据,搞定!
    mysql> select * from student ;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | 张三   |   18 |
    |  2 | 李四   |   20 |
    |  3 | 王五   |   19 |
    |  6 | 赵六   |   28 |
    |  7 | 周七   |   25 |
    +----+--------+------+
    5 rows in set (0.00 sec)
  • 相关阅读:
    bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序【置换群】
    【20】AngularJS 参考手册
    【19】AngularJS 应用
    【18】AngularJS 包含
    【17】AngularJS Bootstrap
    【16】AngularJS API
    【15】AngularJS 输入验证
    【14】AngularJS 表单
    【13】AngularJS 模块
    【12】AngularJS 事件
  • 原文地址:https://www.cnblogs.com/pretttyboy/p/13323373.html
Copyright © 2011-2022 走看看