本節介紹使用命令行選項來指定如何為MySQL或mysqldump等客戶端建立到MySQL服務器的連接。
有關使用類似URI的連接字符串或鍵值對建立連接的信息,對于MySQL Shell等客戶端,請參閱“使用類似URI字符串或鍵值配對連接到服務器”。
有關無法連接的其他信息,請參閱“連接到MySQL的問題疑難解答”。
客戶端程序要連接到MySQL服務器,必須使用正確的連接參數,例如服務器運行的主機名以及MySQL帳戶的用戶名和密碼。
每個連接參數都有一個默認值,但您可以根據需要使用命令行或選項文件中指定的程序選項來替代默認值。
這里的示例使用mysql客戶端程序,但這些原則適用于其他客戶端,如mysqldump、mysqladmin或mysqlshow。
此命令調用mysql時不指定任何顯式連接參數:
mysql
默認主機名為localhost。在Unix上,這有一個特殊的含義,如后所述。
默認用戶名在Windows上為ODBC,在Unix上為Unix登錄名。
沒有發送密碼,因為既沒有給出--password也沒有給出-p。
對于mysql,第一個nonoption參數被作為默認數據庫的名稱。因為沒有這樣的參數,mysql不選擇默認數據庫。
要明確指定主機名和用戶名以及密碼,請在命令行中提供適當的選項。若要選擇默認數據庫,請添加數據庫名稱參數。示例:
mysql --host=localhost --user=myname --password=password mydb
mysql -h localhost -u myname -ppassword mydb
對于密碼選項,密碼值是可選的:
如果使用--password或-p選項并指定密碼值,則--password=或-p與后面的密碼之間不得有空格。
如果使用--password或-p但未指定密碼值,則客戶端程序會提示您輸入密碼。輸入密碼時不會顯示密碼。這比在命令行上提供密碼更安全,因為命令行可能使系統上的其他用戶能夠通過執行ps等命令來查看密碼行。
請參閱“密碼安全的最終用戶指南”。
【MySQL精通之路】安全(2)-密碼安全-CSDN博客
要明確指定沒有密碼,并且客戶端程序不應提示輸入密碼,請使用--skip password選項。
如前所述,在命令行中包含密碼值是一種安全風險。若要避免此風險,請指定--password或-p選項,但不包含以下任何密碼值:
mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb
當提供的--password或-p選項沒有密碼值時,客戶端程序會打印一個提示并等待您輸入密碼。
(在這些示例中,mydb不會被解釋為密碼,因為它與前面的password選項之間有一個空格。)
在某些系統上,MySQL用于提示輸入密碼的庫例程會自動將密碼限制為八個字符。
這個限制是系統庫的屬性,而不是MySQL。
在內部,MySQL對密碼的長度沒有任何限制。
要繞過受其影響的系統的限制,請在配置文件中指定您的密碼
請參閱“使用選項文件”。
【MySQL精通之路】MySQL的使用(2)-配置-CSDN博客
另一種解決方法是將MySQL密碼更改為8個或更少字符的值,但這有一個缺點,即較短的密碼往往不太安全。
客戶端程序確定要建立的連接類型,如下所示:
如果未指定主機或主機為localhost,則會發生到本地主機的連接:
在Windows上,如果服務器啟動時啟用了shared_memory系統變量以支持共享內存連接,則客戶端使用共享內存進行連接。
在Unix上,MySQL程序對主機名localhost進行了特殊處理,與其他基于網絡的程序相比,這種方式可能與您所期望的不同:客戶端使用Unix套接字文件進行連接。--socket選項或MYSQL_UNIX_PORT環境變量可用于指定套接字名稱。
在Windows上,如果主機為。(period),或者TCP/IP未啟用且--socket未指定,或者主機為空,如果服務器啟動時啟用了named_pipe系統變量以支持命名管道連接,則客戶端將使用命名管道進行連接。如果不支持命名管道連接,或者進行連接的用戶不是named_pipe_full_access_group系統變量指定的Windows組的成員,則會發生錯誤。
否則,連接將使用TCP/IP。
?--protocol選項使您能夠使用特定的傳輸協議,即使其他選項通常會導致使用不同的協議。
也就是說,--protocol顯式地指定傳輸協議,并覆蓋前面的規則,即使對于localhost也是如此。
僅使用或檢查與所選傳輸協議相關的連接選項。其他連接選項將被忽略。
例如,在Unix上使用--host=localhost時,即使提供了--port或-P選項來指定TCP/IP端口號,客戶端也會嘗試使用Unix套接字文件連接到本地服務器。
要確保客戶端與本地服務器建立TCP/IP連接,請使用--host或-h指定主機名值127.0.0.1(而不是localhost),或本地服務器的IP地址或名稱。您還可以通過使用--protocol=TCP選項顯式指定傳輸協議,即使對于localhost也是如此。示例:
mysql --host=127.0.0.1
mysql --protocol=TCP
如果服務器配置為接受IPv6連接,則客戶端可以使用--host=::1通過IPv6連接到本地服務器
請參閱“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的連接使用套接字文件,因此除非如前所示強制TCP/IP連接,否則任何指定端口號的選項都將被忽略。
對于此命令,程序在Unix上使用一個套接字文件,并忽略--port選項:
mysql --port=13306 --host=localhost
要使用端口號,請強制建立TCP/IP連接。例如,通過以下任一方式調用程序:
mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP
有關控制客戶端程序如何與服務器建立連接的配置的更多信息,
請參閱“連接到服務器的命令選項”。
【MySQL精通之路】MySQL的使用(3)-連接到服務器的配置-CSDN博客
可以指定連接參數,而無需每次調用客戶端程序時在命令行中輸入這些參數:
[client]
host=host_name
user=user_name
password=password
有關更多信息,請參閱“使用配置文件”。
【MySQL精通之路】MySQL的使用(2)-配置-CSDN博客
可以使用環境變量指定某些連接參數。示例:
要指定mysql的主機,請使用mysql_host。
在Windows上,要指定MySQL用戶名,請使用user。
有關支持的環境變量的列表,請參閱“環境變量”。
?未完待續...