【Mysql 实战】问题分析利器之 binlog

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 在【Mysql-InnoDB 系列】事务提交过程及系列文章中,对mysql(InnoDB引擎)的redolog、undolog、binlog及事务的提交过程有了一些介绍,本篇将尝试去实践binlog在日常操作中的查看、分析方式,以及可能遇到的问题和解决方法。

   Mysql-InnoDBmysqlInnoDBredologundologbinlogbinlog

binlog

2.1

2.1.1

   binlogmysql-bin.000001sudofind/-namemysql-bin.000001

2.1.2

   Linux/Mac/etc/my.cnf使mysqlmysqld--verbose--help|grep-A1'Defaultoptions'

xxx$ mysqld --verbose --help | grep -A 1 'Default options'Default options are read from the following files in the given order:/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

mysql

1/etc/my.cnf

2/etc/mysql/my.cnf

3/usr/local/etc/my.cnf

4~/.my.cnf

/etc/my.cnfvi/etc/my.cnf

1my.cnf

bin-log

2binlog

2.2

2.2.1

showvariableslike'log_%';

binlogbinloglog_binvalueON

3SQLbinlog

2.2.2binlog

showmasterlogs;

4binlog

2.2.3binlog

showmasterstatus;

5binlog

2.2.4binlog

resetmaster;


3.1

catmysql-bin.000022

6binlog

3.2

3.2.1mysqlbinlog

   mysqlbinlogmysqlbinlogmysqldmysqlmysqlbin使mysqlbinlogbinlogbinlogmysqlbinlogmysql-bin.000022

7mysqlbinlog

unknownvariable'default-character-set=utf8mb4'my.cnfmysqlbinlog

3.2.2

Mysqlbinlogdefault-character-set=utf8mb4character-set-server=utf8mb4my.cnfmysql5.7.28

mysqlbinlog--no-defaultsmysql-bin.000022

8mysqlbinlog

6mysqlbinlog线

4.1


|MySQL使binlogRowRelayLog

RowRelayLogupdatebinlog

mysqlbinlog--no-defaultsmysql-bin.000025binlog

# at 291#210323 12:05:11 server id 1  end_log_pos 346 CRC32 0xa9ba861a   Table_map: `test`.`t20200709` mapped to number 108# at 346#210323 12:05:11 server id 1  end_log_pos 402 CRC32 0x32082f49   Update_rows: table id 108 flags: STMT_END_FBINLOG '92hZYBMBAAAANwAAAFoBAAAAAGwAAAAAAAEABHRlc3QACXQyMDIwMDcwOQACAw8CkAEAGoa6qQ==92hZYB8BAAAAOAAAAJIBAAAAAGwAAAAAAAEAAgAC///8AQAAAAUAbmFtZTT8AQAAAAEAMUkvCDI='/*!*/;# at 402#210323 12:05:11 server id 1  end_log_pos 433 CRC32 0x03c4c109   Xid = 9COMMIT/*!*/;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*/;

BINLOGbase64Udatebinlog使:showvariableslike'%binlog%';

ROWMIXbinlog_formatmysqlbinlogbinlog--base64-output=DECODE-ROWS-vbinlogBase64binlog

bogon:logs qingclass$ mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000026/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER /*!*/;# at 4#210323 12:17:23 server id 1  end_log_pos 123 CRC32 0x4d34b223   Start: binlog v 4, server v 5.7.28-log created 210323 12:17:23 at startup# Warning: this binlog is either in use or was not closed properly.ROLLBACK/*!*/;# at 123#210323 12:17:23 server id 1  end_log_pos 154 CRC32 0xffc92a6d   Previous-GTIDs# [empty]# at 154#210323 12:17:53 server id 1  end_log_pos 219 CRC32 0x9fc36419   Anonymous_GTID  last_committed=0  sequence_number=1  rbr_only=yes/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;# at 219#210323 12:17:53 server id 1  end_log_pos 291 CRC32 0x4fc28ff1   Query  thread_id=2  exec_time=0  error_code=0SET TIMESTAMP=1616473073/*!*/;SET @@session.pseudo_thread_id=2/*!*/;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 utf8mb4 *//*!*/;SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/*!*/;SET @@session.lc_time_names=0/*!*/;SET @@session.collation_database=DEFAULT/*!*/;BEGIN/*!*/;# at 291#210323 12:17:53 server id 1  end_log_pos 346 CRC32 0x2f8d89e1   Table_map: `test`.`t20200709` mapped to number 108# at 346#210323 12:17:53 server id 1  end_log_pos 398 CRC32 0xca0f72bd   Update_rows: table id 108 flags: STMT_END_F### UPDATE `test`.`t20200709`### WHERE###   @1=1###   @2='5'### SET###   @1=1###   @2='4'# at 398#210323 12:17:53 server id 1  end_log_pos 429 CRC32 0x5ce7c021   Xid = 2COMMIT/*!*/;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*/;

32

4.2binlog

Mysqlbinlog5.4.4.1BinaryLoggingFormats:STATEMENTROWMIXED

ReplicationcapabilitiesinMySQLoriginallywerebasedonpropagationofSQLstatementsfromsourcetoreplica.Thisiscalledstatement-basedlogging.Youcancausethisformattobeusedbystartingtheserverwith--binlog-format=STATEMENT.Inrow-basedlogging,thesourcewriteseventstothebinarylogthatindicatehowindividualtablerowsareaffected.Itisimportantthereforethattablesalwaysuseaprimarykeytoensurerowscanbeefficientlyidentified.Youcancausetheservertouserow-basedloggingbystartingitwith--binlog-format=ROW.Athirdoptionisalsoavailable:mixedlogging.Withmixedlogging,statement-basedloggingisusedbydefault,buttheloggingmodeswitchesautomaticallytorow-basedincertaincasesasdescribedbelow.YoucancauseMySQLtousemixedloggingexplicitlybystartingmysqldwiththeoption--binlog-format=MIXED.

1MySQLSQLmysqld--binlog-format=STATEMENT

2使mysqld--binlog-format=ROW

3使mysqld--binlog-format=MIXED


STATEMENT使

INSERT INTO access_log.access_log VALUES(NULL,CONNECTION_ID(),NOW(),USER(),CURRENT_USER());

rowuuidnow()STATEMENT


5.4.4.2SettingTheBinaryLogFormatbinlog_format

mysql> SET GLOBAL binlog_format = 'STATEMENT';mysql> SET GLOBAL binlog_format = 'ROW';mysql> SET GLOBAL binlog_format = 'MIXED';

mysql> SET SESSION binlog_format = 'STATEMENT';mysql> SET SESSION binlog_format = 'ROW';mysql> SET SESSION binlog_format = 'MIXED';

   binlog

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
存储 消息中间件 监控
MySQL 到 ClickHouse 明细分析链路改造:数据校验、补偿与延迟治理
蒋星熠Jaxonic,数据领域技术深耕者。擅长MySQL到ClickHouse链路改造,精通实时同步、数据校验与延迟治理,致力于构建高性能、高一致性的数据架构体系。
MySQL 到 ClickHouse 明细分析链路改造:数据校验、补偿与延迟治理
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
148 3
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
367 5
|
3月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
131 6
|
3月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
228 6
|
3月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
153 1
|
4月前
|
存储 关系型数据库 MySQL
深入理解MySQL索引类型及其应用场景分析。
通过以上介绍可以看出各类MySQL指标各自拥有明显利弊与最佳实践情墁,在实际业务处理过程中选择正确型号极其重要以确保系统运作流畅而稳健。
190 12
|
4月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
231 9
|
5月前
|
存储 SQL 关系型数据库
MySQL的Redo Log与Binlog机制对照分析
通过合理的配置和细致的管理,这两种日志机制相互配合,能够有效地提升MySQL数据库的可靠性和稳定性。
188 10
|
12月前
|
存储 SQL 关系型数据库
mysql 的ReLog和BinLog区别
MySQL中的重做日志和二进制日志是确保数据库稳定性和可靠性的关键组件。重做日志主要用于事务的持久性和原子性,通过记录数据页的物理修改信息来恢复未提交的事务;而二进制日志记录SQL语句的逻辑变化,支持数据复制、恢复和审计。两者在写入时机、存储方式及配置参数等方面存在显著差异。
233 6

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多