暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

MySQL DBA 应该掌握的 100 条命令(建议收藏)

原创 三笠丶 2026-07-17
648

MySQL DBA 真正需要掌握的,并不是背诵大量零散命令,而是在数据库出现连接暴增、CPU 飙高、SQL 卡顿、锁等待、复制延迟等问题时,能够迅速找到正确的排查入口。

下面整理了 100 条 MySQL DBA 常用命令,主要面向 MySQL 8.0 和 MySQL 8.4 LTS。部分命令在生产环境中具有修改或终止操作的风险,执行前应确认影响范围。

一、实例与版本信息

1. 查看 MySQL 版本

SELECT VERSION();

用于确认数据库版本,例如 MySQL 5.7、8.0 或 8.4。很多参数、系统视图和 SQL 语法都与版本相关,因此排查问题前应先确认版本。

2. 查看服务器基础信息

SELECT @@hostname AS hostname, @@port AS port, @@server_uuid AS server_uuid, @@server_id AS server_id, @@version AS version;

在多实例、主从复制或 MGR 环境中,这条命令可以快速确认当前连接的是哪台服务器。

3. 查看实例启动时间

SELECT NOW() AS current_time, NOW() - INTERVAL VARIABLE_VALUE SECOND AS startup_time, VARIABLE_VALUE AS uptime_seconds FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Uptime';

可用于判断实例是否刚刚发生过重启。

4. 查看数据库当前时间

SELECT NOW(), CURRENT_TIMESTAMP, UTC_TIMESTAMP();

排查日志时间、复制延迟和定时任务问题时,需要确认数据库本地时间和 UTC 时间是否一致。

5. 查看系统时区

SELECT @@global.time_zone, @@session.time_zone, @@system_time_zone;

应用写入时间异常、定时任务提前或延后时,应首先检查时区设置。

6. 查看数据库运行模式

SELECT @@global.sql_mode, @@session.sql_mode;

ONLY_FULL_GROUP_BYSTRICT_TRANS_TABLESNO_ZERO_DATE 等模式会影响 SQL 执行行为。

7. 查看字符集配置

SELECT @@character_set_server, @@character_set_database, @@character_set_connection, @@character_set_client, @@character_set_results;

用于排查乱码、字符转换和索引长度问题。

8. 查看排序规则配置

SELECT @@collation_server, @@collation_database, @@collation_connection;

不同排序规则会影响字符串比较、排序和索引使用。

9. 查看数据目录

SELECT @@datadir;

确认 MySQL 数据文件所在目录。

10. 查看重要文件路径

SELECT @@log_error, @@pid_file, @@socket, @@tmpdir, @@secure_file_priv;

用于定位错误日志、PID 文件、Socket 文件、临时目录以及文件导入导出限制目录。

二、数据库与表对象

11. 查看所有数据库

SHOW DATABASES;

12. 查看当前数据库

SELECT DATABASE();

13. 查看数据库创建语句

SHOW CREATE DATABASE db_name;

可以确认数据库字符集和排序规则。

14. 查看数据库大小

SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS size_gb FROM information_schema.tables GROUP BY table_schema ORDER BY size_gb DESC;

15. 查看指定数据库中的表

SHOW FULL TABLES FROM db_name;

除了普通表,还可以识别视图。

16. 查看表结构

DESC db_name.table_name;

或:

SHOW COLUMNS FROM db_name.table_name;

17. 查看完整建表语句

SHOW CREATE TABLE db_name.table_name\G

排查字段类型、索引、分区、字符集和存储引擎问题时,SHOW CREATE TABLEDESC 更完整。

18. 查看表状态

SHOW TABLE STATUS FROM db_name LIKE 'table_name'\G

可查看存储引擎、估算行数、数据大小、索引大小和自增值。

19. 查看各表大小

SELECT table_schema, table_name, table_rows, ROUND(data_length / 1024 / 1024, 2) AS data_mb, ROUND(index_length / 1024 / 1024, 2) AS index_mb, ROUND((data_length + index_length) / 1024 / 1024, 2) AS total_mb FROM information_schema.tables WHERE table_schema = 'db_name' ORDER BY data_length + index_length DESC;

20. 查看非 InnoDB 表

SELECT table_schema, table_name, engine FROM information_schema.tables WHERE table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND engine <> 'InnoDB';

生产业务表通常建议统一使用 InnoDB。

三、连接与会话排查

21. 查看当前连接

SHOW PROCESSLIST;

22. 查看完整 SQL 的连接列表

SHOW FULL PROCESSLIST;

普通 SHOW PROCESSLIST 会截断 SQL 文本,排查长 SQL 时应使用 FULL

23. 通过系统表查看连接详情

SELECT id, user, host, db, command, time, state, info FROM information_schema.processlist ORDER BY time DESC;

24. 查看当前连接数

SHOW GLOBAL STATUS LIKE 'Threads_connected';

25. 查看正在运行的线程数

SHOW GLOBAL STATUS LIKE 'Threads_running';

Threads_connected 高不一定代表数据库繁忙,真正需要重点关注的是 Threads_running

26. 查看最大连接数

SHOW VARIABLES LIKE 'max_connections';

27. 查看历史最大连接数

SHOW GLOBAL STATUS LIKE 'Max_used_connections';

28. 查看连接使用率

SELECT VARIABLE_VALUE AS current_connections, @@max_connections AS max_connections, ROUND(VARIABLE_VALUE / @@max_connections * 100, 2) AS usage_percent FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Threads_connected';

29. 按用户统计连接数

SELECT user, COUNT(*) AS connection_count FROM information_schema.processlist GROUP BY user ORDER BY connection_count DESC;

30. 按客户端地址统计连接数

SELECT SUBSTRING_INDEX(host, ':', 1) AS client_ip, COUNT(*) AS connection_count FROM information_schema.processlist GROUP BY SUBSTRING_INDEX(host, ':', 1) ORDER BY connection_count DESC;

31. 查看长时间运行的会话

SELECT id, user, host, db, command, time, state, info FROM information_schema.processlist WHERE command <> 'Sleep' AND time > 60 ORDER BY time DESC;

32. 查看长时间空闲连接

SELECT id, user, host, db, time FROM information_schema.processlist WHERE command = 'Sleep' AND time > 600 ORDER BY time DESC;

33. 终止指定会话

KILL CONNECTION 12345;

该命令会断开整个连接,并回滚连接中的未提交事务。

34. 只终止当前 SQL

KILL QUERY 12345;

只终止正在执行的语句,不主动断开客户端连接。

35. 批量生成终止空闲连接命令

SELECT CONCAT('KILL CONNECTION ', id, ';') FROM information_schema.processlist WHERE command = 'Sleep' AND time > 3600 AND user NOT IN ('system user', 'event_scheduler');

建议先生成命令并人工核对,不要直接拼接后自动执行。

四、事务、锁与阻塞

36. 查看当前 InnoDB 事务

SELECT * FROM information_schema.innodb_trx\G

37. 查看运行时间最长的事务

SELECT trx_id, trx_mysql_thread_id, trx_state, trx_started, TIMESTAMPDIFF(SECOND, trx_started, NOW()) AS trx_seconds, trx_rows_locked, trx_rows_modified, trx_query FROM information_schema.innodb_trx ORDER BY trx_started;

38. 查看超过 60 秒的事务

SELECT trx_id, trx_mysql_thread_id, trx_started, TIMESTAMPDIFF(SECOND, trx_started, NOW()) AS trx_seconds, trx_rows_locked, trx_rows_modified, trx_query FROM information_schema.innodb_trx WHERE trx_started < NOW() - INTERVAL 60 SECOND ORDER BY trx_started;

39. 查看锁等待关系

SELECT * FROM performance_schema.data_lock_waits;

40. 查看当前持有和等待的锁

SELECT * FROM performance_schema.data_locks;

41. 使用 sys 视图查看锁等待

SELECT * FROM sys.innodb_lock_waits\G

该视图已经把阻塞会话、等待会话、SQL 和锁信息进行了关联,通常比直接查询 Performance Schema 更方便。

42. 查看元数据锁

SELECT * FROM performance_schema.metadata_locks WHERE LOCK_STATUS = 'PENDING';

ALTER TABLETRUNCATE TABLEDROP TABLE 长时间卡住时,应重点检查元数据锁。

43. 查看元数据锁等待详情

SELECT ml.object_schema, ml.object_name, ml.lock_type, ml.lock_duration, ml.lock_status, t.processlist_id, t.processlist_user, t.processlist_host, t.processlist_time, t.processlist_info FROM performance_schema.metadata_locks ml JOIN performance_schema.threads t ON ml.owner_thread_id = t.thread_id WHERE ml.lock_status = 'PENDING';

44. 查看未提交事务对应的连接

SELECT trx.trx_id, trx.trx_started, trx.trx_mysql_thread_id, p.user, p.host, p.db, p.command, p.time, p.state, p.info FROM information_schema.innodb_trx trx LEFT JOIN information_schema.processlist p ON trx.trx_mysql_thread_id = p.id ORDER BY trx.trx_started;

45. 查看 InnoDB 引擎状态

SHOW ENGINE INNODB STATUS\G

这是排查死锁、事务、锁等待、Buffer Pool、I/O 和后台线程状态的核心命令。

46. 查看最近一次死锁

SHOW ENGINE INNODB STATUS\G

在输出中搜索:

LATEST DETECTED DEADLOCK

47. 开启全部死锁日志记录

SET GLOBAL innodb_print_all_deadlocks = ON;

开启后,所有检测到的死锁都会写入 MySQL 错误日志。该参数会增加少量日志量。

48. 查看事务隔离级别

SELECT @@global.transaction_isolation, @@session.transaction_isolation;

49. 查看自动提交状态

SELECT @@global.autocommit, @@session.autocommit;

50. 手工提交和回滚事务

COMMIT;
ROLLBACK;

生产中出现长事务时,经常不是 SQL 执行慢,而是应用开启事务后长时间没有提交。

五、SQL 性能分析

51. 查看 SQL 执行计划

EXPLAIN SELECT * FROM db_name.table_name WHERE id = 100;

52. 查看 JSON 格式执行计划

EXPLAIN FORMAT=JSON SELECT * FROM db_name.table_name WHERE id = 100;

JSON 格式可以看到成本估算、条件过滤和访问路径等详细信息。

53. 查看实际执行计划

EXPLAIN ANALYZE SELECT * FROM db_name.table_name WHERE id = 100;

EXPLAIN ANALYZE 会真正执行 SQL。对于更新、删除或资源消耗较大的 SQL,必须谨慎使用。

54. 查看优化器执行轨迹

SET optimizer_trace = 'enabled=on'; SELECT * FROM db_name.table_name WHERE id = 100; SELECT trace FROM information_schema.optimizer_trace\G

适用于分析优化器为何选择某个索引或执行计划。

55. 查看当前正在执行的 SQL

SELECT processlist_id, processlist_user, processlist_host, processlist_db, processlist_time, processlist_state, processlist_info FROM performance_schema.threads WHERE type = 'FOREGROUND' AND processlist_command <> 'Sleep' ORDER BY processlist_time DESC;

56. 查看累计执行时间最高的 SQL

SELECT digest_text, count_star, ROUND(sum_timer_wait / 1000000000000, 2) AS total_seconds, ROUND(avg_timer_wait / 1000000000000, 6) AS avg_seconds, sum_rows_examined, sum_rows_sent FROM performance_schema.events_statements_summary_by_digest WHERE digest_text IS NOT NULL ORDER BY sum_timer_wait DESC LIMIT 20;

57. 查看平均执行时间最高的 SQL

SELECT digest_text, count_star, ROUND(avg_timer_wait / 1000000000000, 6) AS avg_seconds, ROUND(max_timer_wait / 1000000000000, 6) AS max_seconds, sum_rows_examined, sum_rows_sent FROM performance_schema.events_statements_summary_by_digest WHERE count_star >= 10 ORDER BY avg_timer_wait DESC LIMIT 20;

58. 查看扫描行数最多的 SQL

SELECT digest_text, count_star, sum_rows_examined, sum_rows_sent, ROUND(sum_rows_examined / NULLIF(sum_rows_sent, 0), 2) AS examine_send_ratio FROM performance_schema.events_statements_summary_by_digest ORDER BY sum_rows_examined DESC LIMIT 20;

59. 查看未使用索引的 SQL

SELECT digest_text, count_star, sum_no_index_used, sum_no_good_index_used, sum_rows_examined FROM performance_schema.events_statements_summary_by_digest WHERE sum_no_index_used > 0 OR sum_no_good_index_used > 0 ORDER BY sum_no_index_used DESC LIMIT 20;

这里的“未使用索引”不一定代表 SQL 必须优化,小表全表扫描有时比走索引更合理。

60. 查看产生临时表较多的 SQL

SELECT digest_text, count_star, sum_created_tmp_tables, sum_created_tmp_disk_tables FROM performance_schema.events_statements_summary_by_digest WHERE sum_created_tmp_tables > 0 ORDER BY sum_created_tmp_disk_tables DESC LIMIT 20;

61. 查看排序次数较多的 SQL

SELECT digest_text, count_star, sum_sort_rows, sum_sort_scan, sum_sort_range, sum_sort_merge_passes FROM performance_schema.events_statements_summary_by_digest WHERE sum_sort_rows > 0 ORDER BY sum_sort_rows DESC LIMIT 20;

62. 查看全表扫描较多的表

SELECT * FROM sys.schema_tables_with_full_table_scans ORDER BY rows_full_scanned DESC LIMIT 20;

63. 查看最耗时的 SQL

SELECT * FROM sys.statement_analysis ORDER BY total_latency DESC LIMIT 20;

64. 查看当前会话最近执行的 SQL

SELECT event_id, sql_text, rows_examined, rows_sent, timer_wait FROM performance_schema.events_statements_history WHERE thread_id = PS_CURRENT_THREAD_ID() ORDER BY event_id DESC;

65. 清空 SQL 摘要统计

TRUNCATE TABLE performance_schema.events_statements_summary_by_digest;

该操作不会清除业务数据,但会重置 SQL 聚合统计。执行前应确认是否还需要保留历史性能数据。

六、索引与表结构分析

66. 查看表索引

SHOW INDEX FROM db_name.table_name;

67. 查看索引列顺序

SELECT index_name, non_unique, seq_in_index, column_name, cardinality, nullable FROM information_schema.statistics WHERE table_schema = 'db_name' AND table_name = 'table_name' ORDER BY index_name, seq_in_index;

68. 查看没有主键的表

SELECT t.table_schema, t.table_name FROM information_schema.tables t LEFT JOIN information_schema.table_constraints c ON t.table_schema = c.table_schema AND t.table_name = c.table_name AND c.constraint_type = 'PRIMARY KEY' WHERE t.table_type = 'BASE TABLE' AND t.engine = 'InnoDB' AND t.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND c.constraint_name IS NULL;

69. 查看重复或冗余索引

SELECT * FROM sys.schema_redundant_indexes;

删除冗余索引前,应结合 SQL 使用情况和业务特征确认,不能仅凭系统视图直接删除。

70. 查看未使用索引

SELECT * FROM sys.schema_unused_indexes;

该视图的数据来源于实例启动后的统计。实例刚重启时,结果通常不具备参考价值。

71. 查看表的索引使用情况

SELECT * FROM sys.schema_index_statistics WHERE table_schema = 'db_name' AND table_name = 'table_name' ORDER BY rows_selected DESC;

72. 更新表统计信息

ANALYZE TABLE db_name.table_name;

当表数据发生大规模变化,执行计划明显异常时,可以考虑重新收集统计信息。

73. 检查表

CHECK TABLE db_name.table_name;

74. 优化表

OPTIMIZE TABLE db_name.table_name;

对于 InnoDB,通常会重建表。大表执行可能占用大量 I/O、临时空间,并造成元数据锁影响。

75. 查看表碎片估算

SELECT table_schema, table_name, engine, ROUND(data_length / 1024 / 1024, 2) AS data_mb, ROUND(data_free / 1024 / 1024, 2) AS data_free_mb FROM information_schema.tables WHERE table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND data_free > 0 ORDER BY data_free DESC;

data_free 不能简单等同于真实可回收碎片,尤其在共享表空间和分区表环境中需要谨慎解释。

七、InnoDB 与内存状态

76. 查看 Buffer Pool 大小

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

77. 查看 Buffer Pool 实例数量

SHOW VARIABLES LIKE 'innodb_buffer_pool_instances';

部分新版本中该参数的行为和可配置性可能发生变化,应结合实际版本确认。

78. 查看 Buffer Pool 命中相关指标

SHOW GLOBAL STATUS WHERE Variable_name IN ( 'Innodb_buffer_pool_read_requests', 'Innodb_buffer_pool_reads' );

逻辑读请求与物理读次数的比例可以用于估算 Buffer Pool 命中率。

79. 计算 Buffer Pool 命中率

SELECT ROUND( ( 1 - reads.variable_value / NULLIF(requests.variable_value, 0) ) * 100, 4 ) AS buffer_pool_hit_percent FROM performance_schema.global_status reads JOIN performance_schema.global_status requests WHERE reads.variable_name = 'Innodb_buffer_pool_reads' AND requests.variable_name = 'Innodb_buffer_pool_read_requests';

命中率高并不代表数据库一定没有 I/O 问题,还需要结合工作集大小、随机读延迟和 SQL 访问模式判断。

80. 查看脏页数量

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty';

81. 查看 Buffer Pool 页面状态

SHOW GLOBAL STATUS WHERE Variable_name IN ( 'Innodb_buffer_pool_pages_total', 'Innodb_buffer_pool_pages_free', 'Innodb_buffer_pool_pages_data', 'Innodb_buffer_pool_pages_dirty' );

82. 查看 InnoDB 日志相关参数

SHOW VARIABLES WHERE Variable_name IN ( 'innodb_redo_log_capacity', 'innodb_log_buffer_size', 'innodb_flush_log_at_trx_commit', 'sync_binlog' );

innodb_flush_log_at_trx_commitsync_binlog 直接影响事务持久性和写入性能。

83. 查看 InnoDB 数据读写统计

SHOW GLOBAL STATUS WHERE Variable_name IN ( 'Innodb_data_reads', 'Innodb_data_writes', 'Innodb_data_read', 'Innodb_data_written', 'Innodb_os_log_written' );

84. 查看行操作统计

SHOW GLOBAL STATUS WHERE Variable_name IN ( 'Innodb_rows_read', 'Innodb_rows_inserted', 'Innodb_rows_updated', 'Innodb_rows_deleted' );

85. 查看临时表使用情况

SHOW GLOBAL STATUS WHERE Variable_name IN ( 'Created_tmp_tables', 'Created_tmp_disk_tables', 'Created_tmp_files' );

磁盘临时表比例过高时,应检查 SQL、tmp_table_sizemax_heap_table_size 和 TempTable 引擎配置。

八、日志与慢 SQL

86. 查看慢查询日志配置

SHOW VARIABLES WHERE Variable_name IN ( 'slow_query_log', 'slow_query_log_file', 'long_query_time', 'log_queries_not_using_indexes', 'min_examined_row_limit' );

87. 动态开启慢查询日志

SET GLOBAL slow_query_log = ON;

88. 设置慢查询阈值

SET GLOBAL long_query_time = 1;

该设置只对新连接生效。已有会话可能仍使用原来的会话级参数。

89. 查看二进制日志配置

SHOW VARIABLES WHERE Variable_name IN ( 'log_bin', 'log_bin_basename', 'binlog_format', 'binlog_row_image', 'binlog_expire_logs_seconds' );

90. 查看当前二进制日志位置

SHOW MASTER STATUS;

在部分较新的 MySQL 版本中,推荐使用兼容的新命令:

SHOW BINARY LOG STATUS;

91. 查看所有二进制日志文件

SHOW BINARY LOGS;

92. 查看二进制日志事件

SHOW BINLOG EVENTS IN 'mysql-bin.000001' LIMIT 100;

对于 Row 格式的完整行数据解析,通常需要使用 mysqlbinlog

93. 使用 mysqlbinlog 解析日志

mysqlbinlog \ --base64-output=DECODE-ROWS \ -vv \ mysql-bin.000001

94. 按时间范围解析 Binlog

mysqlbinlog \ --start-datetime='2026-07-16 10:00:00' \ --stop-datetime='2026-07-16 11:00:00' \ --base64-output=DECODE-ROWS \ -vv \ mysql-bin.000001

该命令常用于误操作恢复和数据审计。

九、主从复制与复制延迟

95. 查看复制状态

传统术语环境:

SHOW SLAVE STATUS\G

MySQL 8.0 推荐使用:

SHOW REPLICA STATUS\G

重点关注以下字段:

Replica_IO_Running Replica_SQL_Running Seconds_Behind_Source Last_IO_Error Last_SQL_Error Retrieved_Gtid_Set Executed_Gtid_Set

96. 查看复制连接和应用线程

SELECT * FROM performance_schema.replication_connection_status\G
SELECT * FROM performance_schema.replication_applier_status\G

97. 查看复制工作线程状态

SELECT channel_name, worker_id, thread_id, service_state, last_error_number, last_error_message, last_error_timestamp FROM performance_schema.replication_applier_status_by_worker;

并行复制环境中,某一个 Worker 报错可能导致整个 SQL 线程停止。

98. 停止和启动复制

STOP REPLICA;
START REPLICA;

只控制 I/O 线程或 SQL 线程:

STOP REPLICA IO_THREAD; START REPLICA IO_THREAD;
STOP REPLICA SQL_THREAD; START REPLICA SQL_THREAD;

99. 查看 GTID 状态

SELECT @@global.gtid_executed, @@global.gtid_purged, @@global.enforce_gtid_consistency, @@global.gtid_mode;

GTID 环境中,恢复、搭建复制和主从切换都需要重点确认这几个值。

十、备份、权限与安全

100. 使用 mysqldump 进行逻辑备份

mysqldump \ -h 127.0.0.1 \ -P 3306 \ -u backup_user \ -p \ --single-transaction \ --routines \ --events \ --triggers \ --set-gtid-purged=OFF \ --databases db_name \ > db_name_$(date +%F).sql

其中:

  • --single-transaction:对 InnoDB 表执行一致性备份,避免长时间锁表;
  • --routines:备份存储过程和函数;
  • --events:备份 Event Scheduler 事件;
  • --triggers:备份触发器;
  • --set-gtid-purged=OFF:避免导出文件自动写入 GTID 相关语句。

恢复命令:

mysql \ -h 127.0.0.1 \ -P 3306 \ -u root \ -p \ < db_name_2026-07-16.sql

在生产环境中,mysqldump 更适合中小规模数据库。对于数百 GB 或 TB 级数据库,应优先考虑 MySQL Enterprise Backup、Percona XtraBackup、存储快照或云数据库物理备份能力。

DBA 经常使用的权限检查命令

虽然前面已经列满 100 条,但权限排查同样是日常工作的高频场景,下面几条建议单独保留。

查看用户:

SELECT user, host, plugin, account_locked, password_expired FROM mysql.user;

查看用户权限:

SHOW GRANTS FOR 'app_user'@'%';

创建用户:

CREATE USER 'app_user'@'10.%' IDENTIFIED BY 'StrongPassword';

授权:

GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.* TO 'app_user'@'10.%';

回收权限:

REVOKE DELETE ON db_name.* FROM 'app_user'@'10.%';

修改密码:

ALTER USER 'app_user'@'10.%' IDENTIFIED BY 'NewStrongPassword';

锁定用户:

ALTER USER 'app_user'@'10.%' ACCOUNT LOCK;

解锁用户:

ALTER USER 'app_user'@'10.%' ACCOUNT UNLOCK;

删除用户:

DROP USER 'app_user'@'10.%';

总结

对于 MySQL DBA 来说,这 100 条命令真正需要形成的不是记忆,而是一套排查顺序。

当数据库出现故障时,可以按照下面的路径进行判断:

  1. 先确认实例、版本和连接对象是否正确;
  2. 检查连接数、运行线程和长时间会话;
  3. 检查事务、行锁、元数据锁和阻塞链;
  4. 分析当前 SQL、历史高负载 SQL 和执行计划;
  5. 检查 Buffer Pool、磁盘临时表、Redo 和 InnoDB I/O;
  6. 检查慢查询日志、错误日志和 Binlog;
  7. 在复制环境中检查 I/O 线程、SQL 线程、Worker 和 GTID;
  8. 最后再决定是否终止会话、重建索引、修改参数或重启实例。

很多线上事故之所以处理时间长,并不是因为 DBA 不会执行命令,而是一开始就把排查方向选错了。CPU 高只是现象,连接数高只是现象,复制延迟同样只是现象。真正有效的排查,始终要回到会话、事务、等待、SQL 和资源消耗之间的因果关系。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论