19.3.1 设置复制使用加密连接
为了在复制过程中使用加密连接传输二进制日志,源服务器和副本服务器都必须支持加密网络连接。如果任何服务器不支持加密连接(因为它没有被编译或配置为支持加密连接),那么通过加密连接的复制是不可行的。
为复制设置加密连接类似于为客户端/服务器连接设置加密连接。你需要获得或创建适合的安全证书,并在源服务器和每个副本服务器上使用相同的证书(来自同一个证书颁发机构)。你还需要获得适合的密钥文件。
关于为服务器和客户端设置加密连接的更多信息,请见第8.3.1节,“Configuring MySQL to Use Encrypted Connections”。
要在源服务器上启用加密连接,你需要创建或获得适合的证书和密钥文件,然后将以下配置参数添加到源服务器的[mysqld]
部分的my.cnf
文件中,根据需要更改文件名:
[mysqld]
ssl_ca=cacert.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem
文件路径可以是相对的或绝对的;我们建议总是使用完整路径以此目的。
配置参数如下:
-
ssl_ca
:证书颁发机构(CA)证书文件的路径名。(ssl_capath
类似,但指定证书文件目录的路径名。) -
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',
这些选项对应于Command Options for Encrypted Connections中的同名选项。为这些选项生效,必须设置
SOURCE_SSL=1
。对于复制连接,指定SOURCE_SSL_CA
或SOURCE_SSL_CAPATH
的值对应于设置--ssl-mode=VERIFY_CA
。连接尝试成功只有在找到使用指定信息的有效匹配证书颁发机构证书时。 -
要激活主机名称身份验证,请添加以下代码:
-> SOURCE_SSL_VERIFY_SERVER_CERT=1,
对于复制连接,指定
SOURCE_SSL_VERIFY_SERVER_CERT=1
对应于设置--ssl-mode=VERIFY_IDENTITY
,如加密连接选项中所述。为使该选项生效,必须同时设置SOURCE_SSL=1
。主机名称身份验证不支持自签名证书。 -
要激活证书撤销列表(CRL)检查,请添加以下代码:
-> SOURCE_SSL_CRL = 'crl_file_name', -> SOURCE_SSL_CRLPATH = 'crl_directory_name',
这些选项对应于加密连接选项中的
--ssl-
选项。如不指定,則不进行CRL检查。xxx
-
要指定复制连接中允许的加密算法、加密套件和加密协议列表,请使用以下代码:
-> SOURCE_SSL_CIPHER = 'cipher_list', -> SOURCE_TLS_VERSION = 'protocol_list', -> SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list',
-
使用
SOURCE_SSL_CIPHER
、SOURCE_TLS_VERSION
和SOURCE_TLS_CIPHERSUITES
选项,如下所示: -
SOURCE_SSL_CIPHER
选项指定复制连接中允许的加密算法列表。 -
SOURCE_TLS_VERSION
选项指定复制连接中允许的TLS加密协议列表,以tls_version
服务器系统变量的格式指定。连接过程将选择双方都允许的最高TLS版本。要连接,复制服务器必须至少与源服务器共享一个TLS版本。
SOURCE_TLS_CIPHERSUITES
选项指定复制连接中允许的加密套件列表,如果使用TLSv1.3连接。如设置为NULL
,则使用默认启用的加密套件。如果设置为空字符串,则不允许任何加密套件,TLSv1.3因此不被使用。Note在这些列表中,您可以指定的加密协议、加密算法和加密套件取决于MySQL编译时使用的SSL库。有关格式、允许值和默认值的信息,请见第8.3.2节,“加密连接TLS协议和加密”。
-
-
在源信息更新后,启动复制过程于复制服务器,如下所示:
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;