MySQL 日志之二进制日志-binlog

这篇具有很好参考价值的文章主要介绍了MySQL 日志之二进制日志-binlog。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、简介

        MySQL 的二进制日志记录了对 MySQL 所有的更改操作,不包括 select 和 show 等操作。二进制日志文件主要有:数据恢复、主从复制、审计(判断是否有注入攻击)等作用。

2、二进制日志参数配置
2.1、文件参数配置

        linux 中 MySQL的配置文件在 /etc/my.cnf,通过配置 log-bin 指定二进制日志文件的名称(若不指定则使用默认的值: binlog.****),后缀为二进制日志的序列号,文件保存在数据目录下。

# 指定二进制日志文件名
vim /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql  # 指定数据保存路径
log-bin=test       # 指定二进制日志文件名,保存在数据目录下
expire_logs_days=3  # 表示日志只保留3天,默认是一个月

 开启二进制日志文件的方式:

在配置文件中指定二进制日志文件名,重启数据库即自动开启;

我在安装完 MySQL8.0.33 后测试二进制日志文件默认开启。

2.2、与二进制日志文件相关的数据库参数配置

        二进制日志文件参数相关参数如下表:

可通过 set global 参数名=值 设置参数大小。

参数名称 描述 查看命令

max_binlog_size

指定单个二进制日志文件最大值,如果超过该值,生成新的二进制文件,后缀名加1,记录到.index文件中。默认1G。(手动新生成二进制日志文件:flush logs) show variables like '%max_binlog_size%';
binlog_cache_size 基于事务的缓存区大小,如果事务记录超过这个大小,会记录到临时文件中,会降低性能。默认32k。

1)、show variables like '%max_binlog_size%';

2)、show global status like 'binlog_cache%'; 查看缓存区使用情况,有没有使用临时文件。

sync_binlog 二进制文件从缓冲区写到磁盘,默认值为1。(0:缓冲区满了或者由操作系统决定写磁盘;1:每一次事务提交写缓冲区的时候就同步到磁盘;n:每进行n次事务提交写缓冲区的时候就同步到磁盘;)

1)、show variables like '%sync_binlog%';

2)、set global sync_binlog=1;设置参数

binlog_expire_logs_auto_purge 开启自动清除二进制日志文件,默认为 on show variables like '%binlog_expire_logs_auto_purge%';
binlog_expire_logs_seconds 日志失效时间,默认为30天。 show variables like '%binlog_expire_logs_seconds%';

注:不要轻易手动去删除binlog,会导致binlog.index和真实存在的binlog不匹配,而导致binlog_expire_logs_seconds失效。

2.3、与二进制日志文件有关的命令操作
# 1、将test.000112之前的binary logs清掉
purge binary logs to 'test.000112';
# 2、将指定时间之前的binary logs清掉
purge binary logs before '2013-12-10 12:07:21';
# 3、将二进制文件导出
mysqlbinlog -uroot -p /var/log/mysql/binlog.000001 > test.sql
# 4、清除所有二进制日志,新日志编号从000001开始
reset master
# 5、指定时间点恢复
mysqlbinlog --stop-datetime="2023-04-20 09:59:59"  /var/log/mysql/bin.123456 | mysql -u root -p
mysqlbinlog --start-datetime="2023-04-20 10:01:00"   /var/log/mysql/bin.123456 | mysql -u root -p
或者
mysqlbinlog --stop-datetime="2023-04-20 09:59:59"  /var/log/mysql/bin.123456 > test.sql
mysqlbinlog --start-datetime="2023-04-20 10:01:00"   /var/log/mysql/bin.123456 > test.sql
# 6、指定位置恢复
mysqlbinlog --stop-position=1234  /var/log/mysql/bin.123456 | mysql -u root -p
mysqlbinlog --start-position=800   /var/log/mysql/bin.123456 | mysql -u root -p
或者
mysqlbinlog --stop-position=1234  /var/log/mysql/bin.123456 > test.sql
mysqlbinlog --start-position=800   /var/log/mysql/bin.123456 > test.sql
3、MySQL 使用二进制文件进行主从复制

        主从复制原理如下:

MySQL 日志之二进制日志-binlog,Mysql,java技术,mysql,数据库

        MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread,其余两个(I/O threadSQL thread)运行在从节点。

1)、主节点 log dump 线程

     当从节点连接主节点时,主节点会为其创建一个log dump 线程,用于发送和读取bin-log的内容。在读取bin-log中的操作时,log dump线程会对主节点上的bin-log加锁,当读取完成,在发送给从节点之前,锁会被释放。主节点会为自己的每一个从节点创建一个log dump 线程。

2)、从节点 I/O线程

      当从节点上执行`start slave`命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点的blog dump进程发来的更新之后,保存在本地relay-log(中继日志)中。

3)、从节点 SQL线程

      SQL线程负责读取relay-log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。

注:要实现主从复制,必须打开 Master 端的 binary log(bin-log)功能,否则无法实现。

4、总结

         本文详细介绍 MySQL的二进制日志文件作用,用途,主要是用于数据恢复和集群中主从数据同步,介绍了如何从日志文件中读取日志转化成sql执行,介绍主从复制原理,下一章接着讲针对二进制日志文件的应用。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

MySQL 日志之二进制日志-binlog,Mysql,java技术,mysql,数据库文章来源地址https://www.toymoban.com/news/detail-811107.html

      

到了这里,关于MySQL 日志之二进制日志-binlog的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包