原本也是一時興起打算抓包玩,可是沒想到卻在無心之間抓到了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) # 最終驗證發現加密後確實再也不有明文的複製過程的傳送,實現了數據的加密。