mysql主从备份并设置SSL加密传输

u17982999733293508249ampfm26ampgp0.jpg

当mysql跨越互联网进行复制时别人可以窃取到mysql的复制信息,这些信息是明文的,因此存在不安全性,这里通过ssl对复制的信息进行加密。当在客户没有固定ip而要访问服务器时,mysql要允许任意地址的访问,服务端和客户端通过证书验证可以防止暴力破解。


安装openssl****一般默认安装

开启mysql中ssl功能,登录Mysql查看,主从服务器都要执行此步骤

MariaDB [solo]> show variables like '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+---------------+----------+

显示DISABLED 是未开启,开启了会显示YES

+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| have_openssl  | YES                           |
| have_ssl      | YES                           |

编辑MYSQL配置文件
vim /etc/my.cnf
在在[mysqld]下加入 ssl

[mysqld]
ssl

保存后重新启动mysql,再次登录mysql

show variables like '%ssl%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| have_openssl  | YES                           |
| have_ssl      | YES                           |

开始步骤

1、创建证书中心

在主服务器上创建证书中心

cd /etc/pki/CA

生成私钥

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

生成自签证书,由于需要输入大量用户信息,因此编辑证书的配置文件,在私有的CA上创建证书要注意所有的用户信息要和CA中的一致,从国家到部门都要相同,否则会造成证书无法使用

vim /etc/pki/tls/openssh.cnf
[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = CN
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = FJ

localityName                    = Locality Name (eg, city)
localityName_default            = XZ

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = skl

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = skl

生成自签证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650

-x509是创建自签证书是需要的参数,在创建其他证书时不能加改参数
由于是自签证书因此要修改证书路径
vim /etc/pki/tls/openssl.cnf

[ CA_defalut ]
 dir = /etc/pki/CA
 certs = $dir/certs   #存放生成证书的目录
 crl_dir = $dir/crl   #存放吊销证书的目录
 database = $dir/index.txt  #证书的索引文件
 new_certs_dir = $dir/newcerts  #新签的证书目录
 serial = $dir/serial  #序列号
 crl = $dir/crl.pem
 private_key = $dir/private/cakey.pem  #证书中心私钥文件

创建证书编号

mkdir certs crl newcerts
 touch index.txt
 echo 00 > serial          #指明证书的开始编号

2、为主服务器创建证书

服务器的名称必须固定,在申请证书时要输入服务器名称,证书和服务器名称对应
创建私钥

mkdir /ssl/            #目录可以自定义
cd /ssl/
(umask 077;openssl genrsa -out /ssl/master.key 2048)

生成证书申请

openssl req -new -key master.key -out master.csr

在证书服务器上对master的证书进行签发

openssl ca -in master.csr -out master.crt -days 365

然后把cacert.pem 文件复制到/ssl/目录下等下会用。
#目录可以自定义

3、为从服务器创建证书

(umask 077;openssl genrsa -out /ssl/slave.key 2048)

生成证书申请

openssl req -new -key slave.key -out slave.csr

在证书服务器上对master的证书进行签发

openssl ca -in slave.csr -out slave.crt -days 365

生成好了之后将cacert.pem,slave.crt,slave.key传至从服务器
/ssl/ 目录下 #目录自定义

4、修改证书权限和mysql配置文件

cd /ssl/
chown -R mysql:mysql master.crt master.key cacert.pem
chmod 600 master.crt master.key cacert.pem
vim /etc/my.cnf   # [mysqld]下添加
log-bin=mysql-bin                        #启用二进制日志
server-id=11                                  # id号自定义
ssl
ssl-ca=/ssl/cacert.pem
ssl-cert=/ssl/master.crt
ssl-key=/ssl/master.key

修改从服务器配置

cd /ssl/
chown -R mysql:mysql slave.crt slave.key cacert.pem
chmod 600 slave.crt slave.key cacert.pem
vim /etc/my.cnf # [mysqld]下添加
log-bin=mysql-bin                        #启用二进制日志
server-id=12                                  # id号自定义
ssl
ssl-ca=/ssl/cacert.pem
ssl-cert=/ssl/slave.crt
ssl-key=/ssl/slave.key

5、在主服务器上授权从服务器

grant replication slave on *.* to user@192.168.00.00 identified by '密码' require  ssl;
flush privileges;     #刷新权限

查看主服务器当前二进制位置

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      873 |              |                  |
+------------------+----------+--------------+------------------+

6、在从服务器上保存授权信息

登录MYSQL

stop slave;     #先关闭slave
change master to
master_user='user',
master_password='密码',
master_host='192.168.00.00',
master_log_file='mysql-bin.000005',
master_log_pos=873,
master_ssl=1,
master_ssl_ca='/ssl/cacert.pem',
master_ssl_cert='/ssl/slave.crt',
master_ssl_key='/ssl/slave.key';
start slave;      #开启slave

从服务器查看状态

show slave status \G;
MariaDB [(none)]> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.00.00
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 873
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 816
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes         #已启用
            Slave_SQL_Running: Yes       #已启用
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 873
              Relay_Log_Space: 1112
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes  #SSL配置成功
           Master_SSL_CA_File: /ssl/cacert.pem
           Master_SSL_CA_Path:
              Master_SSL_Cert: /ssl/slave.crt
            Master_SSL_Cipher:
               Master_SSL_Key: /ssl/slave.key

7,测试主从是否同步

可以在主库 show slave hosts查看有哪些从库节点。

参考文章https://www.jb51.net/article/76851.htm

# mysql 

本文由:星际难民
实践,测试,整理发布.如需转载请注明地址 本文标题:mysql主从备份并设置SSL加密传输
地址:https://530503.xyz/articles/2020/11/24/1606194458801.html

评论

取消