原本也是一时兴起打算抓包玩,可是没想到却在无心之间抓到了mariadb复制的明文报文。因而乎便到mysql官方文档看看有没有关于数据加密的信息,毕竟复制过程之接明文仍是挺不安全的;在mysql的参考文档中还真找到了加密复制的实现,下面便开始具体的实现流程。node
CA | 192.168.99.131 |
---|---|
Master | 192.168.99.135 |
Slave | 192.168.99.150 |
CA:用来给master和slave节点签发证书
Maser:做为主节点数据库服务器
slave:做为从节点数据库服务器mysql
总体框架图以下:sql
1.自签署CA数据库
#找个目录生成 cd /etc/my.cnf.d/ssl/ openssl genrsa 2048 > cakey.pem openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650
2.生成master节点的私钥和请求文件vim
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
3.生成slave节点的私钥和请求文件安全
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
4.将文件分别复制的对应的节点上服务器
#master #cacert.pem master.crt master.key scp cacert.pem master.crt master.key 192.168.99.135:/etc/my.cnf.d/ssl/ #slave #cacert.pem slave.crt slave.key scp cacert.pem slave.crt slave.key 192.168.99.150:/etc/my.cnf.d/ssl/
5.配置主节点框架
#编辑配置文件 vim /etc/my.cnf.d/server.cnf [mysqld] #数据目录(看我的状况) datadir=/data/mysql #二进制日志文件路径及命名(我的状况) log_bin=/data/binlog/mysql-bin #库表独立文件(看我的爱好,通常推荐分开) innodb_file_per_table #指定编号 server_id=1 #开启ssl功能 ssl # 证书配置信息 ssl-ca=/etc/my.cnf.d/ssl/cacert.pem ssl-cert=/etc/my.cnf.d/ssl/master.crt ssl-key=/etc/my.cnf.d/ssl/master.key
配置完成后启动数据库ide
systemctl start mariadb
进入数据库,受权备份帐号仅容许加密备份查看当前的二进制日志信息ui
mysql MariaDB [(none)]> grant replication slave on *.* to slave@'192.168.99.150' identified by 'slave' require ssl; MariaDB [(none)]>show master status;
6.配置从节点
# 编辑配置文件 vim /etc/my.cnf.d/server.cnf [mysqld] datadir=/data/mysql log_bin=/data/binlog/mysql-bin innodb_file_per_table # 下面是重点 # server-id惟一不能重复,其余配置与主相似 server_id=2 ssl ssl-ca=/etc/my.cnf.d/ssl/cacert.pem ssl-cert=/etc/my.cnf.d/ssl/slave.crt ssl-key=/etc/my.cnf.d/ssl/slave.key
启动数据库
systemctl start mariadb
进入数据库设置主库指向
mysql change master to \ master_host='192.168.99.135', master_user='slave', master_password='slave', master_log_file='mysql-bin.000003', master_log_pos=553, master_ssl=1;
7.启动备份,并查看备份状态
MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status;
8.检验是否实现加密
#在主数据库进行操做,同时进行抓包检测 MariaDB [(none)]> create database db1; Query OK, 1 row affected (0.03 sec) MariaDB [(none)]> create database db2; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> create database db3; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> create database db4; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> create database db5; Query OK, 1 row affected (0.00 sec) # 最终验证发现加密后确实再也不有明文的复制过程的传送,实现了数据的加密。