原 MySQL binlog 详解
2228 | 0 | 0
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
每当我们重启一次,会自动生成一个 binlog 文件,我们重启完毕之后再来执行同样的命令
存放 binlog 的目录下也多个了这么一个文件。
当然,我们也可以手动的来刷新 binlog 文件,通过 flush logs,同样会新创建一个 binlog 文件
如果我们想把这些文件全部清空,可以使用 reset master 来处理
下面我来看针对单个文件的操作,首先我们想看一下文件的内容找到 binlog 的目录,比如我们要看
mysql-bin-0001 vi mysql-bin-000001
我们看到的一堆乱码。我们知道这是一堆的二进制文件,所以以文本的方式打开二进制文件一定是有问题的,那么我们该如何查看这个文件的内容呢?
mysql 给我们提供了一个用于查看 binlog 日志的工具,叫做 mysqlbinlog
这个文件比较长,一次打开看不完怎么办呢,这里可以使用 linux 的管道,这里就不详细的说了,可以自己去查找关于 linux 的一些知识。
注意到上面的截图中有一个 position 字段,这个字段的值为 154,这个表示的就是 binlog 当前的位置。我们每次执行 dml 操作,position 都会改变。比如我们先来创建一个数据 test
在创建之前我们可以清一下 binlog 日志方便我们查看,可以使用 reset master。在生产环境中,这个操作是非常危险的,那么我们可以使用 flush logs 来处理,生成一个新的 binlog 文件。不管采用哪种方式,我们在测试的环境中,只要有一个新的 binlog 文件就可以了。生成了新的 binlog 文件之后,我们可以通过 show master status 来查看状态
下面我们来执行一个 dml 语句,比如我们要创建一个 test 数据库 create database test;
然后我们来查看创建之后的状态,如下,我们发现 position 从 154 变成了 313,也就是说我们的操作是在 154 到 313 之间,然后我们再来看 binlog 的内容。
我们截取 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
0
sss
16人已关注
领课教育 29771
7950
update 44312
3711
领课教育 16344
husheng 19660
请更新代码 40316
凯哥Java 878
凯哥Java 985
凯哥Java 713