mysql遇到的问题
binlog_format
binlog_format 是一个用于设置二进制日志(binary log)记录格式的参数。。。
二进制日志用于记录对数据库进行的更改操作(如 insert,update,delete等),
在主从复制和数据恢复中非常重要,binlog_format 可以设置为三种不同的格式,,每种格式的记录方式和性能表现各不相同
-
statement (语句级)
即执行的每条sql语句会记录下来,而不是记录执行结果
优点: 日志文件更小,减少磁盘空间占用,对性能开销较小
缺点: 对于某些非确定性的函数,(如 now() , uuid() )或者带有触发器的表,可能导致从库与主库数据不一致 -
row (行级)
mysql会记录每一行实际的变化,也就是说,他不记录执行的sql语句,而是记录数据被改变后的结果
优点: 能够精确的记录数据的变化,保证数据的一致性,适用于任何类型的sql语句
缺点: 生成的日志文件较大,增加磁盘开销和网络传输压力
适用于需要严格数据一致性的应用,比如,金融,电商,等高要求的业务系统 -
mixed(混合级)
mysql会在statement 和 row 模式之间自动切换
优点: 结合了statement 和row的优点,能够减少日志文件的大小,同时兼顾数据一致性
缺点: 较为复杂,可能会在一些特殊情况下出现数据不一致的问题
适用场景: 适用于大多数场景,平衡了磁盘空间和数据一致性的需求
查看当前的binlog_format
show variables like 'binlog_format'
设置binlog_format ,编辑mysql配置文件,并重启mysql服务
[mysqld]
binlog_format=row
主库的binlog_format会影响从库的同步方式,row模式能够避免大多数复制问题