MySQL-主从ssl复制

默认情况下MySQL的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,如果主从复制全部发生在内网环境中,倒也没有大碍,不过一旦通过外网来访问数据或者复制,存在很大的安全隐患。这时可以通过SSL/TLS加密的方式进行复制的方法,可以提高数据通信的安全性。实现此功能的过程倒也简单,可以参照下面的示例进行。

环境准备

  1. 准备三台主机,一台用作CA,一台作为主服务器master,一台作为从服务器slave。
  2. 配置的三台主机的IP分别为:192.168.11.10,192.168.11.11,192.168.11.12
  3. 在两台服务器上安装MySQL,并通过下面的MySQL语句确认have_openssl功能是否安装,如果返回的have_openssl的值为NO,则说明没有此功能,需要重新编译以包含此功能,或通过其他安装方法来安装MySQL。
show variables like '%ssl%';

配置CA服务器并颁发证书

  1. 创建证书存放路径,可以自定义此目录。
  2. 生成CA证书
  3. CA自认证
  4. 给两台主机颁发证书
  5. 将对应文件复制到两台主机
    具体命令如下:
mkdir /etc/my.cnf.d/ssl
cd !*s

openssl genrsa 2048 > cakey.pem

openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650
根据提示输入相关信息:

openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key >master.csr
openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt
openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key >slave.csr
openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt
颁发了两个证书,注意填写信息的时候和上面填写的一致

scp cacert.pem root@192.168.11.11:/etc/my.cnf.d/ssl
scp master.* root@192.168.11.11:/etc/my.cnf.d/ssl
scp cacert.pem root@192.168.11.12:/etc/my.cnf.d/ssl
scp slave.* root@192.168.11.12:/etc/my.cnf.d/ssl

主服务器配置

在/etc/my.cnf中添加以下信息

ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.key
ssl-cert=/etc/my.cnf.d/ssl/master.cert
ssl-key=/etc/my.cnf.d/ssl/master.key

然后添加一个账号,用来同步且强制要求ssl连接

grant replication slave on *.* to repluser@'192.168.11.%' identified by  'mrhan' require  ssl;

然后执行以下sql语句查看加密是否成功。

show variables like '%ssl%';

从服务器配置

和主服务器一样在/etc/my.cnf中添加以下信息

ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.key
ssl-cert=/etc/my.cnf.d/ssl/master.cert
ssl-key=/etc/my.cnf.d/ssl/master.key

然后执行以下sql语句查看加密是否成功。

show variables like '%ssl%';

然后执行change master to语句开始同步

change master to
master_host = '192.168.11.11',
master_user = 'repluser',
master_password = 'mrhan',
master_port = 3306,
master_log_file = 'mysql-bin.000001',
master_log_pos = 256,
master_connect_retry = 10
master_ssl=1;

然后使用start slave ;开启同步即可。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!