mysql二进制日志
Mysql二进制日志记录了所有对mysql的修改事件,包括增删改查和对表结构的修改 Mysql二进制日志记录的都是成功执行的语句,没有成功执行,回滚了的sql和语法错误的sql是不会写入这里的。binlog工具
binlog二进制日志的格式STATEMENT
基于段的格式 binglog_formart = STATEMENT
这种方式,记录的是执行的语句
优点:
日志记录量相对较少,节约磁盘和网络I/O缺点:
必须要记录上下文信息,以保证语句在主服务器和从服务器上执行的结果相同 对于特定的函数如UUID()、user() 这些非确定性函数还是无法复制,如果使用这些函数,可能导致主从服务器上的数据不一致#确定当前使用的是什么binglog格式show variables like 'binlog_format';#显示binlog日志show binary logs;#刷新binlog,这会产生一个新的binlog文件,方便测试flush logs#查看产生的binglog,使用mysqlbinlog命令。不要使用vimmysqlbinlog mysql-bin.000053mysqlbinlog -vv mysql-bin.000053
binlog二进制日志的格式ROW(建议的方式)
mysql5.7版本后的默认格式
基于行的格式 binglog_formart = ROW,这种格式记录了数据表中的增删改查行的信息
row格式可以避免mysql复制中出现的主从不一致的问题
同一SQL语句修改了10000条的情况下,基于段的格式(statement)只会记录这个SQL语句,而基于行的格式(row)会有10000条记录分别记录每一行的数据修改
优点:
使mysql主从复制更加安全 对每一行的数据修改比基于段的复制更高效,降低主从复制的延迟 误操作而修改了数据库中的数据,同时又没有备份可以恢复时,我们可以通过分析二进制日志,对日志中记录的数据修改操作做反向处理的方式来达到恢复数据的目的缺点:
记录日志量较大,需要通过再配置一个参数控制记录的方式,binlog_row_image = [FULL | MINIMAL | NOBLOB]#查看binlog_row_image的方式,推荐使用MINIMAL ,只记录修改的列SHOW VARIABLES LIKE 'binlog_row_image'
binlog二进制日志的格式MIXED
根据SQL语句由操作系统决定选择基于段(statement)或行(row)的格式记录日志
binlog二进制日志记录方式的选择
建议选择 row 或mixed
注意:
使用binlog二进制日志记录方式row时,需要再设置一个参数 binlog_row_image = MINIMAL