mysql 客户端是什么
mysql 是 MySQL 官方命令行客户端,同时是交互式 SQL 终端和批处理执行器:可以把脚本重定向进去执行、用 -e 直接跑一条语句、用 -B 或 -E 控制输出格式,再把结果交给 shell 或监控采集。它的选项体系与 mysqldump、mysqladmin 共用同一套选项文件机制,配置一次 ~/.my.cnf 就能在所有官方工具里复用连接参数。
基本信息
| 用途 | 交互执行 SQL 与脚本批处理 |
|---|---|
| 语法 | mysql -h 主机 -P 端口 -u 用户 -p [库名] |
| 所属 | MySQL Client(5.7 / 8.0 官方发行版) |
| 选项文件 | /etc/my.cnf、~/.my.cnf、--defaults-file 指定 |
| 常用开关 | -e 执行后退出、-B 制表符、-E 竖排、-A 跳过库表预读 |
| 权限 | 按账号授权,只读账号不能执行写语句 |
典型使用场景
- 在无图形界面的服务器上临时查数据、看表结构,替代图形客户端
- 巡检脚本里取指标(连接数、行数、复制延迟),结果直接送监控
- 用 mysql < schema.sql 完成建库建表与初始化数据导入
- 库表数量大的实例登录慢,用 -A 跳过补全信息预读加速
- 用 --defaults-file 隔离生产与测试两套连接配置,避免手工拼参数
- 单行字段很多时用 -E 竖排阅读,或 -B 输出后交给 awk 处理
基础用法
基础用法
mysql -h 127.0.0.1 -P 3306 -u root -p # 交互登录,口令单独输入不留在历史里
mysql -uroot -p -e "SHOW DATABASES;" # 非交互执行单条语句
mysql -uroot -p appdb < init.sql # 批量执行脚本文件
mysql -uroot -p -B -e "SELECT id,name FROM appdb.orders LIMIT 5;" # 制表符输出,可直接管道处理
mysql -uroot -p -E -e "SELECT * FROM appdb.orders WHERE id=1;" # 竖排输出,宽表容易读
mysql -uroot -p -A appdb # 大实例下跳过库表预读,登录更快常用选项速查
| 选项 | 作用 | 使用建议 |
|---|---|---|
| -h / -P | 主机与端口,默认 localhost 与 3306 | 要明确走 TCP 就写 127.0.0.1 |
| -u / -p | 账号与口令 | -p 与口令之间不能有空格,交互输入最安全 |
| -D | 登录时直接指定库 | 等价于登录后再 USE,脚本里省一步 |
| -e | 执行语句后立即退出 | 脚本与监控采集的首选方式 |
| -B | 制表符输出,可配合 --skip-column-names 去表头 | 便于 awk、grep 二次处理 |
| -E | 竖排输出 | 单行字段多、内容长时阅读友好 |
| -A | 不预读库表信息 | 库表数量大时登录明显加快 |
| --defaults-file | 指定选项文件 | 多环境隔离,配置文件权限设为 600 |
选项文件持久化
选项文件持久化
cat >> ~/.my.cnf <<'EOF'
[client]
host=127.0.0.1
user=dba
default-character-set=utf8mb4
prompt='\\u@\\h [\\d]> '
EOF
chmod 600 ~/.my.cnf # 配置文件含连接信息,权限必须收紧不要把明文口令写在命令行参数或脚本里:它同时残留在 shell 历史、进程列表与审计日志中。改用交互输入、权限 600 的选项文件,或客户端提供的加密登录路径。
-h localhost 走本地 socket,-h 127.0.0.1 走 TCP,两条路的来源记录匹配、加密方式与性能表现都不同;排查连接问题时先确认走的是哪条,否则会拿着错误的前提改配置。
脚本里执行 SQL 建议显式加 --default-character-set=utf8mb4 并检查退出码:客户端与库表字符集不一致是中文乱码的常见来源,而部分报错不会让客户端返回非零状态。
脚本化使用要点
- 连接参数写进权限 600 的选项文件,脚本只传库名与语句,避免参数进入日志
- 用 -e 加 -B 与 --skip-column-names 输出纯数据行,便于下游程序解析
- 导入大文件前在脚本内 SET autocommit=0 并在末尾提交,可减少逐行提交开销
- 批量导入或删除前先做一次备份,避免脚本写错条件后无法回退
- 长脚本用 --force 时要清楚它会跳过错误继续执行,宁可不加也别误判成功
把导入文件和连接参数分开管理:脚本本身不含口令,通过 --defaults-extra-file 指向外部配置,既能被流水线复用,也不会把凭证提交进版本库。