本節說明如何使用命令列選項來指定如何建立與 MySQL 伺服器的連線,適用於諸如 mysql 或 mysqldump 等用戶端。如需使用類似 URI 的連線字串或鍵值對建立連線(適用於諸如 MySQL Shell 等用戶端)的相關資訊,請參閱 第 6.2.5 節「使用類似 URI 的字串或鍵值對連線至伺服器」。如果您無法連線,如需其他資訊,請參閱 第 8.2.22 節「疑難排解連線至 MySQL 的問題」。
若要讓用戶端程式連線至 MySQL 伺服器,必須使用正確的連線參數,例如伺服器執行的主機名稱,以及您的 MySQL 帳戶的使用者名稱和密碼。每個連線參數都有預設值,但您可以視需要使用命令列上或選項檔案中指定的程式選項來覆寫預設值。
此處的範例使用 mysql 用戶端程式,但這些原則適用於其他用戶端,例如 mysqldump、mysqladmin 或 mysqlshow。
此命令會調用 mysql,而未指定任何明確的連線參數
mysql
由於沒有參數選項,因此會套用預設值
預設的主機名稱為
localhost
。在 Unix 上,這具有特殊意義,如稍後所述。在 Windows 上,預設的使用者名稱為
ODBC
,而在 Unix 上則為您的 Unix 登入名稱。由於未給定
--password
或-p
,因此不會傳送密碼。
若要明確指定主機名稱和使用者名稱,以及密碼,請在命令列上提供適當的選項。若要選取預設資料庫,請新增資料庫名稱引數。範例:
mysql --host=localhost --user=myname --password=password mydb
mysql -h localhost -u myname -ppassword mydb
對於密碼選項,密碼值是可選的
如果您使用
--password
或-p
選項並指定密碼值,則在--password=
或-p
與其後的密碼之間不得有空格。如果您使用
--password
或-p
,但未指定密碼值,則用戶端程式會提示您輸入密碼。密碼在您輸入時不會顯示。這比在命令列上提供密碼更安全,因為這可能會讓您系統上的其他使用者透過執行諸如 ps 等命令來看到密碼行。請參閱 第 8.1.2.1 節「密碼安全性的使用者端指南」。若要明確指定沒有密碼,且用戶端程式不應提示輸入密碼,請使用
--skip-password
選項。
如剛才所述,在命令列上包含密碼值是一種安全風險。為了避免這種風險,請指定 --password
或 -p
選項,而不要在其後加上任何密碼值。
mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb
當使用 --password
或 -p
選項,且沒有指定密碼值時,客戶端程式會印出提示訊息並等待您輸入密碼。(在這些範例中,mydb
並非 被視為密碼,因為它與前面的密碼選項之間以空格分隔。)
在某些系統上,MySQL 用於提示輸入密碼的程式庫會自動將密碼限制為八個字元。此限制是系統程式庫的特性,而非 MySQL 的特性。在內部,MySQL 對於密碼長度沒有任何限制。為了在受此限制影響的系統上解決此問題,請在選項檔案中指定您的密碼 (請參閱第 6.2.2.2 節,「使用選項檔案」)。另一個解決方案是將您的 MySQL 密碼更改為八個或更少字元的值,但這樣做的缺點是較短的密碼往往較不安全。
客戶端程式會以下列方式判斷要建立的連線類型:
如果未指定主機,或主機為
localhost
,則會建立與本機主機的連線。在 Windows 上,如果伺服器啟動時啟用了
shared_memory
系統變數以支援共用記憶體連線,則客戶端會使用共用記憶體連線。在 Unix 上,MySQL 程式會特別處理主機名稱
localhost
,其方式可能與您預期的其他基於網路的程式不同:客戶端會使用 Unix Socket 檔案連線。可以使用--socket
選項或MYSQL_UNIX_PORT
環境變數來指定 Socket 名稱。
在 Windows 上,如果
host
為.
(句點),或未啟用 TCP/IP,且未指定--socket
選項或主機為空,則如果伺服器啟動時啟用了named_pipe
系統變數以支援具名管道連線,則客戶端會使用具名管道連線。如果具名管道連線不受支援,或者建立連線的使用者不是named_pipe_full_access_group
系統變數指定的 Windows 群組的成員,則會發生錯誤。否則,連線會使用 TCP/IP。
--protocol
選項可讓您使用特定的傳輸協定,即使其他選項通常會導致使用不同的協定。也就是說,--protocol
會明確指定傳輸協定,並覆蓋前面的規則,即使是 localhost
也一樣。
只會使用或檢查與所選傳輸協定相關的連線選項。其他連線選項會被忽略。例如,在 Unix 上使用 --host=localhost
時,即使指定了 --port
或 -P
選項來指定 TCP/IP 埠號,客戶端也會嘗試使用 Unix Socket 檔案連線到本機伺服器。
為了確保客戶端建立與本機伺服器的 TCP/IP 連線,請使用 --host
或 -h
來指定主機名稱值為 127.0.0.1
(而不是 localhost
),或本機伺服器的 IP 位址或名稱。您也可以明確指定傳輸協定,即使是 localhost
,也可以使用 --protocol=TCP
選項。範例:
mysql --host=127.0.0.1
mysql --protocol=TCP
如果伺服器已設定為接受 IPv6 連線,則客戶端可以使用 --host=::1
通過 IPv6 連線到本機伺服器。請參閱第 7.1.13 節,「IPv6 支援」。
在 Windows 上,若要強制 MySQL 客戶端使用具名管道連線,請指定 --pipe
或 --protocol=PIPE
選項,或指定 .
(句點) 作為主機名稱。如果伺服器啟動時未啟用 named_pipe
系統變數以支援具名管道連線,或者建立連線的使用者不是 named_pipe_full_access_group
系統變數指定的 Windows 群組的成員,則會發生錯誤。如果您不想使用預設的管道名稱,請使用 --socket
選項來指定管道的名稱。
與遠端伺服器的連線會使用 TCP/IP。此命令會使用預設埠號 (3306) 連線到在 remote.example.com
上執行的伺服器:
mysql --host=remote.example.com
若要明確指定埠號,請使用 --port
或 -P
選項:
mysql --host=remote.example.com --port=13306
您也可以指定與本機伺服器連線的埠號。但是,如先前所述,在 Unix 上與 localhost
的連線預設會使用 Socket 檔案,因此除非您強制使用 TCP/IP 連線,否則任何指定埠號的選項都會被忽略。
對於此命令,程式會在 Unix 上使用 Socket 檔案,並忽略 --port
選項:
mysql --port=13306 --host=localhost
若要使埠號生效,請強制使用 TCP/IP 連線。例如,以下列任何一種方式呼叫程式:
mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP
有關控制客戶端程式如何建立與伺服器連線的選項的更多資訊,請參閱第 6.2.3 節,「連線至伺服器的命令選項」。
可以指定連線參數,而無需每次呼叫客戶端程式時都在命令列中輸入這些參數:
請在選項檔案的
[client]
區段中指定連線參數。檔案的相關區段可能如下所示:[client] host=host_name user=user_name password=password
有關更多資訊,請參閱第 6.2.2.2 節,「使用選項檔案」。
可以使用環境變數來指定某些連線參數。範例:
若要為 mysql 指定主機,請使用
MYSQL_HOST
。在 Windows 上,若要指定 MySQL 使用者名稱,請使用
USER
。
如需支援的環境變數清單,請參閱第 6.9 節,「環境變數」。