MySQL基于日志还原数据

MySQL基于日志还原数据

大家好,又见面了,我是全栈君。

简介

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

传统二进制日志还原数据

1.修改配置文件

[root@localhost ~]# vi /etc/my.cnf
server-id=1
log-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 status\G;
*************************** 1. row ***************************
             File: binlog.000001
         Position: 1960
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)


#查找创库和删库的点,为219和1868
mysql> 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 changed
mysql> select * from test;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   10 |
+------+
4 rows in set (0.00 sec)、

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

1.修改配置文件

[root@localhost ~]# vi /etc/my.cnf
server-id=1
log-bin=binlog
gtid_mode=ON
enforce_gtid_consistency=true
log_slave_updates=1


#重启数据库服务
[root@localhost ~]# systemctl restart mysqld

2.操作数据库

mysql> create database mydb1;
mysql> use mydb1;
Database changed
mysql> 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 status\G;
*************************** 1. row ***************************
             File: binlog.000003
         Position: 1944
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 51d3db57-bf69-11ea-976c-000c2911a022:1-8
1 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.sql
mysql> 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 changed
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|   11 |
|   12 |
+------+
5 rows in set (0.00 sec)

MySQL基于日志还原数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111744.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FLAG_ACTIVITY_CLEAR_TOP和singleTask的区别

    FLAG_ACTIVITY_CLEAR_TOP和singleTask的区别Activity的Flags的设置,可以让Activity的运行具有一些特殊的特性,比如有些可以产生和启动模式相同或相似效果的,还有比如Activity在非前台的时候,也不会保存后台的历史列表中。本文重点分析FLAG_ACTIVITY_CLEAR_TOP,也简单介绍一下其它几个常用的Flag以及使用场景FLAG_ACTIVITY_NEW_TASK将Activity指定为singleTas…

    2022年7月17日
    22
  • SQL Server 2017下载,安装,打开步骤「建议收藏」

    vSQLServer2017下载内容分为两部分SQLServer2017 Developer和SQLserverMamngementStudio第一部分:1.官网下载SQLServer2017Developer      https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads2….

    2022年4月10日
    371
  • android activitymanagerservice_安卓开发API

    android activitymanagerservice_安卓开发APIAndroid中Java层的ActivityManager类中封装了很多API,可以供我们查询当前系统的很多信息,包括:内存、进程(Process)、任务栈(Task)、服务(Service)等的相关信息。利用这些信息可以进行一些有用的判断,例如判断当前系统内存是否不足、指定Service是否在运行中。(ActivityManager类封装了很多API方法供上层调用,具体负责管理Activity、Service等组件的是ActivityManagerService(AMS…

    2022年9月7日
    2
  • 笔记总结-相机标定(Camera calibration)原理、步骤

    笔记总结-相机标定(Camera calibration)原理、步骤      这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用。这属于笔记总结。1.为什么要相机标定?      在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。2.什么叫相机标定?       在大多数条件下这些参数必须通…

    2022年5月28日
    91
  • 基于FPGA的SDRAM控制器设计(一)「建议收藏」

    基于FPGA的SDRAM控制器设计(一)「建议收藏」基于FPGA的SDRAM控制器设计(一)1.SDRAM控制器整体框架2.UART_RX模块3.UART_TX模块4.RX与TX模块的整合5.需要注意的问题1.SDRAM控制器整体框架图1.1整体框架PC端通过串口模块UART_RX发送读写命令以及数据到Cmd_encode模块,由后者分离出数据存入wfifo模块,剩下的读写命令传送到Sdram_top模块对SDRAM进行写操作或者从SDRAM读数据到rfifo模块并通过UART_TX模块将数据送出到PC端。2.UART_RX模块主体代码(见

    2022年7月25日
    8
  • Android应用开发揭秘9

    Android应用开发揭秘9Android应用开发揭秘9

    2022年5月9日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号