反斜杠命令是什么
mysql 命令行客户端内置一批以反斜杠开头的客户端命令,它们由客户端自己解释,不发送给服务端解析:\G 把结果纵向逐行显示、\c 清空当前输入不再执行、\s 打印连接状态、\. 或 source 执行脚本文件、tee 把会话记录落盘。日常运维里这些命令的价值在于「不出会话就能自查与自助」,例如猜不准备份文件路径时用 \! 执行 shell 命令确认,记不清表结构时用 \d 看库名。
基本信息
| 适用客户端 | mysql / mariadb 命令行客户端(非 SQL 语法,服务端不可见) |
|---|---|
| 纵向输出 | \G 写在语句末尾,替代分号 |
| 状态与导航 | \s(status)、\u 库名(use 库名)、\d 分隔符、\p 打印当前语句 |
| 脚本与记录 | source / \. 文件执行脚本;\T / tee 文件记录会话 |
| 输出控制 | \n 关闭分页(nopager)、\P 设置分页器、\e 调用编辑器 |
典型使用场景
- 宽表结果阅读:字段多时用 \G 纵向输出,避免终端里横向截断
- 误输入止损:敲了半条长 SQL 才发现写错,用 \c 丢弃缓冲区而不执行
- 脚本批量执行:source init.sql 一次跑完建表与初始化数据
- 会话留痕:tee /tmp/session.log 把操作过程落盘,便于事后核对步骤
- 卡在分页器里:结果被 less 接管后按 \n 关闭分页继续输出
会话内示例
会话内示例
mysql> source /tmp/init.sql # 执行本地脚本,等价于 \. /tmp/init.sql
mysql> SELECT * FROM orders LIMIT 1\G # 纵向显示,字段名与值分行
mysql> tee /tmp/session.log # 之后所有输入输出同时写入该文件
mysql> \s # 状态:连接库、字符集、版本、SSL 等
mysql> \u appdb # 等价于 USE appdb
mysql> \d # 查看当前语句分隔符
mysql> \c # 丢弃当前未发送的输入缓冲区
mysql> \n # 关闭分页器,避免结果被 less 卡住
mysql> \! ls /data/backup/ # 执行一条本地 shell 命令常用命令与等价关系
| 客户端命令 | 等价写法 / 作用 | 注意 |
|---|---|---|
| \G | 替代结尾分号,纵向输出 | 只能出现在语句末尾 |
| \c | 丢弃当前输入缓冲,不执行 | 已用分号提交的部分不受影响 |
| \s / status | 显示连接状态摘要 | 排查字符集、SSL、超时最快 |
| source / \. | 执行客户端本地脚本文件 | 路径是客户端本地路径 |
| tee / \T | 把会话输出写入文件 | 含敏感数据的语句也会一起落盘 |
| \e | 用 EDITOR 打开编辑器写语句 | 适合写多行复杂 SQL |
\c 只作用于「还没发送给服务器」的输入缓冲区。如果语句已经以分号或 \g 提交,再敲 \c 不会撤销那次执行,只能事后回滚。
在脚本或管道里没有终端时,分页器不会生效;tee 仍会正常写文件,但要注意输出文件权限,别把含口令的语句记进公共目录。