### 4.2.7 连接传输协议

对于使用 MySQL 客户端库的程序（例如，[**mysql**](mysql.html)和[**mysql转储**](mysqldump.html))，MySQL 支持基于多种传输协议的服务器连接：TCP/IP、Unix 套接字文件、命名管道和共享内存。本节介绍如何选择这些协议，以及它们的相似之处和不同之处。

-   [传输协议选择](transport-protocols.html#transport-protocol-selection)

-   [本地和远程连接的传输支持](transport-protocols.html#transport-protocol-local-remote)

-   [本地主机的解释](transport-protocols.html#transport-protocol-localhost)

-   [加密和安全特性](transport-protocols.html#transport-protocol-encryption)

-   [连接压缩](transport-protocols.html#transport-protocol-compression)

#### 传输协议选择

对于给定的连接，如果未明确指定传输协议，则将其隐式确定。例如，连接到`本地主机`在 Unix 和类 Unix 系统上产生一个套接字文件连接，以及一个 TCP/IP 连接到`127.0.0.1`否则。有关其他信息，请参阅[第 4.2.4 节，“使用命令选项连接到 MySQL 服务器”](connecting.html).

要明确指定协议，请使用[`- 协议`](connection-options.html#option_general_protocol)命令选项。下表显示了允许的值[`- 协议`](connection-options.html#option_general_protocol)并指出每个值的适用平台。这些值不区分大小写。

| [`- 协议`](connection-options.html#option_general_protocol)价值 | 使用的传输协议 | 适用平台 |
| ----------------------------------------------------------- | ------- | ---- |
| `TCP` | TCP/IP | 全部 |
| `插座` | Unix 套接字文件 | Unix和类Unix系统 |
| `管道` | 命名管道 | 视窗 |
| `记忆` | 共享内存 | 视窗 |

#### 本地和远程连接的传输支持

TCP/IP 传输支持与本地或远程 MySQL 服务器的连接。

套接字文件、命名管道和共享内存传输仅支持与本地 MySQL 服务器的连接。（命名管道传输确实允许远程连接，但这个功能在 MySQL 中没有实现。）

#### 本地主机的解释

如果没有明确指定传输协议，`本地主机`解释如下：

-   在 Unix 和类 Unix 系统上，连接到`本地主机`导致套接字文件连接。

-   否则，连接到`本地主机`导致 TCP/IP 连接到`127.0.0.1`.

    如果明确指定了传输协议，`本地主机`根据该协议进行解释。例如，与[`--协议=TCP`](connection-options.html#option_general_protocol), 一个连接到`本地主机`导致 TCP/IP 连接到`127.0.0.1`在所有平台上。

#### 加密和安全特性

TCP/IP 和套接字文件传输受 TLS/SSL 加密，使用中描述的选项[加密连接的命令选项](connection-options.html#encrypted-connection-options).命名管道和共享内存传输不受 TLS/SSL 加密的约束。

如果通过默认安全的传输协议建立连接，则默认情况下连接是安全的。否则，对于受 TLS/SSL 加密的协议，可以使用加密使连接变得安全：

-   默认情况下 TCP/IP 连接不安全，但可以对其进行加密以使其安全。

-   默认情况下，套接字文件连接是安全的。它们也可以被加密，但加密套接字文件连接会使其不再安全并增加 CPU 负载。

-   默认情况下，命名管道连接不安全，并且不受加密以使其安全。然而[`named_pipe_full_access_group`](server-system-variables.html#sysvar_named_pipe_full_access_group)系统变量可用于控制允许哪些 MySQL 用户使用命名管道连接。

-   默认情况下，共享内存连接是安全的。

    如果[`require_secure_transport`](server-system-variables.html#sysvar_require_secure_transport)启用系统变量时，服务器只允许使用某种形式的安全传输的连接。根据前面的说明，使用使用 TLS/SSL 加密的 TCP/IP、套接字文件或共享内存的连接是安全连接。未使用 TLS/SSL 加密的 TCP/IP 连接和命名管道连接是不安全的。

    也可以看看[将加密连接配置为强制](using-encrypted-connections.html#mandatory-encrypted-connections).

#### 连接压缩

所有传输协议都需要对客户端和服务器之间的流量进行压缩。如果对给定连接同时使用压缩和加密，则在加密之前进行压缩。有关详细信息，请参阅[第 4.2.8 节，“连接压缩控制”](connection-compression-control.html).
