Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Connecting to the MySQL Server Using Command Options

6.2.4 使用命令选项连接到 MySQL 服务器

本节描述了使用命令行选项指定如何连接到 MySQL 服务器的方法,例如mysqlmysqldump。关于使用 URI-like 连接字符串或键值对连接到服务器的信息,见第6.2.5节,“使用 URI-Like 字符串或键值对连接到服务器”。如果您无法连接,见第8.2.22节,“MySQL 连接问题解决”

要让客户端程序连接到 MySQL 服务器,它必须使用正确的连接参数,例如服务器运行的主机名称和您的 MySQL 账户用户名和密码。每个连接参数都有默认值,但您可以在命令行或选项文件中覆盖默认值,以便根据需要。

这些示例使用mysql 客户端程序,但是原则也适用于其他客户端,如mysqldumpmysqladminmysqlshow

这个命令不指定任何明确的连接参数,直接调用mysql

mysql

因为没有参数选项,所以默认值生效:

  • 默认主机名是 localhost。在 Unix 上,这个名称有特殊含义,后面会描述。

  • 默认用户名是在 Windows 上为 ODBC,在 Unix 上为你的 Unix 登录名。

  • 因为没有提供--password-p,所以不发送密码。

  • 对于mysql,第一个非选项参数被视为默认数据库的名称,因为没有这样的参数,所以mysql 没有选择默认数据库。

要显式指定主机名、用户名和密码,添加相应的命令行选项。例如:

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选项或MYSQL_UNIX_PORT环境变量指定套接字名称。

  • 在 Windows 上,如果host.(点),或者 TCP/IP 未启用且--socket未指定或主机为空,客户端使用命名管道连接,如果服务器以支持命名管道连接的方式启动,并且用户不是named_pipe_full_access_group系统变量指定的 Windows 组,出现错误。

  • 否则,连接使用 TCP/IP。

可以使用--protocol选项强制使用特定的传输协议,即使其他选项通常导致使用不同的协议。也就是说,--protocol指定传输协议,覆盖前面的规则,包括localhost

只有选择的传输协议相关的连接选项被使用或检查,其他连接选项将被忽略。例如,在 Unix 上,使用--host=localhost,客户端将尝试连接到本地服务器使用 Unix 套接字文件,即使指定了--port-P选项来指定 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连接到本地服务器。见第 7.1.13 节,“IPv6 支持”

在 Windows 上,强制 MySQL 客户端使用命名管道连接,指定--pipe--protocol=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节,“环境变量”