show master status
命令概述
SHOW MASTER STATUS 命令仅在数据库主库(Master)上执行才能看到有效输出。该命令用于查看主库当前正在使用的二进制日志文件名称及位置信息,是配置 MySQL 主从复制的关键步骤。



输出结果分析
以下示例展示了在 127.0.0.1:3306 主库上的具体执行过程与结果解读。
1. 查看服务器变量与 UUID
首先可以通过以下命令查看当前 MySQL 实例的服务器变量,特别是 server_uuid:
# 在 127.0.0.1:3306 主库上执行
tmp@127.0.0.1 ((none))> show variables like '%server%';
+---------------------------------+--------------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------------+
| character_set_server | utf8mb4 |
| collation_server | utf8mb4_general_ci |
| innodb_ft_server_stopword_table | |
| server_id | 3232266753 |
| server_id_bits | 32 |
| server_uuid | ceabbacf-0c77-11ea-b49f-2016d8c96b46 |
+---------------------------------+--------------------------------------+
6 rows in set (0.01 sec)说明:根据show variables like '%server_uuid%';可以获得当前 MySQL 实例的server_uuid值。
2. 查看主库状态与 GTID
执行 SHOW MASTER STATUS\G; 查看详细状态:
tmp@127.0.0.1 ((none))> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000013
Position: 269728976
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 108cc4a4-0d40-11ea-9598-2016d8c96b66:1-5,
c42216ad-0d37-11ea-b163-2016d8c96b56:1-9,
ceabbacf-0c77-11ea-b49f-2016d8c96b46:1-1662590
1 row in set (0.00 sec)
ERROR:
No query specified
tmp@127.0.0.1 ((none))>结果解读:
Executed_Gtid_Set:该值表明每个
server_uuid代表一个实例。存在多个server_uuid表明这三个实例都曾经当过主库,分别执行的事务个数已确定。- 在
ceabbacf-0c77-11ea-b49f-2016d8c96b46实例上执行了 1,662,590 个事务。 - 在
c42216ad-0d37-11ea-b163-2016d8c96b56实例上执行了 9 个事务。 - 在
108cc4a4-0d40-11ea-9598-2016d8c96b66实例上执行了 5 个事务。 - 注意:并不知道这些实例之间事务执行的先后顺序,当然同一个实例上的事务肯定是从 1 开始递增,步长为 1。结合该实例上的
server_uuid可知,当前主库实例执行到了ceabbacf-0c77-11ea-b49f-2016d8c96b46:1-1662590这个位置。
- 在
3. 二进制日志位置详解
根据 File: mysql-bin.000013 和 Position: 269728976 可知:当前写的二进制日志文件名称和位置是 mysql-bin.000013:269728976。在文件 mysql-bin.000013 中,end_log_pos 269728976 的地方就是这个位置。
以下是截取的 mysql-bin.000013 日志最后一部分内容:
# at 269728646
#191124 13:00:04 server id 3232266753 end_log_pos 269728707 GTID last_committed=16 sequence_number=18 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ceabbacf-0c77-11ea-b49f-2016d8c96b46:1662590'/*!*/;
# at 269728707
#191124 13:00:04 server id 3232266753 end_log_pos 269728776 Query thread_id=17 exec_time=0 error_code=0
SET TIMESTAMP=1574571604/*!*/;
BEGIN
/*!*/;
# at 269728776
#191124 13:00:04 server id 3232266753 end_log_pos 269728837 Rows_query
# update table_name set name='2' where id=2
# at 269728837
#191124 13:00:04 server id 3232266753 end_log_pos 269728890 Table_map: `apple`.`table_name` mapped to number 108
# at 269728890
#191124 13:00:04 server id 3232266753 end_log_pos 269728949 Update_rows: table id 108 flags: STMT_END_F
## UPDATE `apple`.`table_name`
## WHERE
## @1=2 /* LONGINT meta=0 nullable=0 is_null=0 */
## @2='8888' /* VARSTRING(1020) meta=1020 nullable=1 is_null=0 */
## SET
## @1=2 /* LONGINT meta=0 nullable=0 is_null=0 */
## @2='2' /* VARSTRING(1020) meta=1020 nullable=1 is_null=0 */
# at 269728949
#191124 13:00:04 server id 3232266753 end_log_pos 269728976 Xid = 119
COMMIT/*!*/;
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*/;更多详细内容可参考:https://www.cnblogs.com/igoodful/p/11922379.html
相关命令
在 MySQL 的主从复制中,通过命令 SHOW MASTER STATUS,可以查看 Master 数据库当前正在使用的二进制日志及当前执行二进制日志位置。
SHOW MASTER LOGS:查看所有二进制日志列表,和SHOW BINARY LOGS同义。
常见问题:SHOW MASTER STATUS 为空
问题现象
默认通过 yum 安装 MySQL 后,想调试主从复制,结果发现执行 SHOW MASTER STATUS 为空。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.95 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show master status;
Empty set (0.00 sec)原因分析与解决
原来搞错了主要配置文件的路径,yum 默认安装 MySQL 的配置模板在 /usr/share/mysql 下(原文误写为 /usr/shara/mysql,此处已修正)。
解决步骤:
复制配置文件
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf编辑配置
在my.cnf的[mysqld]section 下加上主从配置:server-id=1 # 指定 server ID log-bin = /home/mysql-bin.log # 开启 binlog- 重启 MySQL
重启服务使配置生效。 验证结果
再次执行命令,即可看到输出:mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 98 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
参考来源:http://imkerwin.com/166.html
说明
- 本文部分 troubleshooting 案例基于 MySQL 5.0.95 版本,较为基础;主库状态分析部分涉及 GTID 特性,适用于 MySQL 5.6 及以上版本。
- 配置文件路径可能因操作系统或安装方式(源码编译、yum、apt 等)不同而有所差异,请以实际环境为准。
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/show-master-status.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。