本節說明如何使用命令列選項來指定如何建立與 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。此命令會連線至在 remote.example.com
上執行的伺服器,並使用預設連接埠號碼 (3306)。
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 節,「環境變數」。