程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> linux系統中使用openssl實現mysql主從復制,opensslmysql

linux系統中使用openssl實現mysql主從復制,opensslmysql

編輯:MySQL綜合教程

linux系統中使用openssl實現mysql主從復制,opensslmysql


        證書准備:

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主從復制能夠有所幫助

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