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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
关系型数据库 MySQL 索引
mysql 分析5语句的优化--索引添加删除
mysql 分析5语句的优化--索引添加删除
16 0
|
23天前
|
存储 安全 关系型数据库
Mysql 的binlog日志的优缺点
MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它包含了所有对数据库执行的更改操作,如INSERT、UPDATE和DELETE等。binlog的主要目的是复制和恢复。以下是binlog日志的优缺点: ### 优点: 1. **数据恢复**:当数据库出现意外故障或数据丢失时,可以利用binlog进行点恢复(point-in-time recovery),将数据恢复到某一特定时间点。 2. **主从复制**:binlog是实现MySQL主从复制功能的核心组件。主服务器将binlog中的事件发送到从服务器,从服务器再重放这些事件,从而实现数据的同步。 3. **审计**:b
|
27天前
|
关系型数据库 MySQL 数据挖掘
轻松入门MySQL:利用MySQL时间函数优化产品销售数据统计与分析(9)
轻松入门MySQL:利用MySQL时间函数优化产品销售数据统计与分析(9)
|
27天前
|
关系型数据库 MySQL 数据挖掘
轻松入门MySQL:深入理解MySQL聚合函数,实战进销存项目中的应用与技巧(8)
轻松入门MySQL:深入理解MySQL聚合函数,实战进销存项目中的应用与技巧(8)
|
23天前
|
SQL 关系型数据库 MySQL
Mysql 的binlog日志的原理【4月更文挑战第1天】
【4月更文挑战第1天】 MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它主要用于复制和恢复操作。以下是binlog日志的工作原理的简要概述: **事件写入**:当MySQL服务器执行一个事务时,它会将该事务中所有对数据库的修改操作(如INSERT、UPDATE和DELETE等)记录为一个事件(event)。这些事件包含了修改操作的相关信息,如操作类型、涉及的表、修改的行等。
|
21天前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
87 1
|
27天前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
3天前
|
存储 关系型数据库 MySQL
MySQL数据库实战:从入门到精通
本文介绍了MySQL的使用和优化,适合Web开发者阅读。首先,确保安装并配置好MySQL,熟悉SQL基础。接着,通过命令行客户端连接数据库,执行创建、查询、添加、修改和删除数据等操作。学习数据类型并创建表存储数据。最后,探讨了数据库优化,包括查询优化和索引使用,以提升性能。
11 2
|
5天前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
15 3
|
5天前
|
SQL 关系型数据库 MySQL
不允许你不知道的 MySQL 优化实战(一)
不允许你不知道的 MySQL 优化实战(一)
12 2

相关产品

  • 云数据库 RDS MySQL 版