1. 程式人生 > >MySQL數據庫服務主從復制

MySQL數據庫服務主從復制

讀取 測試 images 位置 可用 .info 導致 my.cnf src

隨著訪問量的不斷增加,單臺MySQL數據庫服務器壓力不斷的增加,需要對MySQL進行優化和架構改造,如果MySQL優化不能明顯改善,可以使用高可用,主從復制,讀寫分離,拆分庫,拆分表等方法來進行優化. MySQL主從復制的目的是實現數據冗余備份,將master數據庫數據定時同時到slave庫中,一旦master數據庫宕機,可以將Web應用數據庫配置快速切換至slave數據庫,確保Web應用有較高的高可用率.

一、什麽是主從復制?**

主從復制,是用來建立一個和主數據庫完全一樣的數據庫環境,稱為從數據庫;主數據庫一般是準實時的業務數據庫。

二、主從復制的作用

1、做數據的熱備,作為後備數據庫,主數據庫服務器故障後,可切換到從數據庫繼續工作,避免數據丟失。
2、架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁盤I/O訪問的頻率,提高單個機器的I/O性能。
3、讀寫分離,使數據庫能支撐更大的並發。在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前臺服務。如果前臺使用master,報表使用slave,那麽報表sql將不會造成前臺鎖,保證了前臺速度。

三、主從復制原理

主從復制架構圖
技術分享圖片
mysql主從數據同步是一個異步復制的過程,要實現復制首先需要在master上開啟bin-log日誌功能,bin-log日誌用於記錄在master庫中執行的增,刪,改,查的SQL語句整個過程需要開啟3個線程,分別是master 開啟I/O線程,slave 開啟I/O線程和SQL線程,以下是具體原理:

(1)slava上執行slave start, slave I/O線程會通過在master服務器上創建的授權用戶連接上master,並請求master從指定的文件和位置之後發送bin-log日誌(日誌文件名和位置就是在配罝主從復制服務時執行change master命令指定的);
(2)master服務器接收到來自Slave服務器的I/O線程的請求後,其上負責復制的I/O線程會根據slave服務器的I/O線程請求的信息分批讀取指定bin-log日誌文件指定位置之後的bin-log日誌信息,然後返回給slave端的I/O線程。返回的信息中除了bin-log日誌內容外,還有在Master服務器端記錄的新的Binlog文件名稱以及在新的bin-log中的下一個 指定更新位置
(3)slave服務器I/O線程接收到信息後,將接收到的日誌內容依次添加到slave端的relay-log(中繼日誌)文件(MySQL-relay-bin.xxxxxx)的最末端,並將讀取到的master端的bin-log的文件名和position點記錄到master.info文件中,以便在下一次讀取的時候能告知master從相應的bin-log文件名及最後一個position點開始發起請求;
(4)slave服務器 SQL線程檢測到realy-log中內容有更新,會立刻解析realy-log日誌中的內容,將解析後的SQL語句在slave服務器執行,執行成功後slave庫與master庫保持一致。

四、環境部署

master   192.168.10.1 
    slave    192.168.10.2

1、都要安裝mysql數據庫並配置
yum install -y mariadb
2、修改主、從配置文件 /etc/my.cnf
master:在[mysqld]標簽下加入下面二句
log-bin=mysql-bin
server-id=1

slave:在[mysqld]標簽下加入下面一句
server-id=2
3、修改完成之後重新啟動MySQL
systemctl start mariadb
此時可以看 ll /var/lib/mysql/ 看下是否已經有二進制日誌mysql-bin.000001
技術分享圖片
4、建立復制賬號並授權、授權給slave服務器
grant replication slave on . to ‘test‘@‘192.168.10.2‘ identified by ‘123456‘;
授權時如果想授權任何一個IP都可以登陸,則把IP地址改為 % 號
grant replication slave on . to ‘test‘@‘%‘ identified by ‘123456‘;
flush privileges; --> 刷新權限
授權完成後,在從服務器上登陸測試
mysql -utest -h192.168.122.10 -p123456
5、給master加上鎖,防止有新的數據寫入
flush tables with read lock;
6、查看二進制日誌文件
show master status;
技術分享圖片
7、退出master數據庫,登陸slave數據庫,關閉slave復制線程(默認停止狀態)
stop slave;
8、配置主從關系,,在slave服務器上寫代碼、需要配置連接主服務器的信息,從服務器能不能在主服務器上面獲取二進制日誌,全靠下面的配置信息
change master to master_user=‘test‘,master_password=‘123456‘,master_host=‘192.168.10.1‘,
master_port=3306,master_log_file=‘mysql-bin.000001‘,master_log_pos=245;
9、slave服務器啟動slave線程
start slave;
10、啟動完成之後,再查看slave線程連接主服務器的狀態
show start slave;
下面兩個顯示都為yes算成功了
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

MySQL數據庫服務主從復制