MySQL-Binlog

409 阅读2分钟

binlog

即二进制文件,用于备份恢复、主从环境

binlog 配置

(注意:5.7 必须加 server_id)

server_id = 6

log_bin=/data/mysql/mysql-bin

binlog_format = row

peizhi.png

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 日志的三种格式。不难,都挺重要了,后续如果发现新的好内容会补充。