1. 程式人生 > >mySQL主從復制實戰

mySQL主從復制實戰

中小企業 下一個 備份 clas 主從 數據庫 數據庫數據定時同步 pos chang

隨著訪問量的不斷增加,單臺MySQL數據庫服務器壓力不斷增加,需要對MYSQL進行優化和架構改造,MYQSL優化如果不能明顯改善壓力情況,可以使用高可用、主從復制、讀寫分離來、拆分庫、拆分表來進行優化。

MYSQL主從復制集群在中小企業、大型企業中被廣泛使用,MYSQL主從復制的目的是實現數據庫冗余備份,將Master數據庫數據定時同步至Slave庫中,一旦Master數據庫宕機,可以將WEB應用數據庫配置快速切換至Slave數據庫,確保WEB應用較高的可用率,如圖11-12所示,為MYSQL主從復制結構圖:

技術分享圖片

Mysql主從復制集群至少需要2臺數據庫服務器,其中一臺為Master庫,另外一臺為Slave庫,MYSQL主從數據同步是一個異步復制的過程,要實現復制首先需要在master上開啟bin-log日誌功能,bin-log日誌用於記錄在Master庫中執行的增、刪、修改、更新操作的sql語句,整個過程需要開啟3個線程,分別是Master開啟IO線程,Slave開啟IO線程和SQL線程,具體主從同步原理詳解如下:

1)Slave上執行slave start,Slave IO線程會通過在Master創建的授權用戶連接上至Master,並請求master從指定的文件和位置之後發送bin-log日誌內容;

2)Master接收到來自slave IO線程的請求後,master IO線程根據slave發送的指定bin-log日誌position點之後的內容,然後返回給slave的IO線程。

3)返回的信息中除了bin-log日誌內容外,還有master最新的binlog文件名以及在binlog中的下一個指定更新position點;

4)Slave IO線程接收到信息後,將接收到的日誌內容依次添加到Slave端的relay-log文件的最末端,並將讀取到的Master端的 bin-log的文件名和position點記錄到master.info文件中,以便在下一次讀取的時候能告知master從響應的bin-log文件名及最後一個position點開始發起請求;

5)Slave Sql線程檢測到relay-log中內容有更新,會立刻解析relay-log的內容成在Master真實執行時候的那些可執行的SQL語句,將解析的SQL語句並在Slave裏執行,執行成功後,Master庫與Slave庫保持數據一致。

1、系統環境準備

Master:10.6.97.133

Slave:10.6.97.134

2、Master安裝及配置

Master端使用源碼安裝MySQL-5-5版本軟件後,在/etc/my.cnf 配置文件[mysqld]段中加入如下代碼,然後重啟MYSQL服務即可。如果在安裝時cp my-large.cnf /etc/my.cnf,則無需添加如下代碼:

server-id = 1
log-bin = mysql-bin

Master數據庫服務器命令行中 創建tongbu用戶及密碼並設置權限,執行如下命令,查看bin-log文件及position點:

grant  replication  slave  on *.* to  tongbu@%  identified by  123456;
show  master  status;

技術分享圖片

3、Slave安裝及配置

Slave端使用源碼安裝MySQL-5-5版本軟件後,在/etc/my.cnf 配置文件[mysqld]段中加入如下代碼,然後重啟MYSQL服務即可。如果在安裝時cp my-large.cnf /etc/my.cnf,則需修改server-id,MASTER與Slave端server-id不能一樣,Slave端也無需開啟bin-log功能:

server-id = 2

Slave指定Master IP、用戶名、密碼、bin-log文件名(mysql-bin.000028)及position(257):

change master to master_host=10.6.191.183,master_user=tongbu,master_password=123456,master_log_file=mysql-bin.000003,master_log_pos=326;

在slave啟動slave start,並執行show slave status\G查看Mysql主從狀態:

slave  start;
mysql5.7版本為start slave
show  slave  status\G;

查看Slave端IO線程、SQL線程狀態均為YES,代表Slave已正常連接Master實現同步:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

mySQL主從復制實戰