認證準備:
CA認證:
第一步:建立CA私密金鑰
[root@localhost CA]# (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
第二步:產生自簽認證
[root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
————————————————————————————–
mysql準備私密金鑰及認證申請檔案 :
第一步:建立mysql私密金鑰:
[root@localhost ~]# (umask 066;openssl genrsa -out /var/lib/mysql/ssl/mysql.key 2048)
第二步:產生認證申請檔案及發送給CA服務端
[root@localhost ~]# openssl req -new -key /var/lib/mysql/ssl/mysql.key -days 365 -out /var/lib/mysql/ssl/mysql.csr
注意:國家,省 ,公司名稱必須和CA一致
將認證申請檔案發送至CA伺服器
————————————————————————————–
在CA伺服器端頒發認證:
[root@localhost CA]# openssl ca -in /tmp/mysql.csr -out /tmp/mysql.crt -days 365
附上查看認證中的資訊命令:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|subject|serial|dates
————————————————————————————–
將認證發送至mysql伺服器
以及將CA的自簽認證發送至從伺服器
認證準備動作到此結束
基於ssl功能實現主從複製,是主從雙方都需要互相驗證,即從伺服器也要有自己的認證。
所以,按照上述流程,產生slave伺服器的認證
================================================
配置mysql服務端:
在主伺服器端查看關於ssl有關的參數 及 主從複製–主伺服器 的配置項:
MariaDB [(none)]> show variables like ‘%ssl%';
由於ssl功能配置項為全域配置參數,所以 編輯 /etc/my.cnf 檔案 :
由於是用戶端驗證服務端,所以只需要配置 ssl_cert(mysql伺服器端的認證位置)、ssl_key(mysql私密金鑰位置)與ssl_ca(CA認證位置)即可
開啟服務,並檢查:
————————————————————————————–
建立一個基於ssl功能,從伺服器用於複製mysql主伺服器資料庫的最小許可權帳號:
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘slave1'@'10.1.35.25' IDENTIFIED BY ‘passwd' REQUIRE ssl ;
查看binlog位置,並記錄,用於從伺服器配置:
MariaDB [(none)]> SHOW MASTER LOGS;
================================================
從伺服器配置:
編輯 /etc/my.cnf ,由於是從伺服器,所以需要開啟中繼日誌(relay_log),且server_id不應與同一層面的mysql伺服器相同
啟動mysql服務,並檢查:
————————————————————————————–
配置從伺服器,指向主伺服器(這是是全域配置參數,但是不建議寫在設定檔/etc/my.cnf 中,因為如果slave因意外宕機,在為了檢查資料完整性的情況下,再啟動mysql的時候,也會自動啟動複製功能,不利於排查錯誤)
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='10.1.35.1′,MASTER_USER='slave1′,MASTER_PASSWORD='passwd',MASTER_LOG_FILE=' master-log.000025 ‘,MASTER_LOG_POS= 245 , MASTER_SSL =1, MASTER_SSL_CA ='/var/lib/mysql/ssl/cacert.pem', MASTER_SSL_CERT ='/var/lib/mysql/ssl/slave.crt', MASTER_SSL_KEY ='/var/lib/mysql/ssl/slave.key';
MariaDB [(none)]> START SLAVE;
================================================
驗證主從效果:
————————————————————————————–
主伺服器建立資料庫 mydb
————————————————————————————–
從伺服器查看:
================================================
總結:
複製時應該注意的問題:
1、從服務設定為“唯讀”;(雙主模式無需設定)
在從伺服器啟動read_only,但僅對非SUPER許可權的使用者有效;
阻止所有使用者:
mysql> FLUSH TABLES WITH READ LOCK;
2、盡量確保複製時的事務安全
在master節點啟用參數:
sync_binlog = ON #每次事務提交的時候,都立即將二進位日誌時間都重記憶體同步到磁碟中,能確保從伺服器能立即得到事件,而且能保護本機資料安全
如果用到的是InnoDB儲存引擎:
innodb_flush_logs_at_trx_commit=ON #在事務提交時,立即刷寫交易記錄從記憶體到磁碟上
innodb_support_xa=ON #支援分散式交易
#這兩項啟動起來,能在一定程度上確保從伺服器能夠立即得到主伺服器的最新事件
3、從伺服器意外中止時 盡量避免自動啟動複製線程
由於資料是重要的,伺服器能意外終止的時間都是奇異的,所以,終止後不要讓從伺服器自動啟動複製線程,等人工手動排查後才從新開啟複製線程;有可能複製線程複製到一半的時候出現意外,複製線程或許沒有這種功能—–不知道時候需要再次複製上次中斷的事件
4、從節點:設定參數
每一個從伺服器都會儲存一個檔案 relay-log-info,是記錄在主伺服器上複製二進位日誌的位置,以及本地中繼日誌的位置,為避免產生繁忙的IO操作,這些參數都是先儲存在記憶體上的,到一定程度才會同步到磁碟上的, 所以不安全
sync_master_info=ON
sync_relay_log_info=ON
以上兩項為立即刷寫資料從記憶體到磁碟
以上就是本文的全部內容了,希望對大家熟悉mysql主從複製能夠有所協助