使用命令行选项连接到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

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