1. Binary Log简介
MySQL数据库提供了 Binary Log (二进制日志)。它记录了所有对MySQL数据库操作的详细记录,如:对数据库的更改(insert, update)和对数据库表构成的更改(add column, drop table) 等。Binary Log通常是用于以下几个方面:
恢复数据
复制(replication)
安全策略规范
性能分析与优化
2. Binary Log的生成方式
MySQL有两个组件能够生成Binary Log:
MySQL Server
MySQL Client
2.1 MySQL Server的Binary Log生成方式:
MySQL Server会自动将所有事务写入Binary Log文件,并在文件末尾记录一个实现的唯一标识(Log Position)。MySQL自动将Log Position的值保存到该数据库的.offset文件中。
2.2 MySQL Client的Binary Log生成方式:
MySQL Client通过使用 'mysqlbinlog' 命令来生成Binary Log。模拟MySQL的Slave方式,先从Master数据库取得Binary Log并储存为本地文件,之后通过分析在Master上发生的事务,并将其在Slave端执行,这样Slave数据库就与Master数据库同步了。
3. Binary Log的写入流程
当MySQL Server执行任何change操作时(Binary Log中出现的所有信息均基于MySQL的大部分关系型数据库的change操作)都会更新MySQL Binary Log文件,而MySQL Client则会模拟MySQL Slave方式更新Binary Log文件。
MySQL Server
MySQL Server启动,检查是否启用了Binary Log
MySQL Server开始一个新的事务
MySQL Server写入Binary Log头部
BEGIN;
#在这里打开 Binary Log 文件.
Server执行SQL语句和更新
UPDATE mytable SET column1='value1' WHERE data='foo';
INSERT INTO mytable (column1, column2) VALUES ('a', 'b');
Server关闭当前事务
COMMIT;
MySQL Client
MySQL Client连接到MySQL Server,并请求接收Binary Log。
MySQL Client从MySQL Server连接取得Binary Log,并开始解析.
MySQL Client将解析后的更改应用于自己的数据库,这样两个数据库就基本相同了。
4. 总结
Binary Log是MySQL数据库的一个非常重要的组成部分,可用于数据恢复,复杂,安全策略规范以及性能分析与优化。