• MySQL基于日志还原数据


    简介

    Binlog日志,即二进制日志文件,用于记录用户对数据库操作的SQL语句信息,当发生数据误删除的时候我们可以通过binlog日志来还原已经删除的数据,还原数据的方法分为传统二进制文件还原数据和基于GTID的二进制文件还原数据

    传统二进制日志还原数据

    1.修改配置文件

    [root@localhost ~]# vi /etc/my.cnfserver-id=1log-bin=binlog
    #重启数据库服务[root@localhost ~]# systemctl restart mysqld

    2.操作数据库

    mysql> create database mydb charset utf8mb4;mysql> use mydb;mysql> create table test(id int)engine=innodb charset=utf8mb4;mysql> insert into test values(1);mysql> insert into test values(2);mysql> insert into test values(3);mysql> insert into test values(4);mysql> commit;mysql> update test set id=10 where id=4;mysql> commit;mysql> select * from test;+------+| id   |+------+|    1 ||    2 ||    3 ||   10 |+------+4 rows in set (0.00 sec)mysql> drop database mydb;

    3.查看二进制日志信息

    mysql> show master statusG;*************************** 1. row ***************************             File: binlog.000001         Position: 1960     Binlog_Do_DB:  Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
    #查找创库和删库的点,为219和1868mysql> show binlog events in 'binlog.000001';+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+| binlog.000001 | 219 | Query | 1 | 329 | create database mydb charset utf8mb4 || binlog.000001 | 1868 | Query | 1 | 1960 | drop database mydb |+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+

    4.另存为二进制日志信息

    [root@localhost ~]# mysqlbinlog --start-position=219 --stop-position=1868 /var/lib/mysql/binlog.000001 > /tmp/binlog.sql

    5.恢复数据

    #临时关闭二进制日志记录以免重复记录mysql> set sql_log_bin=0;#恢复数据mysql> source /tmp/binlog.sql#重启二进制日志记录mysql> set sql_log_bin=1;

    6.查看数据恢复情况

    mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mydb               || mysql              || performance_schema || sys                |+--------------------+5 rows in set (0.00 sec)
    mysql> use mydb;Database changedmysql> select * from test;+------+| id |+------+| 1 || 2 || 3 || 10 |+------+4 rows in set (0.00 sec)、

    基于GTID二进制日志还原数据

    1.修改配置文件

    [root@localhost ~]# vi /etc/my.cnfserver-id=1log-bin=binloggtid_mode=ONenforce_gtid_consistency=truelog_slave_updates=1
    #重启数据库服务[root@localhost ~]# systemctl restart mysqld

    2.操作数据库

    mysql> create database mydb1;mysql> use mydb1;Database changedmysql> create table t1(id int)engine=innodb charset=utf8mb4;mysql> insert into t1 values(1);mysql> insert into t1 values(2);mysql> insert into t1 values(3);mysql> insert into t1 values(11);mysql> insert into t1 values(12);mysql> commit;mysql> select * from t1;+------+| id   |+------+|    1 ||    2 ||    3 ||   11 ||   12 |+------+5 rows in set (0.00 sec)mysql> drop database mydb1;

    3.查看二进制日志信息

    mysql> show master statusG;*************************** 1. row ***************************             File: binlog.000003         Position: 1944     Binlog_Do_DB:  Binlog_Ignore_DB: Executed_Gtid_Set: 51d3db57-bf69-11ea-976c-000c2911a022:1-81 row in set (0.00 sec)
    mysql> show binlog events in 'binlog.000003';+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+| binlog.000003 | 154 | Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= '51d3db57-bf69-11ea-976c-000c2911a022:1' || binlog.000003 | 219 | Query | 1 | 316 | create database mydb1 || binlog.000003 | 1784 | Gtid | 1 | 1849 | SET @@SESSION.GTID_NEXT= '51d3db57-bf69-11ea-976c-000c2911a022:8' || binlog.000003 | 1849 | Query | 1 | 1944 | drop database mydb1 |+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+

    4.另存为二进制日志信息

    #8号事务记录为删除数据库,因此只需恢复1-7号事务记录即可[root@localhost ~]# mysqlbinlog --skip-gtids --include-gtids='51d3db57-bf69-11ea-976c-000c2911a022:1-7' /var/lib/mysql/binlog.000003 >  /tmp/gtid.sql
    参数说明:--include-gtids:包含事务--exclude-gtids:排除事务--skip-gtids:跳过事务

    5.恢复数据

    mysql> set sql_log_bin=0;mysql> source /tmp/gtid.sqlmysql> set sql_log_bin=1;

    6.查看数据恢复情况

    mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mydb               || mydb1              || mysql              || performance_schema || sys                |+--------------------+6 rows in set (0.00 sec)
    mysql> use mydb1;Database changedmysql> select * from t1;+------+| id |+------+| 1 || 2 || 3 || 11 || 12 |+------+5 rows in set (0.00 sec)
  • 相关阅读:
    c#之字符串,列表,接口,队列,栈,多态
    c#之函数
    KMP算法
    字符串Hash
    洛谷P1807 最长路_NOI导刊2010提高(07)
    洛谷P2863 [USACO06JAN]牛的舞会The Cow Prom
    洛谷P2071 座位安排
    二分图最大匹配,匈牙利算法
    差分约束系统
    搜索
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/13430675.html
Copyright © 2020-2023  润新知