观察 InnoDB 集群:提取特定信息的不同方法

观察 InnoDB 集群:提取特定信息的不同方法

💡 原文英文,约600词,阅读约需2分钟。
📝

内容提要

本文介绍了从InnoDB集群中提取关键信息的方法,包括查询命令、网络测试、实例配置、GR和Replica配置/状态、连接线程内存消耗、连接类型统计和连接统计。作者分享了一些有用的命令和链接供读者参考。

🔎

延伸解读

从元数据表快速获取集群概览

文章展示了直接查询 mysql_innodb_cluster_metadata 数据库的方法,例如从 clusters 表获取集群ID、名称、类型和主模式,从 routers 表查看路由器信息。这为不熟悉 MySQL Shell API 的读者提供了另一种观察集群的途径,尤其适合在无法使用 Shell 或需要脚本化提取信息时使用。

利用性能模式诊断复制与连接

通过 performance_schema 中的 replication_group_members、replication_connection_status 等表,可以检查集群成员角色、GR 应用线程状态及错误信息。同时,threads 和 status_by_user 表能帮助分析连接线程内存消耗、连接类型统计以及用户发送/接收字节数,为性能调优提供数据支撑。

网络与拓扑检查避免脑裂

文章建议从所有服务器运行 netstat 和 tracepath 等命令测试网络连通性,并使用 mysqlsh 的 --redirect-primary 选项验证各成员对拓扑的理解是否一致。如果理解不一致,可能意味着存在脑裂拓扑,需要及时排查,这对集群稳定性至关重要。

识别潜在问题用户与查询

通过查询 performance_schema.status_by_user,可以找出执行全连接、全表扫描、慢查询或超时查询的用户,以及表缓存命中率低的用户。这些信息有助于定位资源消耗大或效率低下的操作,为优化提供方向。文章还提供了一个 GitHub 脚本链接,可简化这些查询的执行。

❓

Q&A

如何从InnoDB集群中提取基本信息?

可以使用查询命令:select cluster_id, cluster_name, description, cluster_type, primary_mode, clusterset_id from mysql_innodb_cluster_metadata.clusters;

如何检查InnoDB集群成员的角色?

使用查询命令:select * from performance_schema.replication_group_members order by MEMBER_ROLE;

如何获取GR应用程序和恢复线程的状态?

可以使用以下命令:select CHANNEL_NAME, SERVICE_STATE, COUNT_RECEIVED_HEARTBEATS, RECEIVED_TRANSACTION_SET, LAST_ERROR_NUMBER, LAST_ERROR_MESSAGE, LAST_ERROR_TIMESTAMP, LAST_QUEUED_TRANSACTION, QUEUEING_TRANSACTION from performance_schema.replication_connection_status;

如何进行网络测试以确保集群正常?

可以使用命令:netstat -l | grep mysql 和 tracepath -b -p 3306 dbnode1,确保从所有服务器到所有服务器都运行这些测试。

如何获取实例的配置?

使用查询命令:select @@hostname,@@port, @@external_user, @@proxy_user,@@read_only, @@pid_file, @@pseudo_thread_id, @@socket, @@wait_timeout, @@init_connect, @@init_file, @@init_replica, @@innodb_status_output, @@net_retry_count;

如何统计连接线程的内存消耗?

可以使用命令:select type,sum(TOTAL_MEMORY)/1048576 'Memory(Mb)' from performance_schema.threads group by type;

🏷️

标签

➡️

继续阅读