mysql CLI 客户端
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各演练一遍。
下一步
- 环境怎么装出来的:MySQL 环境搭建;
- 同族的非交互管理工具:mysqladmin;
- 这些 CLI 命令背后在操作什么:MySQL 配置运维。