• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 设置复制以使用加密的连接

    要使用加密连接传输复制期间所需的二进制日志,主服务器和从服务器都必须支持加密的网络连接。如果任一服务器不支持加密连接(因为尚未为其编译或配置),则无法通过加密连接进行复制。

    设置用于复制的加密连接与为客户端/服务器连接进行设置相似。您必须获得(或创建)可以在主服务器上使用的合适的安全证书,并在每个从服务器上获得相似的证书(来自相同的证书颁发机构)。您还必须获取合适的密钥文件。

    有关为加密连接设置服务器和客户端的更多信息,请参见“配置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 MASTER TO语句。您可以在从属文件的[client]部分中命名加密连接所需的从属证书和SSL私钥my.cnf文件,也可以使用该CHANGE MASTER TO语句显式指定该信息。有关该CHANGE MASTER TO语句的更多信息,请参见“ALTER TABLE语句”。

    • 要使用选项文件命名从属证书和密钥文件,请将以下行添加到[client]从属my.cnf文件的部分,并根据需要更改文件名:

      [client]
      ssl-ca=cacert.pem
      ssl-cert=client-cert.pem
      ssl-key=client-key.pem
      
    • 使用该--skip-slave-start选项重新启动从服务器,以防止从服务器连接到主服务器。使用CHANGE MASTER TO指定的主配置,并添加MASTER_SSL选项,使用加密连接:

      mysql> CHANGE MASTER TO
      -> MASTER_HOST='master_hostname',
      -> MASTER_USER='repl',
      -> MASTER_PASSWORD='password',
      -> MASTER_SSL=1;
      

      设置MASTER_SSL=1复制连接,然后再不设置其他选项,与客户端的设置相对应,如“加密连接的命令选项”中所述。使用,只有在可以建立加密连接的情况下,连接尝试才会成功。复制连接不会退回到未加密的连接,因此没有与复制设置相对应的设置。如果设置为,则对应于。MASTER_SSL_xxx--ssl-mode=REQUIREDMASTER_SSL=1--ssl-mode=PREFERREDMASTER_SSL=0--ssl-mode=DISABLED

    • 要使用该CHANGE MASTER TO语句命名从属证书和SSL私钥文件,如果未在从属my.cnf文件中执行此操作,请添加适当的选项: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',
      

      这些选项与具有相同名称的选项相对应,如“加密连接的命令选项”中所述。为了使这些选项生效,还必须进行设置。对于复制连接,为或指定一个值,或在从属文件中指定这些选项,都与setting相对应。仅当使用指定的信息找到有效的匹配证书颁发机构(CA)证书时,连接尝试才会成功。--ssl-xxxMASTER_SSL=1 MASTER_SSL_CAMASTER_SSL_CAPATHmy.cnf--ssl-mode=VERIFY_CA

    • 要激活主机名身份验证,请添加以下MASTER_SSL_VERIFY_SERVER_CERT选项:

      -> MASTER_SSL_VERIFY_SERVER_CERT=1,
      

      该选项与该选项相对应,该--ssl-verify-server-cert选项已从MySQL 5.7中弃用,并在MySQL 8.0中删除。对于复制连接,指定MASTER_SSL_VERIFY_SERVER_CERT=1对应于设置--ssl-mode=VERIFY_IDENTITY,如“加密连接的命令选项”中所述。为了使该选项生效,MASTER_SSL=1还必须进行设置。主机名身份验证不适用于自签名证书。

    • 要激活证书吊销列表(CRL)检查,请添加MASTER_SSL_CRLMASTER_SSL_CRLPATH选项:

      -> MASTER_SSL_CRL = 'crl_file_name',
      -> MASTER_SSL_CRLPATH = 'crl_directory_name',
      

      这些选项与具有相同名称的选项相对应,如“加密连接的命令选项”中所述。如果未指定,则不会进行CRL检查。--ssl-xxx

    • 要指定密码,密码组,并从该复制连接允许的加密协议列表,使用MASTER_SSL_CIPHERMASTER_TLS_VERSIONMASTER_TLS_CIPHERSUITES选项:

      -> MASTER_SSL_CIPHER = 'cipher_list',
      -> MASTER_TLS_VERSION = 'protocol_list',
      -> MASTER_TLS_CIPHERSUITES = 'ciphersuite_list',
      
      • MASTER_SSL_CIPHER选项指定由从服务器允许用于复制连接的一个或多个密码的冒号分隔列表。
      • MASTER_TLS_VERSION选项指定从tls_version服务器允许用于复制连接的TLS加密协议的逗号分隔列表,格式类似于服务器系统变量。连接过程协商使用主服务器和从服务器都允许的最高TLS版本。为了能够连接,从站必须与主站至少具有一个相同的TLS版本。
      • MASTER_TLS_CIPHERSUITES选项(可从MySQL 8.0.19获得)指定冒号分隔的一个或多个密码套件列表,如果将TLSv1.3用于连接,则从服务器允许该密码套件进行复制连接。如果将此选项设置为NULL使用TLSv1.3时(如果未设置此选项,则为默认设置),则允许默认启用的密码套件。如果将选项设置为空字符串,则不允许使用密码套件,因此将不使用TLSv1.3。

      您可以在这些列表中指定的协议,密码和密码套件取决于用于编译MySQL的SSL库。有关格式,允许的值以及未指定选项的默认值的信息,请参见“加密的连接TLS协议和密码”。

      注意

      在MySQL 8.0.16到8.0.18中,MySQL支持TLSv1.3,但该MASTER_TLS_CIPHERSUITES选项不可用。在这些版本中,如果将TLSv1.3用于复制主服务器和从属服务器之间的连接,则复制主服务器必须允许使用至少一个默认启用的TLSv1.3密码套件。从MySQL 8.0.19开始,您可以使用该选项指定密码套件的任何选择,如果需要的话,仅包括非默认密码套件。

    • 更新主信息后,启动从属复制过程:

      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;