mySQL主從復制實戰
隨著訪問量的不斷增加,單臺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主從復制實戰