基於 SSL 實現MySQL主從複製

一、主服務器配置
1)、在主服務器建立SSL/RSA文件mysql

#在MySQL5.7以後,安裝完畢MySQL會在data目錄下自動生成,這裏模擬沒有這些文件
 [root@mysql ~]# mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data        # 建立一個新的ssl文件

基於 SSL 實現MySQL主從複製

[root@mysql ~]# systemctl restart mysqld    # 重啓服務
#查看mysql錯誤日誌
[root@mysql ~]# tail -20 /usr/local/mysql/data/mysql.err 
#報錯信息顯示是不能得到私鑰

基於 SSL 實現MySQL主從複製

#查詢後發現沒有r權限
[root@mysql ~]# ll  /usr/local/mysql/data/server-key.pem 
-rw------- 1 root root 1679 Jun 17 23:55 /usr/local/mysql/data/server-key.pem
[root@mysql ~]# chmod +r /usr/local/mysql/data/server-key.pem 
[root@mysql ~]# ll  /usr/local/mysql/data/server-key.pem 
-rw-r--r-- 1 root root 1679 Jun 17 23:55 /usr/local/mysql/data/server-key.pem
#重啓服務
[root@mysql ~]# systemctl restart mysqld
#登陸數據庫查看是否支持ssl鏈接了
mysql> show variables like '%ssl%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+
9 rows in set (0.01 sec)
#生成一個複製帳號
mysql> grant replication slave on *.* to 'req'@'192.168.171.%' identified by '123' require ssl;

注:啓用 mysql 支持 ssl 安全鏈接主要用於 mysql 主從複製(局域網能夠非 ssh 鏈接即明文 複製,但 internet 複製建議採用 ssl 鏈接)sql

[root@mysql ~]# cat /etc/my.cnf          # 開啓二進制日誌
[mysqld]
log_bin=mysql-bin
server-id=1
[root@mysql ~]# systemctl restart mysqld      #重啓服務
mysql> show master status ;           # 查看master當前狀態
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

二、從服務器配置數據庫

[root@mysql ~]# cat /etc/my.cnf     # 開啓中繼日誌
[mysqld]
relay_log=relay-bin
relay_log_index=slave-relay-bin
server-id=2          # 注意server-id 要惟一
#主服務器操做,將證書給到從服務器
[root@mysql ~]# cd /usr/local/mysql/data/
[root@mysql data]# scp ca.pem client-cert.pem client-key.pem root@192.168.171.145:/usr/local/mysql/data/
#查看從主服務器上方複製過來的證書
[root@mysql data]# ll ca.pem client-cert.pem client-key.pem 
-rw-r--r-- 1 root root 1107 Jun 18 00:16 ca.pem
-rw-r--r-- 1 root root 1107 Jun 18 00:16 client-cert.pem
-rw------- 1 root root 1679 Jun 18 00:16 client-key.pem
#設置 client-key.pem 的 r 權限
[root@mysql data]# chmod +r client-key.pem 
[root@mysql data]# vim /etc/my.cnf       # 繼續在my.cnf中寫入
ssl-ca=/usr/local/mysql/data/ca.pem
ssl-cert=/usr/local/mysql/data/client-cert.pem
ssl-key=/usr/local/mysql/data/client-key.pem
[root@mysql data]# systemctl restart mysqld      # 重啓服務

查看 mysqld.err 是否有錯誤日誌 ,查看ssl是否被支持
基於 SSL 實現MySQL主從複製
在配置主從複製以前能夠在從 mysql 上用 SSL 鏈接主服務器試試: vim

[root@mysql data]# mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -u bak -p123 -h 192.168.171.135

基於 SSL 實現MySQL主從複製
SSL 測試鏈接成功,而且登入的 SSL 協議是: Cipher in use is DHE-RSA-AES256-SHA 安全

mysql> change master to master_host='192.168.171.135',master_user='bak',master_password='123',master_log_file='mysql-bin.000004',master_log_pos=766,master_ssl=1,master_ssl_ca='/usr/local/mysql/data/ca.pem',master_ssl_cert='/usr/local/mysql/data/client-cert.pem',master_ssl_key='/usr/local/mysql/data/client-key.pem';
mysql> start slave;
mysql> show slave status\G

基於 SSL 實現MySQL主從複製
接下來就能夠在主服務器上寫入數據進行測試了
SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS) 是爲網絡通訊提供安全及數據完整性的一種安全協議。複製默認是明文進行傳輸的,經過 SSL 加密能夠大大提升數據的安全性。服務器

相關文章
相關標籤/搜索