MySQL/MariaDB數據庫基于SSL實現主從復制

前言

備份數據庫是生產環境中的首要任務,重中之重,有時候不得不通過網絡進行數據庫的復制,由于MySQL/MariaDB的主從復制是明文傳送的,如果在生產環境中跨網絡傳送,數據的安全性就無法完全保證,為了解決這一問題,我們需要一種安全的方式進行傳送,即基于SSL加密進行數據傳輸。

部署配置

實驗拓撲

MySQL基于SSL安全復制架構.jpg

實驗環境

系統環境:CentOS6.6

數據庫版本:mariadb-5.5.36

#注意:主從服務器數據庫版本須一致:主從服務器時間須同步
#此實驗從服務器只做一組為例

配置主從復制

安裝mariadb

[root@node1 ~]# mkdir /mydata/data -pv
[root@node1 ~]# groupadd -r mysql
[root@node1 ~]# useradd -g mysql -r mysql
[root@node1 ~]# chown -R mysql.mysql /mydata/data
[root@node1 ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local
[root@node1 ~]# cd /usr/local
[root@node1 local]# ln -sv mariadb-5.5.36-linux-x86_64 mysql
[root@node1 local]# chown -R root.mysql mysql

提供配置及腳本文件

[root@node1 local]# mkdir /etc/mysql
[root@node1 local]# cd mysql
[root@node1 mysql]# cp /support-files/my-large.cnf /etc/mysql/my.cnf
[root@node1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@node1 mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@node1 mysql]# chkconfig --add mysqld
[root@node1 mysql]# chkconfig mysqld on

#主從節點都執行以上操作
#以下為后續工作,可省略
[root@node1 ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@node1 ~]# source /etc/profile.d/mysql.sh
[root@node1 ~]# ln -sv /usr/local/mysql/include  /usr/include/mysql
[root@node1 ~]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

主服務器配置

[root@node1 mysql]# mkdir /mydata/binlogs
[root@node1 mysql]# chown -R mysql.mysql /mydata
[root@node1 mysql]# vim /etc/mysql/my.cnf 

datadir = /mydata/data
log-bin=/mydata/binlogs/master-bin
binlog_format=mixed   #二進制日志格式
server-id       = 1   #主服務器與從服務器不可一致

[root@node1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[root@node1 mysql]# service mysqld start

授權從服務器復制賬號

1.jpg

查看二進制日志位置

2.jpg

從服務器配置

[root@node2 mysql]# mkdir /mydata/relaylogs
[root@node2 mysql]# chown -R mysql.mysql /mydata
[root@node2 mysql]# vim /etc/mysql/my.cnf 

datadir = /mydata/data
#log-bin=mysql-bin
#binlog_format=mixed
#log-slave-updates = 1
#如果從服務器為其他從服務器主服務器須啟用以上三項
server-id       = 2                   #不可與主服務器一致
relay-log=/mydata/relaylogs/relay-bin #中繼日志位置
read_only = 1                         #設置為只讀

[root@node2 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[root@node2 mysql]# service mysqld start

從服務器連接主服務器

3.jpg

查看從服務器狀態

4.jpg

#通過查看從服務器狀態可發現主從已完全同步

主從復制測試

主服務器添加數據

5.jpg

查看從服務器數據及狀態

7.jpg

6.jpg

#與主服務器一致,主從復制配置完成

實現SSL安全傳輸

檢查SSL狀態

8.jpg

配置主服務器為CA

CA配置不做詳細注釋,詳細CA搭建請見前期博文

[root@node1 ~]# cd /etc/pki/CA
[root@node1 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) 
[root@node1 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
[root@node1 CA]# touch {index.txt,serial}
[root@node1 CA]# echo 01 > serial

主服務器生成證書

[root@node1 CA]# mkdir /etc/mysql/ssl
[root@node1 CA]# cd /etc/mysql/ssl
[root@node1 ssl]# (umask 077;openssl genrsa -out master.key 2048)
[root@node1 ssl]# openssl req -new -key master.key -out master.csr
[root@node1 ssl]# openssl ca -in master.csr -out master.crt -days 3650

從服務器生成證書請求

[root@node2 ssl]# (umask 077;openssl genrsa -out slave.key 2048)
[root@node2 ssl]# openssl req -new -key slave.key -out slave.csr

為從服務器簽署證書

[root@node2 ssl]# scp slave.csr node1:/tmp
slave.csr                                          100% 1013     1.0KB/s   00:00  
[root@node1 ssl]# openssl ca -in /tmp/slave.csr -out /tmp/slave.crt -days 3650
[root@node1 ssl]# scp /tmp/slave.crt node2:/etc/mysql/ssl
slave.crt                                          100% 4520     4.4KB/s   00:00

將CA證書拷到各服務器

[root@node1 ssl]# cp /etc/pki/CA/cacert.pem ./
[root@node1 ssl]# scp /etc/pki/CA/cacert.pem node2:/etc/mysql/ssl
cacert.pem                                          100% 1403     1.4KB/s   00:00

修改證書權限

[root@node1 ssl]# chown -R mysql.mysql ./
[root@node1 ssl]# ll
total 20
-rw-r--r-- 1 mysql mysql 1403 Jun 19 14:50 cacert.pem
-rw-r--r-- 1 mysql mysql 4596 Jun 19 14:27 master.crt
-rw-r--r-- 1 mysql mysql 1045 Jun 19 14:24 master.csr
-rw------- 1 mysql mysql 1679 Jun 19 14:22 master.key

#主從服務器都執行以上操作

主從服務器配置SSL

[root@node1 ~]# vim /etc/mysql/my.cnf 

[mysqld]  			            #在此段中添加如下配置
ssl                                         #開啟SSL功能
ssl-ca = /etc/mysql/ssl/cacert.pem          #指定CA文件位置
ssl-cert = /etc/mysql/ssl/master.crt        #指定證書文件位置
ssl-key = /etc/mysql/ssl/master.key         #指定密鑰所在位置

[root@node1 ~]# service mysqld restart

主服務器配置

再次查看SSL狀態

9.jpg

設授權復制用戶只能通過SSL復制

10.jpg

從服務器配置

從服務器登陸測試

11.jpg

由此可見此次連接是基于SSL加密實現的,下面我們開始連接主服務器并開啟復制

12.jpg

查看從服務器狀態

13.jpg

出錯了,Slave_IO_Running狀態為NO說明啟動失敗,找到錯誤如下

14.jpg

解決方法:

#從服務器停止復制
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.01 sec)
#主服務器刷新日志,記錄新位置

15.jpg

#從服務器更新日志文件及位置,重新啟動復制

16.jpg

#狀態都為Yes,問題解決

主從復制測試

主服務器添加數據

17.jpg

從服務器查看數據

18.jpg

The end

MySQL/MariaDB數據庫基于SSL實現主從復制實驗就說到這里了,實驗過程中會遇到一些問題,只要耐心對待,一切都會迎刃而解,朋友們實驗過程如果遇到問題記得留言交流哦。以上僅為個人學習整理,如有錯漏,大神勿噴~~~

原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/5524

(0)
書生書生
上一篇 2015-06-21 11:10
下一篇 2015-06-21 18:52

相關推薦

  • 如何修改linux系統主機名稱及自動登錄圖形化界面

    編輯器:gedit(圖形化編輯器)在圖形界面編輯開機自動登錄圖形化界面(在工作中不能使用)Centos6  第一步:ls /etc/gdm/custom.conf第二步:nano /etc/gdm/custom.conf第三步:[daemon]第四步:AutomaticLoginEnable=trueAutomaticLogin=root第五步:按…

    Linux干貨 2017-07-15
  • Ansible實戰 lnmp 安裝

    網海過客 www.chinasa.net 目錄結構 ├── hosts├── roles│   └── lnmp│             ├── files│             │     &…

    Linux干貨 2016-07-29
  • Linux基礎知識(三)

     本文的主要內容是:  1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。  2、取出最后登錄到當前系統的用戶的相關信息。  3、取出當前系統上被用戶當作其默認shell的最多的那個shell。  4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全…

    Linux干貨 2016-10-03
  • 超級用戶切換普通用戶后如何重置root密碼

    今天在使用su命令切換root用戶和普通用戶使用中不小心改了root密碼,在普通用戶條件下怎么也切換不到root用戶,于是通過搜索和嘗試終于改了root密碼,現以centos7為例總結如下: 1、首先進入開啟菜單,按下e鍵進入編輯模式,找到ro那一行,將ro改為rw,在語言后面加上init=/bin/sh 2、根據提示按下ctrl-x鍵(注意選中x) 3、嘗…

    Linux干貨 2017-03-27
  • Linux磁盤陣列RAID以及mdadm實現軟件RAID

    一、概要 RAID(磁盤陣列):由眾多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果來提升整個磁盤的性能。 二、RAID的級別及其優缺點 讀性能提升 寫性能提升 容錯能力 組合后空間大小 RAID0 上升 上升 無 n*單個磁盤大小 RAID1 上升 下降 有(最多壞一塊磁盤) 1*單個磁盤大小 RAID4 上升 上升 有(…

    2015-04-20
  • linux 學習(2)

    1 linux 常見的文件管理命令都有哪些?其常用的使用方法。 ls 文件列出命令   常見選項  -l 顯示長文本信息          -d 顯示當前目錄信息          -a 顯示所有文件信息     &nb…

    Linux干貨 2016-10-09

評論列表(3條)

  • xiaozhiqi
    xiaozhiqi 2015-11-09 22:55

    哥,我按照你的步驟做,centos7系統,報錯,主從都能啟動SSL。但是啟動start slave同步的時候報錯了,error connecting to master ‘repluser@192.168.1.20:3306’ – retry-time: 60 retries: 86400 message: SSL connection error: SSL_CTX_set_default_verify_paths failed,有看到信息請聯系我,謝謝,我是馬的學生

  • xiaozhiqi
    xiaozhiqi 2015-11-09 23:22

    報錯解決了,centos 7成功基于ssl半同步復制

    • hjqjk
      hjqjk 2015-11-17 19:06

      @xiaozhiqi你好,我也遇到過這個問題,我的系統是centos6.6的,請問你是怎么解決的?

欧美性久久久久