文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  设置复制以使用加密连接

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

要使用加密连接来传输复制过程中所需的二进制日志,源服务器和副本服务器都必须支持加密网络连接。如果任一服务器不支持加密连接(因为没有为其编译或配置加密连接),则无法通过加密连接进行复制。

为复制设置加密连接类似于为客户端/服务器连接设置加密连接。您必须获取(或创建)一个适合的安全性证书,您可以在源服务器上使用它,并且每个副本上都需要一个类似的证书(来自同一个证书颁发机构)。您还必须获取适合的密钥文件。

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

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

[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_CASOURCE_SSL_CAPATH 中的任一选项指定一个值,相当于设置 --ssl-mode=VERIFY_CA。只有在使用指定的 信息找到有效的匹配证书颁发机构 (CA) 证书时,连接尝试才会成功。

  • 要激活主机名身份验证,请添加 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 协议和密码”

    注意

    您可以使用 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;