mysql -e 是什么
mysql 客户端的 -e 选项让它在执行完指定 SQL 后立即退出,不需要进入交互界面,是脚本化与巡检的常用姿势。配合输出格式选项更实用:-B 输出制表符分隔、-N 去掉列名行,结果可直接喂给 awk 或 grep 解析;-E 纵向展开,宽表结果更易读。
基本信息
| 适用版本 | MySQL 5.7 / 8.0 及 MariaDB 对应版本 |
|---|---|
| 语法 | mysql -u 用户 -p -h 主机 -e "SQL" [库名] |
| 输出格式 | --table 默认表格 / -B 批处理 / -E 纵向 / -N 去掉列名 |
| 常用附加项 | -A 跳过库表名预读加速登录 |
| 退出码 | SQL 出错时返回非 0,可用于脚本判断 |
典型使用场景
- 定时巡检:每分钟采集连接数、QPS、主从延迟等指标
- 脚本分支:用 -N -B 取值后交给 shell 判断并触发告警
- 结果导出:把查询结果写成制表符文件再转 CSV 进行分析
- 批量运维:通过 -e 执行 DDL 或参数调整,可与循环组合
- 跨实例核对:循环连接多台实例收集同名指标做对比
- 上线检查:在发布脚本里做一次连通性与版本探测
巡检与导出示例
巡检与导出示例
mysql -uroot -p -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';" # 单条查询
mysql -uroot -p -N -B -e "SELECT @@hostname, @@version;" # 无列名、制表符分隔
mysql -uroot -p -E -e "SHOW ENGINE INNODB STATUS\G" # 纵向展开,便于阅读
mysql -uroot -p -A -e "SHOW VARIABLES LIKE 'character_set_%';" # 大库登录加速
mysql -uroot -p -B -N -e "SELECT id,name FROM app.user LIMIT 100;" > users.tsv # 导出供分析
mysql -uroot -p -e "SHOW SLAVE STATUS\G" | grep -E 'Seconds_Behind_Master|Running'输出选项对照
| 选项 | 输出形态 | 适合场景 |
|---|---|---|
| 默认 --table | 带边框的 ASCII 表格 | 人工查看少量结果 |
| -B / --batch | 制表符分隔、无边框 | 喂给 awk、grep 或写文件 |
| -N / --skip-column-names | 去掉列名行 | 脚本直接取值 |
| -E / --vertical | 每列一行纵向展开 | 列很多或字段很长时阅读 |
| -A / --no-auto-rehash | 跳过表名预读 | 大库登录太慢时提速 |
大库登录慢时加 -A(--no-auto-rehash)跳过库表名预读,登录速度通常从数十秒降到秒级。
不要把密码明文写在命令行里:-p 后面紧跟密码会出现在进程列表与 shell 历史中,应使用 -p 交互输入、--defaults-extra-file 或 mysql_config_editor 生成的登录路径。
巡检脚本里建议配合 --connect-timeout 控制连接超时、用 --defaults-extra-file 管理凭据;同时检查退出码并配合 set -e,让 SQL 失败时脚本及时中断,而不是带着错误结果继续执行。