前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL复制(二) - 详聊binlog日志

MySQL复制(二) - 详聊binlog日志

原创
作者头像
懒熊
修改2021-01-14 17:49:46
6860
修改2021-01-14 17:49:46
举报
文章被收录于专栏:子睿闲聊


​有了binlog日志,我们可以实现主从架构,可以用canal、maxwell等工具实现将MySQL数据同步到大数据环境;同时可以对binlog进行解析,可以实现快速的数据恢复(Flashback),如使用binlog2sql、Myflash、Mariadb mysqlbinlog等,要实现这些功能,对binlog的详细了解是有必要的。

一. binlog配置

要启动非常简单,通过配置log_bin选项即可启用binlog,5.7需要同时设置server_id参数,8.0开始server_id默认值为1

常见配置参数如下:

代码语言:javascript
复制
log-bin=mysql-binlog-bin-index=mysql-bin.indexbinlog-rows-query-log-events = 1# expire_logs_days = 15 # 8.0 deprecatedbinlog_expire_logs_seconds = 604800 # 7 dayslog_slave_updates=1binlog_format = rowmax_binlog_size=1Gbinlog_cache_size=32768max_binlog_cache_size=4Grelay_log = relay-logrelay_log_recovery = 1relay_log_purge=0 # mha 场景下 disablebinlog_checksum=CRC32sync_binlog = 1gtid_mode = 1enforce_gtid_consistency = 1binlog_transaction_dependency_tracking=WRITESET # 5.7.22

相关参数解释:

binlog-rows-query-log-events使用ROW格式时可以在binlog日志里面记录一条Rows_query事件,即实际的SQL语句;

二. 查看binlog

生成的binlog日志如何查看呢?有两种方式,使用SHOW BINLOG EVENTS命令和mysqlbinlog工具。

show binlog events命令:

可以在mysql客户端执行命令查看对应binlog文件中的事件;没有指定文件名时默认是查看第一个日志文件的事件。

代码语言:javascript
复制
# 查看有哪些binlog日志文件show binary logs;​# 查看binlog 事件SHOW BINLOG EVENTS> [IN 'log_name']> [FROM pos]> [LIMIT [offset,] row_count]

mysqlbinlog工具:

通过mysqlbinlog工具可以查看二进制日志文件或relay log内的事件,使用-vv可以显示出row格式的行信息,使用--start-datetime/--stop-datetime,--stop-position/--start-position 可以指定事件的开始/结束时间或位点。

使用--read-from-remote-server/--read-from-remote-master可以从远程服务器读取日志,并能写入到本地文件,或持续进行日志接收(实现备份,binlog server)。

read-from-remote-master支持选项BINLOG-DUMP-NON-GTIDS(非gtid模式下)和BINLOG-DUMP-GTIDS,使用BINLOG-DUMP-GTIDS可以结合--exclude-gtids实现事件过滤。

代码语言:javascript
复制
# 读取远程服务器的日志mysqlbinlog \--read-from-remote-server \--host=10.82.30.102 \--port=3308 \--password \--user=yau  \--stop-position=125 \mysql-bin.000041 ​# 使用read-from-remote-master选项从远程# 服务器读取日志mysqlbinlog \--read-from-remote-master=BINLOG-DUMP-NON-GTIDS \--host=10.82.30.102 \--port=3308 \--password \--user=yau  \--stop-position=125 \mysql-bin.000041

结合使用--stop-never、--connection-server-id=#、--raw选项可以实现远程实时备份binlog;

使用--result-file/-r指定保存事件的文件名;结合--raw选项,文件名为前缀名称;

代码语言:javascript
复制
mysqlbinlog \--read-from-remote-master=BINLOG-DUMP-NON-GTIDS \--host=10.82.30.102 \--port=3308 \--password \--user=yau  \--stop-never \--connection-server-id=1002 \--result-file=backup102- \--raw \mysql-bin.000042

下图为查看备份的日志,文件名用指定的前缀+源端二进制日志的文件名;

三. binlog事件 

binlog_event.h中的Log_event_type定义了事件的各种类型,5.7.22有38种事件类型;每个日志文件开头有一个Format_desc事件,日志文件结尾有一个Rotate事件,表示日志结束。

所有binlog事件都有一个通用的结构,由事件头和事件数据组成;每个版本的事件内容不同。

事件头包括事件创建时间,server_id等信息;事件数据部分为具体的数据修改;


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档