無論是開發調試、DBA 運維、自動化腳本、CI/CD 流水線,標準化、可腳本化、安全的登入方式是所有操作的前提。本文覆蓋 Windows/Linux、互動/非互動、Socket/TCP、密碼/免密/金鑰全場景登入指南。
| 參數 | 短參數 | 說明 | 範例 |
|---|---|---|---|
| --host | -h | 主機名/IP,localhost 走 Socket | -h 192.168.1.10 |
| --user | -u | MySQL 帳號 | -u root |
| --password | -p | 密碼(緊跟 -p 無空格)或留空提示輸入 | -pStrongPass / -p |
| --port | -P | TCP 埠(大寫 P) | -P 3307 |
| --socket | -S | Unix Socket 路徑 | -S /run/mysqld/3306/mysql.sock |
| --database | -D | 預設資料庫 | -D mydb |
| --execute | -e | 執行單條 SQL 後退出(腳本核心) | -e "SELECT 1;" |
| --batch | -B | 批次模式(Tab 分隔、無框框、適合管道) | -B -e "SELECT * FROM t;" |
| --skip-column-names | -N | 不輸出欄位名(腳本解析友好) | -N -B -e "SELECT id FROM t;" |
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
mysql -u root -p
# Enter password: ********
# mysql> -- 進入互動模式
REM 單條查詢
mysql -u root -pStrongPass -e "SELECT VERSION(), NOW();"
REM 批次模式輸出 TSV 導入 Excel
mysql -u root -pStrongPass -B -e "SELECT * FROM sales WHERE date>='2024-01-01';" > sales.tsv
REM 執行 SQL 檔案
mysql -u root -pStrongPass mydb < schema.sql
%USERPROFILE%\.my.cnf:[client]
user=root
password=StrongPass
host=127.0.0.1
port=3306
icacls .my.cnf /inheritance:r /grant:r %USERNAME%:Fmysql -e "SELECT 1;"(無需 -u/-p)# .my.cnf 放在 ~/ 或 /etc/mysql/conf.d/
mysql -e "SHOW DATABASES;"
# 明確指定 Socket(多實例必須)
mysql -S /run/mysqld/3307/mysql.sock -e "SELECT 1;"
mysql -h 192.168.1.10 -P 3306 -u app_user -pAppPass -D app_db -e "SELECT COUNT(*) FROM orders;"
#!/bin/bash
# 變數化、錯誤處理、日誌記錄
MYSQL_CMD="mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS -D $DB_NAME -B -N"
SQL="SELECT id, name FROM users WHERE status=1;"
OUTPUT=$($MYSQL_CMD -e "$SQL" 2>/tmp/mysql_err.log)
if [ $? -ne 0 ]; then
echo "[$(date)] MySQL query failed: $(cat /tmp/mysql_err.log)" | tee -a /var/log/myapp.log
exit 1
fi
echo "$OUTPUT" | while IFS=$'\t' read -r id name; do
# 處理每一行
process_user "$id" "$name"
done
chmod 600 ~/.my.cnfPROCESS, REPLICATION CLIENT;備份帳號 SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGERREQUIRE SSL 建帳號;客戶端 --ssl-mode=REQUIREDaudit_log_plugin 記錄所有登入/查詢/失敗| 錯誤 | 原因 | 解決 |
|---|---|---|
| Access denied for user 'root'@'localhost' | 密碼錯/帳號被鎖/Plugin 錯誤 | 重置密碼、檢查 authentication_plugin、unlock |
| Can't connect to local MySQL server through socket | 服務未啟動/Socket 路徑錯 | systemctl start mysqld / 指定 -S 正確路徑 |
| Host 'x.x.x.x' is not allowed to connect | 授權表無對應 Host | CREATE USER 'u'@'%' / GRANT ... / FLUSH PRIVILEGES |
| SSL connection error | 憑證過期/CA 不信任/強制 SSL 但客戶端未啟用 | 檢查憑證有效期、客戶端 --ssl-mode |
MySQL 登入看似基礎,實則是安全邊界、自動化介面、運維效率的交匯點。掌握參數矩陣、建立標準化腳本模板、落實最小權限與審計,讓每一次連線都在可控、可追溯、可重試的軌道上運行。