在MySQL的主從複製中,其傳輸過程是明文傳輸,並不能保證資料的安全性,在編譯安裝Mysql時,基本上都會加上一個 --with-openssl這樣的選項,即表示支openssl加密傳輸協議,因此就可以為mysql配置基於ssl加密傳輸啦。
規劃:
Master:
IP地址:172.16.4.111
MySQL版本:5.5.20
作業系統:RHEL5.4
Slave:
IP地址:172.16.4.112
MySQL版本:5.5.20
作業系統:RHEL5.4
由於使用了ssl加密傳輸協議,即意味著,在傳輸之前,主從伺服器是要進行互相認證的,因此要為兩台伺服器準備各自的認證,私密金鑰,以及為其頒發認證的CA的認證,明晰了這些,就先為兩台伺服器準備私密金鑰,認證。這裡需要將Master配置為一台CA伺服器,方便為主從伺服器頒發認證。ps:將伺服器配置為CA伺服器,詳見:Openssl的用法(搭建CA伺服器)
http://www.bkjia.com/Linux/2012-05/60213htm
一、設定主從服務
在172.16.4.111伺服器上
編輯/etc/my.cnf
#vim /etc/my.cnf
將serier_id修改為11
server_id=11 #修改server_id=11
log_bin=mysql-bin #開啟二進位日誌
sync_binlog=1 #任何一個事務提交之後就立即寫入到磁碟中的二進位檔案
innodb_flush_logs_at_trx_commit=1 #任何一個事物提交之後就立即寫入到磁碟中的記錄檔
儲存退出
啟動mysql
#service mysqld start
在172.16.4.112伺服器上
編輯/etc/my.cnf
#vim /etc/my.cnf
server_id=12 #修改server_id=12
#log-bin #注釋掉log-bin,從伺服器不需要二進位日誌,因此將其關閉
relay-log=mysql-relay #定義中繼日誌名,開啟從伺服器中繼日誌
relay-log-index=mysql-relay.index #定義中繼日誌索引名,開啟從伺服器中繼索引
read_only=1 #設定從伺服器只能進行讀操作,不能進行寫操作
儲存退出
啟動mysql
#service mysqld start
二、準備認證,私密金鑰
1、配置Master為CA伺服器
#vim /etc/pki/tls/openssl.cnf
將 dir = ../../CA修改為
dir = /etc/pki/CA
#(umask 077;openssl genrsa 2048 > private/cakey.pem)
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
#mkdir certs crl newcerts
#touch index.txt
#echo 01 > serial
2、為Master上的Mysql準備私密金鑰以及頒發認證
#mkdir /usr/local/mysql/ssl
#cd ssl/
#(umask 077;openssl genrsa 1024 > mysql.key)
#openssl req -new -key mysql.key -out mysql.csr
#openssl ca -in mysql.csr -out mysql.crt
#cp /etc/pki/CA/cacert.pem /usr/local/mysql/ssl/
#chown -R mysql.mysql ssl/
3、為Slave上的Mysql準備私密金鑰以及申請認證
#mkdir /usr/local/mysql/ssl
#cd ssl/
#(umask 077;openssl genrsa 1024 > mysql.key)
#openssl req -new -key mysql.key -out mysql.csr
#scp ./mysql.csr 172.16.4.111:/root
4、在Master上為Slave簽發認證
#cd
#openssl ca -in mysql.csr -out mysql.crt
#scp ./mysql.crt 172.16.4.112:/usr/local/mysql/ssl
#cd /etc/pki/CA
#scp ./cacert.pem 172.16.4.112:/usr/local/mysql/ssl
到此認證以及私密金鑰已經準備好,請確認在Master以及Slave的/usr/local/mysql/ssl目錄下具有以下檔案,以及屬主和屬組:
650) this.width=650;" border=0>
650) this.width=650;" border=0>