🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## `my.cnf` 加入以下配置 ~~~ [mysqld] #设置日志三种格式:STATEMENT、ROW、MIXED 。 binlog_format = mixed #设置日志路径,注意路经需要mysql用户有权限写 log-bin = /data/mysql/logs/mysql-bin.log #设置binlog清理时间 expire_logs_days = 7 #binlog每个日志文件大小 max_binlog_size = 100m #binlog缓存大小 binlog_cache_size = 4m #最大binlog缓存大小 max_binlog_cache_size = 512m ~~~ ## binlog的三种格式 * `STATMENT`模式:基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。 优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能。 缺点:在某些情况下会导致master-slave中的数据不一致 * `ROW`基于行的复制(row-based replication, RBR)格式:不记录每一条SQL语句的上下文信息,仅需记录哪条数据被修改了,修改成了什么样子了。 优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。 缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。 * `MIXED`混合模式复制(mixed-based replication, MBR):以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。 ## 关于binlog常用的命令 ~~~mysql #查看日志开启状态 show variables like 'log_%'; #查看所有binlog日志列表 show master logs; #查看最新一个binlog日志的编号名称,及其最后一个操作事件结束点 show master status; #刷新log日志,立刻产生一个新编号的binlog日志文件,跟重启一个效果 flush logs; #清空所有binlog日志 reset master; ~~~ ## binlog 数据恢复 使用binlog恢复数据之前: 执行: ``` # 查看正在使用的 Binlog 文件 show master status\G; # 执行 flush logs 操作,生成新的 BINLOG flush logs; # 查看正在使用的 Binlog 文件 show master status\G; ```