Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Setting Up Replication to Use Encrypted Connections

19.3.1 设置使用加密连接的复制

要使用加密连接来传输复制所需的二进制日志,源服务器和副本服务器都必须支持加密网络连接。如果任何一台服务器不支持加密连接(因为它没有编译或配置加密连接),那么通过加密连接的复制是不可能的。

设置复制的加密连接与设置客户端/服务器连接的加密连接类似。你需要获取(或创建)一个适合源服务器的安全证书,以及来自同一证书颁发机构的每个副本服务器的相似证书。你还需要获取适合的密钥文件。

有关设置服务器和客户端以使用加密连接的更多信息,请参阅 第 8.3.1 节,“配置 MySQL 以使用加密连接”

要在源服务器上启用加密连接,你需要创建或获取适合的证书和密钥文件,然后将以下配置参数添加到源服务器的 [mysqld] 部分的 my.cnf 文件中,根据需要更改文件名:

[mysqld]
ssl_ca=cacert.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem

文件路径可以是相对的或绝对的;我们建议您总是使用完整路径来实现这个目的。

配置参数如下:

  • ssl_ca:证书颁发机构(CA)证书文件的路径名。(ssl_capath 类似,但指定了 CA 证书文件目录的路径名。)

  • ssl_cert:服务器公钥证书文件的路径名。该证书可以发送给客户端,并与客户端拥有的 CA 证书进行身份验证。

  • ssl_key:服务器私钥文件的路径名。

要在副本服务器上启用加密连接,请使用 CHANGE REPLICATION SOURCE TO 语句。

  • 要使用 CHANGE REPLICATION SOURCE TO 语句命名副本服务器的证书和 SSL 私钥文件,请添加适当的 SOURCE_SSL_xxx 选项,如下所示:

        -> SOURCE_SSL_CA = 'ca_file_name',
        -> SOURCE_SSL_CAPATH = 'ca_directory_name',
        -> SOURCE_SSL_CERT = 'cert_file_name',
        -> SOURCE_SSL_KEY = 'key_file_name',

    这些选项对应于具有相同名称的 --ssl-xxx 选项,如 命令选项以加密连接 中所述。为了使这些选项生效,SOURCE_SSL=1 也必须被设置。

  • 要激活主机名身份验证,请添加 SOURCE_SSL_VERIFY_SERVER_CERT 选项,如下所示:

        -> SOURCE_SSL_VERIFY_SERVER_CERT=1,

    对于复制连接,指定 SOURCE_SSL_VERIFY_SERVER_CERT=1 对应于设置 --ssl-mode=VERIFY_IDENTITY,如 命令选项以加密连接 中所述。为了使该选项生效,SOURCE_SSL=1 也必须被设置。主机名身份验证不适用于自签名证书。

  • 要激活证书撤销列表(CRL)检查,请添加 SOURCE_SSL_CRLSOURCE_SSL_CRLPATH 选项,如下所示:

        -> SOURCE_SSL_CRL = 'crl_file_name',
        -> SOURCE_SSL_CRLPATH = 'crl_directory_name',

    这些选项对应于具有相同名称的 --ssl-xxx 选项,如 命令选项以加密连接 中所述。如果它们没有被指定,则不进行 CRL 检查。

  • 要指定副本服务器允许的加密连接的密码、密码套件和加密协议,请使用 SOURCE_SSL_CIPHERSOURCE_TLS_VERSIONSOURCE_TLS_CIPHERSUITES 选项,如下所示:

        -> SOURCE_SSL_CIPHER = 'cipher_list',
        -> SOURCE_TLS_VERSION = 'protocol_list',
        -> SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list',
    • SOURCE_SSL_CIPHER 选项指定了副本服务器允许的加密连接的密码列表,使用冒号分隔。

    • SOURCE_TLS_VERSION 选项指定了复制连接允许的 TLS 加密协议的逗号分隔列表,格式与 tls_version 服务器系统变量相同。连接过程将协商使用最高的 TLS 版本,该版本同时被源和复制服务器所允许。为了能够连接,复制服务器必须与源至少有一个共同的 TLS 版本。

    • SOURCE_TLS_CIPHERSUITES 选项指定了一个或多个以冒号分隔的加密套件列表,该列表是复制连接允许的,如果使用 TLSv1.3 连接。如果在使用 TLSv1.3 时将该选项设置为 NULL(默认情况下,如果您不设置该选项),则允许默认启用的加密套件。如果您将该选项设置为空字符串,则不允许任何加密套件,从而不使用 TLSv1.3。

    您在这些列表中指定的协议、加密算法和加密套件取决于编译 MySQL 的 SSL 库。有关格式、允许的值和默认值的信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和加密算法”

    Note

    您可以使用 SOURCE_TLS_CIPHERSUITES 选项指定任何选择的加密套件,包括仅非默认加密套件,如果您想这样做。

  • 更新源信息后,在复制服务器上启动复制过程,如下所示:

    mysql> START REPLICA;

    您可以使用 SHOW REPLICA STATUS 语句确认加密连接是否成功建立。

  • 在复制服务器上要求加密连接并不确保源要求从复制服务器连接使用加密连接。如果您想确保源仅接受使用加密连接的复制服务器,请在源上创建一个复制用户账户,使用 REQUIRE SSL 选项,然后授予该用户 REPLICATION SLAVE 权限。例如:

    mysql> CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password'
        -> REQUIRE SSL;
    mysql> GRANT REPLICATION SLAVE ON *.*
        -> TO 'repl'@'%.example.com';

    如果您已经在源上有一个现有的复制用户账户,您可以使用以下语句将 REQUIRE SSL 添加到该账户中:

    mysql> ALTER USER 'repl'@'%.example.com' REQUIRE SSL;