您现在的位置是:首页 > 文章详情

MySQL binlog 详解

日期:2018-11-27点击:676

MySQL5.7 默认是不开启 binlog 日志的,具体的开启方式在开启的笔记中查看。 binlog 开启成功之后,binlog 文件的位置可以在 my.inf 配置文件中查看。也可以在 mysql 的命令行中查看。命令行查看代码如下:

show variables like '%log_bin%';


我们也可以看一下当前 mysql 的 binlog 的情况

show master status


视频链接:http://www.roncoo.com/course/view/658088f6e77541f5835b61800314083e 


images/3kxSA2xYykhwsYDTD6rxmnHrt8Thcc5Q.png


每当我们重启一次,会自动生成一个 binlog 文件,我们重启完毕之后再来执行同样的命令


images/7nCw7dkdH5BHtQDMitdQ6b2PAsRNwXhi.png


存放 binlog 的目录下也多个了这么一个文件。


当然,我们也可以手动的来刷新 binlog 文件,通过 flush logs,同样会新创建一个 binlog 文件


images/HE7Z7ReWEcCbbFEfCkew6bCYd2MPFk6P.png


如果我们想把这些文件全部清空,可以使用 reset master 来处理


face/wDJbAAcciYP3HdPHaFA2FMN8attFtaAr.png


下面我来看针对单个文件的操作,首先我们想看一下文件的内容找到 binlog 的目录,比如我们要看

mysql-bin-0001 vi mysql-bin-000001

images/6XWwQGxQcSeXtX5watiRBHWHNGAM6iea.png


我们看到的一堆乱码。我们知道这是一堆的二进制文件,所以以文本的方式打开二进制文件一定是有问题的,那么我们该如何查看这个文件的内容呢?


mysql 给我们提供了一个用于查看 binlog 日志的工具,叫做 mysqlbinlog


images/4xDrjb8dRBXpMGJiWQB5TbxQGcPrkHQH.png


这个文件比较长,一次打开看不完怎么办呢,这里可以使用 linux 的管道,这里就不详细的说了,可以自己去查找关于 linux 的一些知识。


注意到上面的截图中有一个 position 字段,这个字段的值为 154,这个表示的就是 binlog 当前的位置。我们每次执行 dml 操作,position 都会改变。比如我们先来创建一个数据 test


在创建之前我们可以清一下 binlog 日志方便我们查看,可以使用 reset master。在生产环境中,这个操作是非常危险的,那么我们可以使用 flush logs 来处理,生成一个新的 binlog 文件。不管采用哪种方式,我们在测试的环境中,只要有一个新的 binlog 文件就可以了。生成了新的 binlog 文件之后,我们可以通过 show master status 来查看状态

face/5kBX2b6eQZDA5GS3WhamFctjwfkd82T7.png


下面我们来执行一个 dml 语句,比如我们要创建一个 test 数据库 create database test;


然后我们来查看创建之后的状态,如下,我们发现 position 从 154 变成了 313,也就是说我们的操作是在 154 到 313 之间,然后我们再来看 binlog 的内容。


images/sEERQXNbPtHpjTiZ5m753mDQK6FQh8K4.png

我们截取 154 到 313 之间的 binlog 的内容如下:


# at 154 #170708 9:24:02 server id 12345 end_log_pos 219 CRC32 0x30763ffe Anonymous_GTID last_committed=0 sequence_number=1 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 219 #170708 9:24:02 server id 12345 end_log_pos 313 CRC32 0x4d0140b3 Query thread_id=5 exec_time=0 error_code=0 SET TIMESTAMP=1499477042/*!*/; SET @@session.pseudo_thread_id=5/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1436549152/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.c ollation_server=8/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; create database test /*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;


我们可以看到,mysql 做了很多的隐含的操作,然后加粗的部分就是我们所执行的操作。


下面我们来简单总结一下关于 binlog:


1.binlog 文件会随服务的启动创建一个新文件


2.通过 flush logs 可以手动刷新日志,生成一个新的 binlog 文件


3.通过 show master status 可以查看 binlog 的状态


4.通过 reset master 可以清空 binlog 日志文件


5.通过 mysqlbinlog 工具可以查看 binlog 日志的内容


6.通过执行 dml,mysql 会自动记录 binlog


原文链接:https://blog.roncoo.com/article/129920
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章