0
点赞
收藏
分享

微信扫一扫

MySQL binlog日志总结

概念描述

binlog日志:
  • binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。binlog可用于实时备份,主从复制master->slave的数据同步。

知识总结

binlog相关参数:

  • log_bin:

#开启binlog参数,可以指定路径与自定义binlog名称
例:
log_bin = /data/mysql/binlogs/mysql-bin-129

  • log_bin_index

设置此参数是指定二进制索引文件的路径与名称

  • binlog_do_db/binlog_ignore_db

#binlog_do_db:此参数表示只记录指定数据库的二进制日志,默认全部记录。
#binlog_ignore_db:此参数表示不记录指定的数据库的二进制日志。
#这两个参数为互斥关系,一般只选择其一设置,只能在启动命令行中或配置文件中加入。

例:
binlog_do_db = db1(库级别添加,多个库用逗号分割)
binlog_ignore_db = db1

  • max_binlog_size

Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束。

  • sync_binlog

#这个参数直接影响mysql的性能和完整性
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

#当设置为“1”的时候,是最安全但是性能损耗最大的设置。

  • binlog_cache_size/max_binlog_cache_size

binlog cache
#当执行DML语句的时候会向binlog cache 不断写入Event,作为Event的“中转站”
#整个事务的Event在commit时才会真正的写入binary log,在此之前,这些Event都被存放在binlog cache。

#binlog cache包含以下两个部分:
1.binlog cache缓冲区:由参数binlog_cache_size 控制。
2.binlog cache临时文件:由参数max_binlog_cache_size 控制。

#binlog cache流程:
1.开启读写事务
2.执行dml语句,在dml语句第一次执行时会分配内存空间给 binlog cache缓冲区
3.执行dml语句期间生成的event不断地写入 binlog cache缓冲区
4.如果binlog cache缓冲区已经写满,则将binlog cache缓冲区的数据写入binlog cache临时文件,同时清空binlog cache缓冲区,这个临时文件由ML开头无法查看。
5.事务提交,binlog cache缓冲区和binlog cache临时文件数据全部写入binary log进行固化,释放binlog cache缓冲区和binlog cache临时文件。这时binlog cache 缓冲区的内存空间将会保留以供下次使用,binlog cache临时文件大小截断为0,保留文件描述符(IO_CACHE)结构。
6.断开连接,这个过程会释放IO_CACHE,同时释放其持有的binlog cache缓冲区以及binlog cache临时文件

#参数max_binlog_cache_size:会话级别参数(默认与最大值都为4G),定义了binlog cache临时文件最大容量,如果某个事务的event 总量大于max_binlog_cache_size设置+binlog_cache_size设置的大小则会抛出报错(ERROR 1197)

#通过binlog_cache_use和binlog_cache_disk_use中可以看出是否使用了binlog cache缓冲区binlog cache临时文件(计数单位次)

MySQL binlog日志总结_binlog


MySQL binlog日志总结_binlog_02

  • 禁止当前会话中的binlog写入(当前会话生效)
    mysql> set sql_log_bin=1/0;(1开启,0禁用)
  • 查看当前binlog数量
    mysql> show binary logs;
  • 产生一个新的binlog日志文件
    mysql> flush logs;

binlog删除

  • 自动删除:
    通过binlog参数(expire_logs_days )来实现mysql自动删除binlog。
  • 手动删除:

purge master logs to 'binlog.000018'; //删除指定日志文件的日志索引中binlog日志文件(不包含binlog.000018)

purge master logs before '2023-05-15 10:20:00'; //删除指定日期以前的日志索引中binlog日志文件

举报

相关推荐

0 条评论