前言binlog是MySQL的 二进制日志并且是MySQL中最重要的日志。binlog记录了对MySQL数据库执行更改的所有操作包括对 数据库表结构的变更对数据的变更例如CREATE、ALTER TABLE、INSERT、UPDATE、DELETE…但是不会记录查询语句select。需要注意的是如果是update操作即使是没有数据更新也会记录在binlog日志中binlog日志是以事件形式记录并且还包含语句所执行的消耗时间。查看binlog是否开启show variables like %log_bin%;开启binlog修改mysql配置文件[mysqld] log-binmysql-bin server_id1重新启动mysqlwindows系统net stop mysql # 停止mysql服务 net start mysql # 启动mysql服务Linux系统service mysql stop # 停止mysql服务 service mysql start # 启动mysql服务 service mysql restart # 重启mysql服务扩展应用主从复制master端开启binlogmaster把二进制日志传递给slaves来达到master-slave数据保持一致。数据恢复可以通过mysqlbinlog工具解析binlog来恢复数据。binlog日志常用命令查看所有的binlog日志列表show master logs;查看master状态即最后一个binlog日志的编号名称及其最后一个操作时间pos结束点值show master status;flush刷新binlog日志此刻之后会产生一个新编号的binlog日志文件flush logs;bin-log日志存放地址binlog存放在/var/lib/mysql里面的如果是docker则在相应的 映射目录image-20220911001502484配置存放位置、过期时间在MySQL配置文件my.cnf或者my.ini中[ mysqld]标签内修改# 配置定时清理 expire_logs_days 5 # 配置修改后的日志路径 log-bin/home/logs/mysql-bin配置每个日志文件的大小在MySQL配置文件my.cnf或者my.ini中[mysqld]标签内修改# binlog每个日志文件大小 max_binlog_size 100mbinlog格式# binlog日志格式MySQL默认采用的是STATEMENT建议使用MIXED binlog_format MIXEDSTATEMENT模式SBR基于SQL语句的复制statement-based replication每一条会修改数据的sql语句都会记录到binlog中。优点不需要记录每一条sql语句和每一行的数据变化减少了binlog日志量节约IO提高性能缺点某些情况会导致master-slave中的数据不一致例如sleep()last_insert_id()等2. ROW模式RBR基于行的复制row-based replication不记录每条sql语句的上下文信息仅记录哪条数据被修改了修改成什么样。优点任何情况都可以复制并且不会出现特定情况下存储过程、function等调用或者触发无法被正确复制的问题缺点binlog日志文件会非常大master上执行update语句时所有变化都会写到binlog里面SBR只会写一次所以会导致频繁发生binlog的并发写问题3. MIXED模式上面两种模式的混合使用一般的复制使用STATEMENT模式保存binlog对于STATEMENT模式无法复制的操作使用ROW模式保存binlogMySQL会根据执行的SQL语句选择日志保存方式。