程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 為MySQL設置SSL主從同步

為MySQL設置SSL主從同步

編輯:關於MYSQL數據庫

零、前言

公司准備上線mobile版,但由於PHP版本和主站不一致,所以打算部署到不同的服務器,然後共用同一個MySQL服務器。更不幸的是新服務器和舊服務器處於不同的數據中心,不能直接使用內網連接,所以只能將數據庫的讀寫操作分開——將主站的數據庫同步到Mobile服務器,只執行讀錯做;寫操作直接使用SSL連接到主站。幸好訪問量不是太大,所以同步造成的延遲可以忽略不計。

一、設置SSL

首先是啟用SSL並為其添加證書。進入MySQL命令行界面,輸入以下命令

MySQL> show variables like '%ssl%'; 

如果出現以下結果,則表明SSL沒有開啟,如果Value是NO,則表明沒有安裝SSL模塊,這樣只能再編譯安裝了。

+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+---------------+----------+

主服務器SSL 接著,現在主服務器生成SSL證書,再配置MySQL是SSL生效。首先是用OpenSSL在/etc/MySQL/certs/目錄生成CA、服務器證書和客戶端證書

mkdir -p /etc/mysql/certs && cd /etc/MySQL/certs

#生成CA
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

#生成服務器端證書
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

#生成客戶端證書
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout clIEnt-key.pem > clIEnt-req.pem
openssl x509 -req -in clIEnt-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > clIEnt-cert.pem

主服務器只用到ca-cert.pem、server-cert.pem和server-key.pem。修改my.cnf文件,添加SSL配置

[MySQLd]
#在MySQLd下添加以下
ssl
ssl-ca=/etc/MySQL/newcerts/ca-cert.pem
ssl-cert=/etc/MySQL/newcerts/server-cert.pem
ssl-key=/etc/MySQL/newcerts/server-key.pem

重啟MySQL服務器即可

從服務器SSL

將主服務器生成的ca-cert.pem、client-cert.pem和clIEnt-key.pem 放到從服務器相對應的目錄下,然後修改配置文件my.cnf,在[MySQLd]下添加ssl之後重啟即可。

二、設置同步

設置好SSL連接後,就可以開始配置同步了。

主服務器 首先是創建slave,在MySQL命令行運行以下指令,其中slave_user是從服務器用到的username,slave_ip是從服務器的ip地址

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_ip' IDENTIFIED BY 'slave_passWord' REQUIRE SSL;

接著修改配置,是MySQL開啟bin log,步驟是在my.cnf的[MySQLd]下增加以下語句,然後重啟。注意,server-id在幾個服務器之間必須是唯一的。

server-id               = 1
log_bin                 = /var/log/MySQL/MySQL-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
binlog_do_db            = yourdatabase

然後先將現有的數據庫dump出來,注意一定要加上–master-data=1,這樣可以在不鎖表的情況下知道bin文件和對應的位置。

/usr/local/webserver/mysql/bin/mysqldump  -u root -p -S /tmp/MySQL.sock --databases yourdatabase --master-data=1  > slave-source.sql

數據導出後,用scp將slave-source.sql 復制到從服務器。

從服務器

先創建對應的數據庫,然後導入剛才的數據

/usr/local/webserver/mysql/bin/MySQL -u root -p DBNAME < slave-source.sql

然後,使用以下指令找到slave-source.sql對應主服務器的bin文件及位置 head -n 50 slave-source.sql | grep POS 會得到以下輸出:

CHANGE MASTER TO MASTER\_LOG\_FILE='standby-bin.000072', MASTER\_LOG\_POS=898280714;

記錄下紅色部分,一個是對應的文件,另一個就是位置了。然後就可以在從服務器的MySQL命令行開啟同步了:

CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='slave_user', MASTER_PASSWord='slave_passWord', MASTER_LOG_FILE='standby', MASTER_LOG_POS=898280714, MASTER_SSL=1, MASTER_SSL_CA = '/etc/certs/ca-cert.pem', MASTER_SSL_CERT = '/etc/certs/client-cert.pem', MASTER_SSL_KEY = '/etc/certs/clIEnt-key.pem';

只需注意替換以上命令對象的ip、用戶、密碼、文件、位置即可,還有3個證書的路徑。 完成後,啟用slave即可開啟同步(在MySQL命令行執行)

START SLAVE;

#查看狀態
SHOW SLAVE STATUS \G 

參考: 1. How To Set Up MySQL Database Replication With SSL Encryption On CentOS 5.4

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved