mysql_config_editor 是官方推荐的凭证安全存储方案,通过加密 ~/.mylogin.cnf 文件避免密码明文暴露,但必须指定 --login-path 参数、严格管控文件权限(chmod 600)、显式调用 --login-path=xxx 才生效,且密码变更后需手动更新。

直接用 mysql_config_editor 是目前最稳妥、官方推荐的方案,它把凭证加密存进 ~/.mylogin.cnf,MySQL 客户端和 mysqldump 都能自动识别,且不触发 Warning: Using a password on the command line interface can be insecure.。
mysql_config_editor set 命令必须带 --login-path
不指定 --login-path 会失败或覆盖默认配置,而且后续调用必须显式传参。常见错误是漏掉这个参数,导致 mysql --login-path=xxx 找不到对应条目。
-
--login-path是自定义别名(如prod、backup),不是固定值,可重复设置多个路径 - 必须在交互式终端中执行,因为
-p后面不能跟密码明文——它会弹出密码输入提示 - 命令示例:
mysql_config_editor set --login-path=prod --host=10.0.1.5 --user=app_rw --password - 若主机用 socket 连接(如本地多实例),加
--socket=/data/3307/mysql.sock,否则默认走 TCP
文件权限和位置必须严格控制
mysql_config_editor 生成的 ~/.mylogin.cnf 是二进制加密文件,但它的安全性依赖于文件系统权限。如果权限宽松,其他用户仍可能读取并解密(MySQL 官方不公开加密算法,但已有逆向工具)。
- 该文件由 MySQL 自动创建,但只设为
600(属主读写),不会自动修复错误权限 - 手动检查:
ls -l ~/.mylogin.cnf,如果不是-rw-------,立刻运行chmod 600 ~/.mylogin.cnf - 注意:root 用户的文件在
/root/.mylogin.cnf,普通用户在$HOME/.mylogin.cnf,脚本里不能硬编码路径 - 不可放在 NFS 或共享目录下;容器环境需确保挂载卷权限一致
mysqldump 和 mysql 调用时必须显式指定 --login-path
很多人以为配完 mysql_config_editor 就一劳永逸,结果 mysqldump -u... -p... 还是报警告——因为没告诉工具用哪个 login-path。
-
mysql和mysqldump默认不读~/.mylogin.cnf,必须加--login-path=xxx - 不能混用:比如用
--login-path=prod连接,却在 SQL 里执行SELECT USER();发现是root@localhost?说明你设错了 user 或 host - 备份脚本示例:
mysqldump --login-path=backup --databases app_db > /backup/app_$(date +%F).sql - 调试技巧:用
mysql_config_editor print --login-path=backup看是否包含预期字段(host、user、port、socket)
真正容易被忽略的是:当 MySQL 用户密码变更后,mysql_config_editor 不会自动同步,旧凭据仍留在文件里,且无过期机制。必须手动重新 set,否则备份或连接会静默失败——错误日志里只有 Access denied,没有“密码错误”提示。











