要使用加密连接传输复制期间所需的二进制日志,源服务器和副本服务器都必须支持加密网络连接。如果任一服务器不支持加密连接(因为尚未为它们编译或配置),则无法通过加密连接进行复制。
为复制设置加密连接类似于为客户端/服务器连接设置加密连接。您必须获得(或创建)一个可以在源上使用的合适的安全证书,并在每个副本上获得一个类似的证书(来自相同的证书颁发机构)。您还必须获得合适的密钥文件。
有关为加密连接设置服务器和客户端的更多信息,请参阅 第 6.3.1 节,“配置 MySQL 以使用加密连接”。
要在源上启用加密连接,您必须创建或获取合适的证书和密钥文件,然后将以下配置参数添加到源文件[mysqld]
部分
内的源配置my.cnf
,并根据需要更改文件名:
[mysqld]
ssl_ca=cacert.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
文件的路径可以是相对的或绝对的;为此,我们建议您始终使用完整路径。
配置参数如下:
要在副本上启用加密连接,请使用该
CHANGE MASTER TO
语句。
要使用 命名副本的证书和 SSL 私钥文件
CHANGE MASTER TO
,请添加适当的 选项,如下所示:MASTER_SSL_
xxx
-> MASTER_SSL_CA = 'ca_file_name', -> MASTER_SSL_CAPATH = 'ca_directory_name', -> MASTER_SSL_CERT = 'cert_file_name', -> MASTER_SSL_KEY = 'key_file_name',
这些选项对应于 具有相同名称的选项,如 加密连接的命令选项中所述。要使这些选项生效,还必须进行设置。对于复制连接,为或 指定一个值对应于设置 。仅当使用指定信息找到有效的匹配证书颁发机构 (CA) 证书时,连接尝试才会成功。
--ssl-
xxx
MASTER_SSL=1
MASTER_SSL_CA
MASTER_SSL_CAPATH
--ssl-mode=VERIFY_CA
要激活主机名身份验证,请添加
MASTER_SSL_VERIFY_SERVER_CERT
选项:-> MASTER_SSL_VERIFY_SERVER_CERT=1,
此选项对应于从
--ssl-verify-server-cert
MySQL 5.7.11 开始弃用并在 MySQL 8.0 中删除的选项。对于复制连接,指定MASTER_SSL_VERIFY_SERVER_CERT=1
对应于设置--ssl-mode=VERIFY_IDENTITY
,如加密连接的命令选项中所述。要使此选项生效,MASTER_SSL=1
还必须进行设置。主机名身份验证不适用于自签名证书。要激活证书撤销列表 (CRL) 检查,请添加
MASTER_SSL_CRL
或MASTER_SSL_CRLPATH
选项,如下所示:-> MASTER_SSL_CRL = 'crl_file_name', -> MASTER_SSL_CRLPATH = 'crl_directory_name',
这些选项对应于 具有相同名称的选项,如 加密连接的命令选项中所述。如果未指定,则不会进行 CRL 检查。
--ssl-
xxx
要为复制连接指定副本允许的密码和加密协议列表,请添加
MASTER_SSL_CIPHER
和MASTER_TLS_VERSION
选项,如下所示:-> MASTER_SSL_CIPHER = 'cipher_list', -> MASTER_TLS_VERSION = 'protocol_list', -> SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list',
该
MASTER_SSL_CIPHER
选项指定复制连接的副本允许的密码列表,一个或多个密码名称由冒号分隔。该MASTER_TLS_VERSION
选项指定副本允许的用于复制连接的加密协议。格式类似于tls_version
系统变量的格式,具有一个或多个逗号分隔的协议版本。您可以在这些列表中使用的协议和密码取决于用于编译 MySQL 的 SSL 库。有关格式和允许值的信息,请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”。更新源信息后,在副本上启动复制过程,如下所示:
mysql> START SLAVE;
您可以使用该
SHOW SLAVE 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;