首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 服務器登入實戰:從 Windows CMD 到 Linux Shell 的標準化連線指南

     編輯:MySQL 綜合教學

前言:登入是運維的起點,卻常被忽視

無論是開發調試、DBA 運維、自動化腳本、CI/CD 流水線,標準化、可腳本化、安全的登入方式是所有操作的前提。本文覆蓋 Windows/Linux、互動/非互動、Socket/TCP、密碼/免密/金鑰全場景登入指南。

核心連線參數速查

參數短參數說明範例
--host-h主機名/IP,localhost 走 Socket-h 192.168.1.10
--user-uMySQL 帳號-u root
--password-p密碼(緊跟 -p 無空格)或留空提示輸入-pStrongPass / -p
--port-PTCP 埠(大寫 P)-P 3307
--socket-SUnix 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;"

Windows CMD/PowerShell 實戰

互動式登入

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

免密登入(Windows 本機專用)

  1. 建立 %USERPROFILE%\.my.cnf:
[client]
user=root
password=StrongPass
host=127.0.0.1
port=3306
  1. 設定檔案權限:icacls .my.cnf /inheritance:r /grant:r %USERNAME%:F
  2. 測試:mysql -e "SELECT 1;"(無需 -u/-p)

Linux Shell 實戰

Socket 連線(本機最高效、免密配合 .my.cnf)

# .my.cnf 放在 ~/ 或 /etc/mysql/conf.d/
mysql -e "SHOW DATABASES;"

# 明確指定 Socket(多實例必須)
mysql -S /run/mysqld/3307/mysql.sock -e "SELECT 1;"

TCP 連線(遠端/容器/跨主機)

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

安全增強:免密不等於不安全

  1. .my.cnf 權限 600:chmod 600 ~/.my.cnf
  2. 專用帳號最小權限:監控帳號只需 PROCESS, REPLICATION CLIENT;備份帳號 SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER
  3. SSL/TLS 強制:REQUIRE SSL 建帳號;客戶端 --ssl-mode=REQUIRED
  4. 审計日誌:audit_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授權表無對應 HostCREATE USER 'u'@'%' / GRANT ... / FLUSH PRIVILEGES
SSL connection error憑證過期/CA 不信任/強制 SSL 但客戶端未啟用檢查憑證有效期、客戶端 --ssl-mode

結語

MySQL 登入看似基礎,實則是安全邊界、自動化介面、運維效率的交匯點。掌握參數矩陣、建立標準化腳本模板、落實最小權限與審計,讓每一次連線都在可控、可追溯、可重試的軌道上運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved