MySQL 5.6 引入安全增強:命令行明文密碼(-p password 或 --password=password)會觸發警告 Warning: Using a password on the command line interface can be insecure.。本文提供三種標準化解決方案,消除警告並提升安全性。
--defaults-extra-file(推薦,腳本/自動化首選)# /etc/mysql/backup.cnf (權限 600)
[client]
host = localhost
user = backup_user
password = 'your_secure_password'
# 可選:default-character-set = utf8mb4
關鍵:文件權限 chmod 600 /etc/mysql/backup.cnf,僅擁有者可讀寫。
# 備份(無警告)
mysqldump --defaults-extra-file=/etc/mysql/backup.cnf db_name > backup.sql
# 還原(無警告)
mysql --defaults-extra-file=/etc/mysql/backup.cnf db_name < backup.sql
# 直接執行 SQL
mysql --defaults-extra-file=/etc/mysql/backup.cnf -e "SELECT 1;"
優勢:密碼不出現在進程列表(ps aux)、Shell 歷史、腳本明文中。
mysql_config_editor 加密存儲登錄路徑(5.6.6+)mysql_config_editor set --login-path=backup \
--host=localhost --user=backup_user --password
# 提示輸入密碼,存儲於 ~/.mylogin.cnf (加密)
# 備份
mysqldump --login-path=backup db_name > backup.sql
# 還原
mysql --login-path=backup db_name < backup.sql
# 查看已存儲路徑
mysql_config_editor print --all
注意:測試環境下仍可能顯示警告(Bug #69930),但密碼不再明文暴露。生產環境建議方案一。
MYSQL_PWD(不推薦,僅兼容舊腳本)export MYSQL_PWD='your_password'
mysqldump -u backup_user db_name > backup.sql
unset MYSQL_PWD
缺點:進程環境變量可被同用戶其他進程讀取(cat /proc/$PID/environ),安全性低於方案一/二。
| 方案 | 安全性 | 適用場景 | 警告消除 |
|---|---|---|---|
| --defaults-extra-file | ⭐⭐⭐⭐⭐ | 自動化腳本、定時備份、CI/CD、生產首選 | ✅ 完全消除 |
| mysql_config_editor | ⭐⭐⭐⭐ | 人工交互、多實例切換、開發環境 | ⚠️ 部分版本仍警告 |
| MYSQL_PWD | ⭐⭐ | 舊腳本兼容、臨時臨時 | ✅ 消除 |
| 命令行 -ppassword | ⭐ | 極不推薦 | ❌ 警告 |
SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, RELOAD, REPLICATION CLIENT600,擁有者 mysql:mysql 或備份腳本執行用戶--defaults-extra-file=/path/to/backup.cnfaudit_log 記錄登入嘗試,監控異常連接mysql_config_editor 支持 --skip-login-path 忽略登錄路徑authentication_ldap_sasl、authentication_kerberos 支持外部認證,無需存儲密碼SET PERSIST 可持久化全局變量,但密碼仍需配置文件