Centos7实现MySQL基于日志还原数据
2020-07-07 10:29
761 查看
简介
Binlog日志,即二进制日志文件,用于记录用户对数据库操作的SQL语句信息,当发生数据误删除的时候我们可以通过binlog日志来还原已经删除的数据,还原数据的方法分为传统二进制文件还原数据和基于GTID的二进制文件还原数据
前期准备
准备一台Centos7虚拟机,关闭防火墙和selinux,配置IP地址,同步系统时间,安装MySQL数据库
传统二进制日志还原数据
修改配置文件
[root@localhost ~]# vi /etc/my.cnf server-id=1 log-bin=binlog #重启数据库服务 [root@localhost ~]# systemctl restart mysqld
操作数据库
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;
查看二进制日志信息
mysql> show master sta 5b28 tus\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 | +---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
另存为二进制日志信息
[root@localhost ~]# mysqlbinlog --start-position=219 --stop-position=1868 /var/lib/mysql/binlog.000001 > /tmp/binlog.sql
恢复数据
#临时关闭二进制日志记录以免重复记录 mysql> set sql_log_bin=0; #恢复数据 mysql> source /tmp/binlog.sql #重启二进制日志记录 mysql> set sql_log_bin=1;
查看数据恢复情况
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二进制日志还原数据
修改配置文件
[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
操作数据库
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;
查看二进制日志信息
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 | +---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
另存为二进制日志信息
#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:跳过事务
恢复数据
mysql> set sql_log_bin=0; mysql> source /tmp/gtid.sql mysql> set sql_log_bin=1;
查看数据恢复情况
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)
相关文章推荐
- 软件工程实践总结&个人技术博客
- 4.8 Linux重要指令(任务调度)
- 4.6 Linux重要指令(压缩&解压缩)
- 4.5 Linux重要指令(Grep)
- linux:提取文档中IP地址的最后一个数值并加1
- 零基础Linux从入门到精通
- Linux学习笔记
- Linux下的socket详解
- FTP服务器配置 CentOS 7
- Linux下Keepalived安装与配置
- [Linux运维基础]全家桶详解!Linux中RPM包、wget下载、YUM安装、tar包、zip等包管理方式区别与参数详解,附wget下载源码包编译安装方法
- Linux中DHCP的配置
- 自动驾驶算法---传感器数据融合(1)--激光雷达与点云(Linux 下的c++工程)
- 学习笔记(1):Linux零基础入门学习视频教程(centos7版本)-Linux入门课程大纲
- 虚拟机VMware15安装linux系统
- 【嵌入式】Ubuntu20.04执行arm-linux-gc 没有那个文件或目录
- 10分钟搞定Linux的基本操作
- 配置Linux虚拟机作为windows网上邻居:将Linux共享目录映射为网络驱动器
- 重启Linux后$ nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver
- [Linux运维基础]磁盘命令df与du的详细参数选项大全区别与应用详解