1.3 诊断室器械:客户端工具


1.3 诊断室器械:客户端工具

本节摘要:命令行客户端 mysql 是听诊器,图形工具是 CT 机,各查各的病。本节对照常见客户端工具的使用场景,并给出命令行下最常用的几个诊断命令。

听诊器:命令行客户端

mysql -utrainee -p -h127.0.0.1 clinic

进去之后,四条命令覆盖 80% 的日常检查:

SHOW DATABASES; -- 有哪些病区 SHOW TABLES; -- 这个病区有哪些病历 DESC orders; -- 看一张表的结构 SHOW PROCESSLIST; -- 谁正在看病、卡在哪一步

SHOW PROCESSLIST 是命令行工具最不可替代的一幕:页面卡死时,图形工具自己都可能连不上,而一个裸连接敲这条命令,能立刻看到哪条 SQL 正在堆积。

CT 机:图形客户端

图形工具(如 Workbench、DBeaver、Navic 类)擅长的是结构浏览、批量导出结果、可视化看执行计划。它们的舒适区:

  • 建表改表时的结构预览与 DDL 生成
  • 结果集排序筛选、导出 CSV 做进一步分析
  • 新人理解表关系时的 ER 图

但生产事故时刻我仍然只用命令行:连接轻、启动快、能钻进只剩最后几个连接名额的库。

图:工具选择路线

图:工具选择路线

命令行的进阶用法:批处理与格式化

命令行不只是"能敲 SQL",几个参数让它承担脚本化工作。非交互执行,配着系统定时任务就是最朴素的巡检:

# 非交互执行一条查询,表格式输出 mysql -utrainee -p'xxx' clinic -e "SELECT COUNT(*) FROM clinic_order;" # 批处理模式:竖排输出,看宽表不折行 mysql -utrainee -p clinic -e "SHOW REPLICA STATUSG" | head -20 # 静默模式加制表符分隔,直接喂给下游文本处理 mysql -utrainee -p -N -B clinic -e "SELECT user_id, COUNT(*) FROM clinic_order GROUP BY user_id" > orders_by_user.tsv

交互会话里还有几个少有人用的快捷操作:\G 结尾竖排显示,看 SHOW ENGINE INNODB STATUS 这种宽输出是刚需;\s 一眼看到连接、字符集、运行时长;\c 掐掉一条敲错的语句;上下箭头翻历史,配合 ctrl+r 搜索历史,比图形工具点来点去快得多。

急救箱里的三条命令

真正的事故时刻,能救命的往往是这三条,值得形成肌肉记忆:

-- 一眼看全场:谁在跑、跑了多久、卡在什么状态 SELECT id, user, db, command, time, state, LEFT(info, 60) AS sql_head FROM information_schema.processlist WHERE command <> 'Sleep' ORDER BY time DESC; -- 看引擎内部:最后的死锁现场、锁等待、undo 压力都在这一页 SHOW ENGINE INNODB STATUS\G -- 掐掉病灶连接(先确认,再下手) KILL 12345;

第一条的 time 列是现场速判的关键:一排几百秒的查询堆着,说明有大查询堵路;一条几秒的 UPDATE 后面跟着一串等待,八成是锁。这些判读在第 5 章会展开,但命令本身从第一天就该会敲。

图形工具的选型口径

具体选哪个图形工具,与其看评测不如按需求对号:经常做多库多种数据库管理的,选支持连接种类多的通用客户端;团队协作共享连接配置的,看重配置导入导出;新人学习期的,用带可视化执行计划的。工具会换代,口径不变——结构设计与数据浏览交给图形界面,一切与"正在发生的事故"相关的操作回到命令行。这个分工练熟了,工具就只是器械,而不是拐杖。

输出重定向:把检查结果变成病历

诊断的产出要能归档对比,命令行在这件事上天然占优。每天固定时刻采样连接数与慢查询计数,落成带时间戳的文件,一周后就是一台最朴素的监护仪:

# 每分钟采一次样(cron 或计划任务驱动) mysql -utrainee -p'xxx' -N -e " SELECT NOW(), (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME='Threads_connected'), (SELECT VARIABLE_VALUE FROM performance_schema.global_status WHERE VARIABLE_NAME='Slow_queries');" >> /var/log/mysql/pulse.tsv

这个三列小文件能回答很多"那天到底发生了什么"的问题:连接数什么时候爬坡、慢查询什么时候开始堆积,两条曲线叠在一起,病灶时间窗一眼可见。后面章节讲的监控面板本质上是这件事的自动化与图形化,先手工做几天,理解面板上每条线的数据来源,看板才不是黑盒。

会话级设置:让器械适配检查项目

命令行会话里可以按检查项目临时调整行为,只影响当前连接,是安全的:

-- 拍执行计划想要的竖排显示与不截断 \P less -SFX pager less -SFX; -- 临时把本会话的隔离级别调成要复现的级别(第5章实验用) SET SESSION transaction_isolation = 'READ-COMMITTED'; -- 结束时恢复默认 pager default;

这些技巧单看不起眼,事故现场分秒必争时,少敲一半命令就是价值。器械练到顺手,诊断流程才不会被打断。

选项速查与安全提醒

最后给一张高频连接选项的速查,并把安全习惯补完。-h 指定主机,缺省走本地 socket;-P 大写指定端口;--default-character-set 显式约定字符集,跨机器脚本里写明它可避免乱账;--compress 在低带宽远程时有用;批处理脚本里用 -N 去列名、-B 制表符输出。密码不要写在命令行里——进程列表能看到它,用提示输入或选项文件保管。

# 生产友好的连接方式:密码放 ~/.my.cnf(权限 600) mysql --defaults-file=/root/.my_prod.cnf clinic # my.cnf 内容:[client] user=oncall password=xxx host=10.0.0.5

本节要点回顾

  • 命令行:轻量可靠,SHOW PROCESSLIST 是急救第一指令
  • 图形工具:设计与浏览舒适,事故时刻别依赖
  • 习惯:常用检查做成脚本,别每次手敲

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U