预备知识
==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
实验环境
-
Ubuntu18.04
-
MySQL 8.0
-
MySQL Binary Log配置,具体配置更改参考
mysql> show VARIABLES like 'binlog_format';+---------------+-------+| Variable_name | Value |+---------------+-------+| binlog_format | ROW |+---------------+-------+1 row in set (0.00 sec)mysql> SHOW VARIABLES LIKE 'log_bin%';+---------------------------------+-------------------------+| Variable_name | Value |+---------------------------------+-------------------------+| log_bin | ON || log_bin_basename | /log/mysql/binlog || log_bin_index | /log/mysql/binlog.index |+---------------------------------+-------------------------+注意两点
-
log_bin_basename这是更改过的,默认路径是 /var/lib/mysql
-
binlog_format如果不是ROW,请修改为ROW
set global binlog_format = "ROW" ;
=================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
基本知识
Binlog简介
Binlog也叫binary log,俗称二进制日志。是MySQL的一种重要的日志文件。他会记录MySQL中的各种操作。在MySQL Binlog眼中这些操作都是发生的事件。
===========================================================================================
Binlog中常见的事件类型
-
QUERY_ EVENT 与数据无关的操作,begin、drop table、truncate table等
-
TABLE MAP EVENT 记录下一个操作所对应的表信息,存储了数据库名和表名
-
XID_ EVENT 标记事务提交
-
WRITE ROWS EVENT 插入数据,即insert操作
-
UPDATE ROWS EVENT 更新数据,即update操作
-
DELETE ROWS EVENT 删除数据,即delete操作
============================================================================================================================================================================================================================================================================================
回复操作
假数据构建
//创建数据库DROP DATABASE IF EXISTS `dbtest`;CREATE DATABASE `dbtest` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;//创建tableuse dbtest;DROP TABLE IF EXISTS `employee`;CREATE TABLE `employee` ( `id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `age` int(0) NOT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;//插入数据INSERT INTO `employee` VALUES (1, '展昭', 20);INSERT INTO `employee` VALUES (2, '王朝', 20);INSERT INTO `employee` VALUES (3, '马汉', 20);
==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
查看Binarylog Events
登陆到MySQL中,查看 binlog events
文中使用的客户端工具是 Navicat,安装激活教程www.bilibili.com/video/BV1yE…
SHOW BINLOG EVENTS;
image-20210226162418715
SHOW BINARY LOGS; 查看binlog文件名称
SHOW MASTER STATUS; 查看当前的binlog文件名称
========================================================================================================================================================================================================================================================================================================================================================================
模拟误删数据并查看binlog的变化
DELETE FROM employee WHERE id = 1
image-20210226175440791
由于我当前的binlog是binlog.000001,所以我执行下面的命令
SHOW BINLOG EVENTS IN 'binlog.000001'
image-20210226174515050
可以看出 Pos=3031处执行了删除操作
============================================================================================================================================================================================================================================================================================================================
开始恢复数据
-
全量备份要操作的数据库数据库
$ mysqldump --databases dbtest > dump.sql -uroot -p -
全量恢复
// --stop-position=2889是因为2889是删除执行之前的一个操作的结尾$ sudo mysqlbinlog /log/mysql/binlog.000001 --stop-position=2889 | mysql -uroot -pimage-20210226175534007
需要注意的是,实验环境中数据比较少。生产环境中数据量比较大,通常情况下,log并不会保存在同一个文件中,而是保存在 binlog.000001 binlog.000002等依次类推。
命令行可以这么写
sudo mysqlbinlog {yourpath}/binlog.000001 {yourpath}/binlog.000002 --stop-position={position} | mysql -uroot -p
目前为止,该文章只是提供了一个思路,让大家明白binary log可以用作数据库备份。下篇文章我们将继续介绍,线上环境如何监听MySQL Binary Log。通过监听我们又可以做哪些事情。
=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================