前置知识: SQL

mysql CLI 客户端

2 min入门

mysql 命令行客户端的高频用法:连接与凭据安全、非交互执行、批量导入、pager 与 tee 两个效率开关。

连接:一条命令进交互界面

bash
mysql -u root -p          # 回车后补输密码,凭据不留在命令行
mysql -h 127.0.0.1 -P 3307 -u app -p mydb   # 指定主机、端口、库名
mysql --default-character-set=utf8mb4 -u root -p   # 显式字符集,避免乱码

进入后提示符变成 mysql>,分号回车才执行。退出用 exit 或 quit。

凭据别写在命令行里

-p密码(不带空格)能跳过交互,但密码会出现在 shell history 和 ps 输出里。脚本的标准做法是配置文件:

bash
# ~/.my.cnf,权限必须 600
[client]
user=monitor
password=你的密码
host=127.0.0.1

chmod 600 ~/.my.cnf
mysql -e "SELECT 1;"    # 自动读取凭据

多条凭据并存(开发一套、生产一套)用 --defaults-extra-file=/path/file.cnf 指定,同一原则:密码进文件不进行历史。

非交互执行:脚本和巡检的主力

bash
# -e 直接执行,结果打stdout,退出码可用于脚本判断
mysql -e "SELECT COUNT(*) FROM charge_sessions;"

# 失败时退出码非 0,健康检查脚本的判据
mysql -e "SELECT 1;" && echo "DB OK"

# --batch 制表符分隔,配合 awk 提列
mysql --batch -e "SHOW STATUS LIKE 'Threads_connected';" | awk '{print $2}'

# 执行一个 SQL 文件(导入、迁移脚本)
mysql mydb < init.sql
mysql mydb -e "source /path/init.sql"    # 等价写法

交互界面里值得肌肉记忆的几件事

sql
-- 1. 纵向显示:行宽爆掉时的救星(结果一列列竖着排)
SELECT * FROM charge_sessions\G

-- 2. pager:把查询结果直接交给 less / grep
pager less -S
SELECT * FROM information_schema.processlist;
nopager          -- 记得关掉

-- 3. tee:全程留档(事故排查时把整个会话录下来)
tee /tmp/session-20260928.log
notee

\G、pager、tee 是三个用过就回不去的效率开关。自定义提示符(显示当前连接的是哪个库哪个主机):

bash
mysql --prompt="[\u@\h:\d]> " -u root -p

常见困惑

  • “命令敲了没反应?” —— 少了分号。mysql> 等你补 ; 才执行,多行写一半也正常。
  • “中文变问号?” —— 客户端字符集与库不一致,连接时加 --default-character-set=utf8mb4。
  • “CSV 导出?” —— 交互内 SELECT ... INTO OUTFILE 需要服务器侧权限,更通用的做法是 mysql --batch -e "..." > out.tsv 在客户端侧落盘,列间是制表符。

自检清单

  • 能不用 -p密码 明文完成一次脚本化连接;
  • 会用 -e、< file 两个非交互入口,并解释退出码的用途;
  • \G、pager、tee 各演练一遍。

下一步