主要作用:


1.恢复,可以用来恢复数据,可以进行point_in_time的恢复


2.复制,通过复制,使远程的一台mysql数据库与另一台mysql数据库进行实时同步



写入原理(使用事务的情况下):


1.默认情况下数据会先写入缓存,基于binlog_cache_size缓存配置


2.如果缓存写满,会写入临时文件


3.事务提交前,将缓存和临时文件的数据刷入二进制文件中



基本配置参数:


1.log_bin:配置启动二进制文件记录功能


2.bin_log.index:二进制的索引文件,用来存储过往生产的二进制序号


3.max-binlog-size:单个二进制日志文件的最大值


4.binlog_format:statement、row、mixed


statement:记录逻辑sql


row:基于行,记录每一行修改的记录(可以为数据库的恢复和复制带来更大可靠性,但需要更大的磁盘容量,对主从复制网络开销有影响)


mixed:上述两者混合,例如在使用到函数的sql会使用row模式记录


5.mysqlbinlog:用来查看binlog内容,如果是row模式,可以加-v或-vv参数来查看



缓存参数:


1.binlog_cache_size:当使用事务引擎,未提交的二进制日志会被记录到一个缓存中,等该事务提交时,直接将缓存中的二进制日志写入到二进制日志文件中,该参数基于会话,每开启一个会话,分配一个binlog_cache_size大小,如果缓冲不够用了,则会写入到临时文件中,所以该值不能设置过大或过小,可通过以下两个参数判断设置是否合理


2.binlog_cache_use:记录写入缓存的次数


3.binlog_cache_disk_use:缓存写满后,会写入临时文件,该属性表示记入临时文件的次数




存在问题:


1.当服务器发送宕机时,会导致最后一部分数据没有写入二进制文件中,会给恢复和复制带来问题



解决方式:


1.配置sync_binlog:该值默认为0,当sync_binlog=1,采用同步方式写二进制文件,这时写操作不使用操作系统的缓冲来写二进制日志,开启该值,会对数据库IO系统带来一定影响,但是可以一定程度上解决问题1


2.配置innodb_support_xa:虽然通过sync_binlog在一定程度上解决了问题,但在使用innodb事务引擎时,事务未提交,但日志已经写入二进制文件,这时发生宕机还是会给恢复和复制带来问题,通过设置innodb_support_xa=1参数可以解决该问题,保证二进制日志文件和innoDB存储引擎数据文件的同步