# Binlog 日志文件的重要性
Replication 集群原理就是利用 Binlog 日志进行同步数据,所以有必要了解。
# Binlog 日志文件
binlog 日志文件记录了 MySQl 执行的所有操作,以及 执行 SQL 语句消耗的时间。
默认情况下是关闭的。
# 开启 binlog 日志
修改 mysql 配置文件,加上 log_bin 参数,重新启动 MySQL 服务
## 日志文件名称,可以随意起名
log_bin = mysql_bin
1
2
2
对于文件的切分存储,mysql 会自动做,后面搭建 Replication 集群时再演示。
# 误删除数据的闪回
Binlog 日志文件的重要性作用,这里使用 误删除数据的闪回做例子讲解
执行了错误的 SQL 语句,误删除了记录,即便 事物已经提交,但是 依然可以找回数据,但是业务系统必须要停机(不能有新的数据写入)
可以使用 Python 程序从 binlog 日志中提取 SQL 语句,然后找到剔除错误的 SQL 语句,重新执行 binlog 日志中的 SQL 即可
# 误删除数据找回演示
笔者这里不去实操了。只记录下流程
需要一个权限的 binlog 日志,最好就是先把之前的删除掉,重新启动数据库。
然后执行一些插入数据的操作,再删除掉数据,再插入几行。
那么我们就要利用闪回工具找回被删掉的数据,并且新插入的还保留。
-- 首先查看 binlogs 的路径
SHOW MASTER LOGS
-- 查询的结果,类似如下的显示
-- 有多个 bin log 文件
Log_name File_size
mysql-bin.000001 177
mysql-bin.000002 2996342
mysql-bin.000003 734
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
使用 binlog2sql 工具,找回
python binlog2sql.py
-uadmin -p'123456' # 用户名与密码
-dflash # 逻辑库
-t student # 数据表
--start-file=‘mysql-bin.000001’ # 日志文件
>/home/flash1.sql # 将解析的 sql 语句输出到哪个文件
1
2
3
4
5
6
2
3
4
5
6
这个命令要对多个 binlog 日志进行解析,因为你不确定那些语句被记录在哪个文件上了
python binlog2sql.py -uadmin -p'123456' -dflash -t student --start-file=‘mysql-bin.000001’>/home/flash1.sql
python binlog2sql.py -uadmin -p'123456' -dflash -t student --start-file=‘mysql-bin.000002’>/home/flash2.sql
1
2
3
2
3
解析出的 SQL 语句如下图所示
可以看到先插入了 4 条语句,然后更新了 2 条语句,再删除了 4 条语句,再插入了 4 条语句。包括还有创建表的语句。
找回数据就很简单了:将 delete 的那 4 条语句删除,把其他的语句重新执行一次,就找回来了