概念描述
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_cach服务器托管网e_size设置+binlog_cache_size设置的大小则会抛出报错(ERROR 1197)
#通过binlog_cache_use和binlog_cache_disk_use中可以看出是否使用了binlog cache缓冲区binl服务器托管网og cache临时文件(计数单位次)
- 禁止当前会话中的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日志文件
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: Jenkins部署前后端不分离springboot项目
背景 写这篇博客的时候我还是大学生,学校期末课程设计时要求使用Jenkins部署项目,所以使用windows,但是企业中都是使用linux,往往还会搭建一个gitlab。下面我介绍的是在window环境下使用jenkins部署项目,这阵子搞这个期末作业时感觉收…