Binlog应用场景
- 主从复制:在MYSQL主从复制的场景下,主库将binlog中的更新操作记录发送到从库,从库读取binlog并执行相应的SQL语句来更新自己的数据。
- 数据恢复:在数据意外删除或者修改错误的情况下,可以通过binlog中记录,逆向执行SQL语句来恢复数据。
- 数据备份:可以使用binlog来进行增量备份,即只备份binlog文件中记录的更新操作,而不需要备份整个数据库。
- 数据订阅:binlog中记录了所有的更新操作,可以通过binlog监控数据变化行为,触发业务操作。
Binlog格式
1.Statement格式
Statement格式是最早出现的格式,在这种格式下,binlog会记录每个执行的SQL语句,因此binlog文件会比较小,但是在某些情况下会出现不同步的问题,例如某些函数的结果是不确定的,可能在主库上和从库上的结果不一致。
2.Row格式
Row格式记录的是每行数据的变化,也就是说它记录的是每条SQL语句执行后受影响的行的变化情况,而不是执行的SQL语句本身,因此binlog文件会比较大,但是它不会出现不同步的问题,因为它记录的是每行数据的变化。
3.Mixed格式
Mixed格式是Statement格式和Row格式的混合使用,MySQL会根据执行的SQL语句自动选择使用哪种格式,因此binlog文件既比较小,又不会出现不同步的问题。
不同的binlog格式适用于不同的场景,Statement格式适用于执行的SQL语句比较简单的情况,Row格式适用于执行的SQL语句比较复杂的情况,Mixed格式则可以兼顾二者的优缺点,适用于大部分情况。
提示:如果使用阿里Canal这种MYSQL数据订阅工具,通常使用ROW格式,因为binlog可以准确反映数据变更历史。
Binlog配置
下面是开启binlog的方式和配置参数说明
1.修改 my.cnf 配置文件,开启binlog
修改MySQL 的配置文件 my.cnf ,添加下面配置,然后重启MYSQL
[mysqld]
# --忽略其他不相关配置---
# 启用 binlog,指定生成的 binlog 文件名为 mysql-bin
log-bin=mysql-bin
# 指定 binlog 格式,指定 binlog 的格式为 ROW 模式,也可以使用 STATEMENT 或 MIXED 模式
binlog_format=ROW
# 设置 单个binlog 文件的最大尺寸为 1G,日志文件超过最大值会创建新的日志文件
max_binlog_size=1G
# 设置 binlog 文件的保存路径
log_bin=/var/lib/mysql/mysql-bin.log
# 保留7天的binlog,超过时间,历史binlog会被删除
expire_logs_days=7
2.使用 SET GLOBAL 命令,临时开启binlog
登录MYSQL,执行下面命令,可以立即生效无需重启,不过重启MYSQL后配置就丢失了
SET GLOBAL log_bin = ON;
SET GLOBAL binlog_format = 'ROW';
SET GLOBAL max_binlog_size = 1073741824;
提示:开启binlog,需要注意磁盘空间是否足够。