MYSQL_HOST、MYSQL_PORT、MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE 这五个环境变量真正生效,官方明确支持:MYSQL_HOST覆盖-h、MYSQL_PORT覆盖-P、MYSQL_USER覆盖-u、MYSQL_PASSWORD覆盖-p、MYSQL_DATABASE连接后自动USE指定库。

MYSQL_HOST、MYSQL_PORT、MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE 这五个环境变量可以直接控制 MySQL 客户端连接行为,无需在命令行反复输入参数。
它们只影响客户端工具(如 mysql、mysqldump),不作用于服务端进程 mysqld。设置后,在任意目录执行 mysql 命令即可自动连接指定主机、端口、用户和数据库。
哪些环境变量真正生效?
MySQL 官方文档明确支持以下变量:
-
MYSQL_HOST:覆盖-h参数,默认值为localhost -
MYSQL_PORT:覆盖-P参数,默认值为3306 -
MYSQL_USER:覆盖-u参数,若未设则提示输入 -
MYSQL_PASSWORD:覆盖-p参数,注意明文风险 -
MYSQL_DATABASE:连接成功后自动USE该库
其他如 MYSQL_SOCKET、MYSQL_DEFAULT_AUTH 也有效,但使用频率低;MYSQL_HOME 不影响客户端连接逻辑,仅被部分脚本或旧版工具读取。
Windows 下设置方式与常见错误
在 PowerShell 或 CMD 中临时设置(当前会话有效):
set MYSQL_HOST=192.168.1.100 set MYSQL_PORT=3307 set MYSQL_USER=admin set MYSQL_PASSWORD=secret123 set MYSQL_DATABASE=testdb
永久设置需通过「系统属性 → 高级 → 环境变量」添加为「用户变量」或「系统变量」。容易踩的坑包括:
- 变量名拼错,比如写成
MYSQL_USERNANE或mysql_user(必须全大写、下划线、严格匹配) - 密码含特殊字符(如
&、^、|)导致 CMD 解析失败,建议改用 PowerShell 或避免在环境变量中存密码 - 设置后未新开终端,旧终端不会读取新变量
- 同时设置了
MYSQL_PASSWORD和命令行-p,后者优先级更高,但会触发交互式密码输入,造成混淆
Linux/macOS 下的注意事项
在 ~/.bashrc 或 ~/.zshrc 中添加:
export MYSQL_HOST=localhost export MYSQL_PORT=3306 export MYSQL_USER=dev export MYSQL_PASSWORD="my@pass" export MYSQL_DATABASE=myapp
然后运行 source ~/.zshrc(macOS Catalina 及以后默认 zsh)使配置生效。关键点:
- 路径分隔符是冒号
:,不是 Windows 的分号;但环境变量本身不需要加到PATH里 - 双引号包裹密码可保留特殊字符,单引号会禁用变量扩展,不推荐
- 如果用
sudo mysql,普通用户的环境变量不会继承,需用sudo -E mysql保持环境 - 某些容器或 CI 环境中,shell 启动方式可能绕过 rc 文件,应改用启动脚本或
--env显式注入
最常被忽略的是:环境变量只对纯客户端命令起作用,像 mysqladmin、mysqlimport 等工具虽同属客户端套件,但并非全部支持这些变量——务必查对应工具的手册确认是否列出 MYSQL_* 支持项。











