binlog
即二进制文件,用于备份恢复、主从环境。
binlog 配置
(注意:5.7 必须加 server_id)
server_id = 6
log_bin=/data/mysql/mysql-bin
binlog_format = row
kdir -p /data/mysql
chown -R mysql.mysql /data/mysql
重启数据库生效
MySQL 提供一个 sync_binlog 参数来控制数据库的 binlog 刷盘。默认为 sync_binlog = 0,表示 MySQL 不控制 binlog 刷新,有文件系统自己控制它缓存的刷新。性能最好但风险最大。建议设置为 sync_binlog = 1,表示每次事务的 binlog 都会持久化到磁盘。这样是最安全的。
binlog 记录了什么
binlog 是 SQL 层的功能。记录的是变更SQL 语句。
- DDL(create, drop, alter):原封不动地记录当前 DDL。
- DCL(授权【grant】、回滚【rollback】等):原封不动地记录当前 DCL。
- DML:(insert、update、delete):只记录已经提交的事务 DML。
binlog 三种记录方式(字节)
据一位字节大佬说会考到
- statement(5.6 默认):语句模式 原封不动地记录当前 DML
- row(5.7 默认):记录数据行变化
- mixed:混合模式,以上两种方式的混合,一般不用
statement 与 row 模式对比:
statement:可读性较高,日志量少,但是不够严谨。例如:
id name datetime
Insert into t1 values(1,'zs',now());
这里面这个 now() 函数就是不严谨之处。如果我 1 号记录的这条日志,可 10 号发现表坏了,那么当我们数据恢复时再运行这条语句就会发现 datetime 为 10号的时间,这显然是不对的。
row: 可读性很低,日志量大,足够严谨。
可读性低是因为里面记录的数据用户看不懂,需要借助工具分析。
总结
今天我给大家介绍了 binlog,内容不是很多,其中介绍了如何配置 binlog,以及 binlog 日志的三种格式。不难,都挺重要了,后续如果发现新的好内容会补充。