MYSQL-二进制日志文件

主要作用:
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存储引擎数据文件的同步


你可能感兴趣的:(mysql)