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

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

本节描述使用命令行选项来指定如何建立与 MySQL 服务器的连接，对于客户端，例如[**mysql**](mysql.html)要么[**mysql转储**](mysqldump.html).有关使用类似 URI 的连接字符串或键值对建立连接的信息，对于 MySQL Shell 等客户端，请参阅[第 4.2.5 节，“使用类似 URI 的字符串或键值对连接到服务器”](connecting-using-uri-or-key-value-pairs.html).有关无法连接的更多信息，请参阅[第 6.2.22 节，“解决连接到 MySQL 的问题”](problems-connecting.html).

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

这里的例子使用[**mysql**](mysql.html)客户端程序，但这些原则适用于其他客户端，例如[**mysql转储**](mysqldump.html),[**mysql管理员**](mysqladmin.html)， 要么[**mysqlshow**](mysqlshow.html).

该命令调用[**mysql**](mysql.html)不指定任何显式连接参数：

```
mysql
```

因为没有参数选项，所以应用默认值：

-   默认主机名是`本地主机`.在 Unix 上，这有一个特殊的含义，如下所述。

-   默认用户名是`ODBC`在 Windows 上或您在 Unix 上的 Unix 登录名。

-   不发送密码，因为两者都没有[`- 密码`](connection-options.html#option_general_password)也不`-p`给出。

-   为了[**mysql**](mysql.html)，第一个非选项参数被视为默认数据库的名称。因为没有这样的说法，[**mysql**](mysql.html)不选择默认数据库。

    要明确指定主机名和用户名以及密码，请在命令行上提供适当的选项。要选择默认数据库，请添加 database-name 参数。例子：


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

对于密码选项，密码值是可选的：

-   如果你使用一个[`- 密码`](connection-options.html#option_general_password)要么`-p`选项并指定密码值，必须有*没有空间*之间[`--密码=`](connection-options.html#option_general_password)要么`-p`和它后面的密码。

-   如果你使用[`- 密码`](connection-options.html#option_general_password)要么`-p`但不指定密码值，客户端程序会提示您输入密码。输入密码时不会显示密码。这比在命令行上提供密码更安全，这可能使系统上的其他用户可以通过执行以下命令来查看密码行**ps**.看[第 6.1.2.1 节，“最终用户密码安全指南”](password-security-user.html).

-   要明确指定没有密码并且客户端程序不应提示输入密码，请使用[`--跳过密码`](connection-options.html#option_general_password)选项。

    如前所述，在命令行中包含密码值存在安全风险。为避免这种风险，请指定[`- 密码`](connection-options.html#option_general_password)要么`-p`没有任何以下密码值的选项：


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

当。。。的时候[`- 密码`](connection-options.html#option_general_password)要么`-p`选项没有给出密码值，客户端程序会打印一个提示并等待您输入密码。（在这些例子中，`数据库`是*不是*解释为密码，因为它与前面的密码选项用空格隔开。）

在某些系统上，MySQL 用于提示输入密码的库例程自动将密码限制为八个字符。该限制是系统库的属性，而不是 MySQL。在内部，MySQL 对密码的长度没有任何限制。要解决受它影响的系统的限制，请在选项文件中指定您的密码（请参阅[第 4.2.2.2 节，“使用选项文件”](option-files.html)）。另一种解决方法是将您的 MySQL 密码更改为包含八个或更少字符的值，但缺点是较短的密码往往不太安全。

客户端程序确定要建立的连接类型如下：

-   如果未指定主机或`本地主机`，连接到本地主机：

    -   在 Windows 上，客户端使用共享内存进行连接，如果服务器以[`共享内存`](server-system-variables.html#sysvar_shared_memory)启用系统变量以支持共享内存连接。

    -   在 Unix 上，MySQL 程序处理主机名`本地主机`特别是，与其他基于网络的程序相比，其方式可能与您所期望的不同：客户端使用 Unix 套接字文件进行连接。这[`- 插座`](connection-options.html#option_general_socket)选项或`MYSQL_UNIX_PORT`环境变量可用于指定套接字名称。

        [](<>)

-   在 Windows 上，如果`主持人`是`.`（句点），或 TCP/IP 未启用并且[`- 插座`](connection-options.html#option_general_socket)未指定或主机为空，客户端使用命名管道连接，如果服务器以[`命名管道`](server-system-variables.html#sysvar_named_pipe)启用系统变量以支持命名管道连接。如果不支持命名管道连接，或者进行连接的用户不是由[`named_pipe_full_access_group`](server-system-variables.html#sysvar_named_pipe_full_access_group)系统变量，发生错误。

-   否则，连接使用 TCP/IP。

    这[`- 协议`](connection-options.html#option_general_protocol)选项使您能够使用特定的传输协议，即使其他选项通常会导致使用不同的协议。那是，[`- 协议`](connection-options.html#option_general_protocol)明确指定传输协议并覆盖前面的规则，即使对于`本地主机`.

    仅使用或检查与所选传输协议相关的连接选项。其他连接选项将被忽略。例如，与[`--主机=本地主机`](connection-options.html#option_general_host)在 Unix 上，客户端尝试使用 Unix 套接字文件连接到本地服务器，即使[`- 港口`](connection-options.html#option_general_port)要么`-P`提供选项以指定 TCP/IP 端口号。

    要确保客户端与本地服务器建立 TCP/IP 连接，请使用[`- 主持人`](connection-options.html#option_general_host)要么`-h`指定主机名值`127.0.0.1`（代替`本地主机`)，或本地服务器的 IP 地址或名称。您还可以显式指定传输协议，即使对于`本地主机`，通过使用[`--协议=TCP`](connection-options.html#option_general_protocol)选项。例子：


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

如果服务器配置为接受 IPv6 连接，则客户端可以使用 IPv6 通过 IPv6 连接到本地服务器[`--主机=::1`](connection-options.html#option_general_host).看[第 5.1.13 节，“IPv6 支持”](ipv6-support.html).

在 Windows 上，要强制 MySQL 客户端使用命名管道连接，请指定[`- 管道`](connection-options.html#option_general_pipe)要么[`--protocol=管道`](connection-options.html#option_general_protocol)选项，或指定`.`（句点）作为主机名。如果服务器没有启动[`命名管道`](server-system-variables.html#sysvar_named_pipe)启用系统变量以支持命名管道连接，或者如果建立连接的用户不是由[`named_pipe_full_access_group`](server-system-variables.html#sysvar_named_pipe_full_access_group)系统变量，发生错误。使用[`- 插座`](connection-options.html#option_general_socket)如果您不想使用默认管道名称，则可以选择指定管道名称。

与远程服务器的连接使用 TCP/IP。此命令连接到正在运行的服务器`remote.example.com`使用默认端口号 (3306)：

```
mysql --host=remote.example.com
```

要明确指定端口号，请使用[`- 港口`](connection-options.html#option_general_port)要么`-P`选项：

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

您也可以指定连接到本地服务器的端口号。然而，如前所述，连接到`本地主机`在 Unix 上默认使用套接字文件，因此除非您如前所述强制 TCP/IP 连接，否则任何指定端口号的选项都将被忽略。

对于这个命令，程序使用 Unix 上的一个套接字文件和[`- 港口`](connection-options.html#option_general_port)选项被忽略：

```
mysql --port=13306 --host=localhost
```

要使用端口号，请强制 TCP/IP 连接。例如，以下列任一方式调用程序：

```
mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP
```

有关控制客户端程序如何与服务器建立连接的选项的其他信息，请参阅[第 4.2.3 节，“连接到服务器的命令选项”](connection-options.html).

可以在每次调用客户端程序时指定连接参数，而无需在命令行中输入它们：

-   指定连接参数`[客户]`选项文件的部分。文件的相关部分可能如下所示：

    [](<>)[](<>)

    ```
    [client]
    host=host_name
    user=user_name
    password=password
    ```

    有关详细信息，请参阅[第 4.2.2.2 节，“使用选项文件”](option-files.html).

-   可以使用环境变量指定一些连接参数。例子：

    [](<>)[](<>)[](<>)[](<>)

    -   指定主机[**mysql**](mysql.html)， 采用`MYSQL_HOST`.

    -   在 Windows 上，要指定 MySQL 用户名，请使用`用户`.

        有关支持的环境变量的列表，请参阅[第 4.9 节，“环境变量”](environment-variables.html).
