使用命令行選項連接到MySQL服務器

FBI Warning:
                        適用於Mysql5.7。

使用命令行選項連接到MySQL服務器

    本節介紹如何通過命令行選項使用mysql或mysqldump之類的客戶端建立與MySQL服務器的連接。

1. 連接的默認值

    爲了使客戶端程序連接到MySQL服務器,它必須使用適當的連接參數,例如運行服務器的主機名以及MySQL帳戶的用戶名和密碼。每個連接參數都有一個默認值,但是您可以根據需要使用命令行或選項文件中指定的程序選項來覆蓋默認值。
    此處的示例使用mysql客戶端程序,但原理適用於其他客戶端,例如 mysqldump,mysqladmin或 mysqlshow。
    該命令在不指定任何顯式連接參數的情況下調用mysql:

mysql

    由於沒有參數選項,因此將應用默認值:

  • 默認主機名是localhost。在Unix上,這具有特殊的含義。
  • 在Windows上默認用戶名是ODBC,在Unix上是您的Unix登錄名。
  • 不會向mysql進程發送密碼,因爲命令行未給出 --password 或 -p 選項。
  • 對於mysql,第一個非選項的參數用作默認數據庫的名稱。因爲沒有這個參數,所以mysql沒有選擇默認數據庫。
2. 密碼輸入

    要明確指定主機名和用戶名以及密碼,請在命令行上提供適當的選項。要選擇默認數據庫,請添加數據庫名稱參數。例子:

mysql --host=localhost --user=myname --password=password mydb
mysql -h localhost -u myname -ppassword mydb

    對於密碼選項,密碼值是可選的:

  • 如果使用 --password 或 -p 選項指定密碼值, --password= 或 -p後面沒有空格。
  • 如果您使用 --password 或 -p 但未指定密碼值,則客戶端程序會提示您輸入密碼。輸入密碼時不會顯示。

    如前所述,在命令行中包含密碼值可能會帶來安全風險。爲避免這種風險,請使用不帶任何密碼值的 --password 或 -p 選項:

mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb

    如果沒有爲 --password 或 -p選項指定密碼值,則客戶端程序將顯示提示,並等待您輸入密碼。
    在某些系統上,MySQL用於提示輸入密碼的庫例程會自動將密碼限制爲八個字符。該限制是系統庫的屬性,而不是MySQL的屬性。在內部,MySQL對密碼的長度沒有任何限制。要解決受其影響的系統的限制,請在my.cnf等選項文件中指定密碼。

3. localhost的特殊性

    客戶端程序確定要進行的連接類型如下:

  • 如果主機未指定,或者爲localhost,則會發生與本地主機的連接:
    • 在Windows上,如果服務器啓動時使用了shared_memory系統變量,支持共享內存連接,則客戶端使用共享內存進行連接。
    • 在Unix上,MySQL程序特別對待主機名localhost,其方式可能與其他基於網絡的程序不同:客戶端使用Unix套接字文件進行連接。使用 --socket選項或MYSQL_UNIX_PORT環境變量可以指定套接字名稱。
  • 否則,連接將使用TCP/IP。

    -‌-protocol選項允許您建立特定類型的連接,即使導致其他選項使用不同的協議。也就是說,-‌-protocol指定連接協議並重寫前面的規則,即使對於localhost也是如此。
    只有與所選協議相關的連接選項會被使用,其他連接選項將被忽略。例如,在Unix上的 --host=localhost,客戶端嘗試使用Unix套接字文件連接到本地服務器。即使給定了 --port 或 -P 選項來指定端口號,也會發生這種情況。
    爲確保客戶端與本地服務器建立TCP/IP連接,請使用 -‌-host或 -h將主機名指定爲 127.0.0.1,或者使用本地服務器的IP地址或名稱。您還可以使用 --protocol=TCP選項來顯式指定連接協議,甚至對於localhost生效。例如:

mysql --host=127.0.0.1
mysql --protocol=TCP

    如果服務器配置爲接受IPv6連接,則客戶端可以使用來通過 --host=::1 IPv6連接到本地服務器。
    與遠程服務器的連接使用TCP/IP。此命令使用默認端口號(3306)連接到正在運行的服務器remote.example.com:

mysql --host=remote.example.com

    要明確指定端口號,請使用 --port 或 -P 選項:

mysql --host=remote.example.com --port=13306

    你也可以指定一個連接到本地服務器的端口號。但是,如前所述,在Unix上本地主機的連接在默認情況下使用套接字文件,因此除非如前所述強制進行TCP/IP連接,否則將忽略指定端口號的任何選項。
    示例
    前面搭建了多實例(點擊查看搭建過程),目前3308端口有示例運行,實例未設置root密碼。
    (1)使用 --host=127.0.0.1 或指定tcp協議 --protocol=tcp 可正常連接:

# mysql --host=127.0.0.1 --port=3308
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.23 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> quit
Bye
# mysql --protocol=tcp --port=3308
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.23 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> quit
Bye

    -‌-host=localhost 是使用socket連接的,指定端口是無效的,需要指定協議:

# mysql --host=localhost --port=3308
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2 "No such file or directory")

# mysql --host=localhost --port=3308 --protocol=tcp
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.23 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> quit
Bye

    (2)如果不使用默認的/var/lib/mysql/mysql.sock,就需要指定socket。

# mysql -S /var/lib/mysql-replica02/mysql.sock --host=localhost
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.7.23 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> quit
Bye

    上面這種情況,因爲是在本地主機上,所以不加 --host選項也可以。但如果 --host=127.0.0.1 就會報錯了。

# mysql -S /var/lib/mysql-replica02/mysql.sock --host=127.0.0.1             
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
4. 命令行無密碼登錄

    每次調用客戶端程序時,不在命令行上輸入連接參數的情況下,也可以指定連接參數:

  • 在[client]選項文件的部分中指定連接參數 。文件的相關部分可能如下所示:
[client]
host=host_name
user=user_name
password=password

    注意:只能添加到[client]組或者[client-server]組下,不能添加到[mysqld]類似的其他組下,否則,重啓會報錯。

  • 可以使用環境變量指定某些連接參數。例子:
    • 要指定mysql的主機,請使用 MYSQL_HOST。
    • 在Windows上,要指定MySQL用戶名,請使用 USER。
    • 要指定密碼,請使用MYSQL_PWD。但是,這是不安全的。

在這裏插入圖片描述

參考文檔

https://dev.mysql.com/doc/refman/5.7/en/connecting.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章