mysql主從複製的簡單配置示例

一:介紹

我們利用主從數據庫來實現讀寫分離,從而用從數據庫來分擔主數據庫的讀壓力,提高數據庫的併發訪問;主數據庫只負責寫操作,從數據庫負責讀操作;從而就會涉及到主數據庫上的數據變動需要同步到從數據庫上。

二:示意圖

1、主從複製的過程介紹

在上面的模型中,Mysql-A就是主服務器,即master,Mysql-B就是從服務器,即slave。

在Mysql-A的數據庫事件(例如修改數據庫的sql操作語句),都會存儲到日誌系統A中,然後Mysql-B會通過網絡獲取日誌系統A中的日誌。Mysql-B獲取到日誌後,寫入本地日誌系統B,然後一條條的將數據庫事件在數據庫Mysql-B中完成,從而完成主從複製。

日誌系統A,是MYSQL的日誌類型中的二進制日誌,也就是專門用來保存修改數據庫表的所有動作,即bin log,注意MYSQL會在執行語句之後,釋放鎖之前,寫入二進制日誌,確保事務安全。

日誌系統B,不是二進制日誌,由於它是從MYSQL-A的二進制日誌複製過來的,並不是自己的數據庫變化產生的,有點接力的感覺,稱爲中繼日誌,即relay log。

通過上面的機制,可以保證Mysql-A和Mysql-B的數據庫數據一致,但是時間上肯定有延遲,即Mysql-B的數據是滯後的。因此,會出現這樣的問題,Mysql-A的數據庫操作是可以併發的執行的,但是Mysql-B只能從relay log中一條一條的讀取執行。若Mysql-A的寫操作很頻繁,Mysql-B很可能就跟不上了。

2、主從複製的詳細過程

(1)Master開啓bin-log功能,binlog日誌文件用於記錄數據庫的增刪改操作。

(2)需要開啓三個線程,Master:I/O線程;Slave:I/O線程,SQL線程。

(3)Slave start;通過I/O線程連接Master,並且請求某個bin-log文件中的position之後的內容。

(4)Master服務器收到Slave I/O線程發過來的日誌請求信息,然後Master I/O線程將bin-log內容、position返回給Slave IO線程。

(5)Slave服務器收到bin-log日誌內容,將bin-log日誌內容寫入到relay-log中繼日誌,創建一個master.info文件,該文件記錄master IP、用戶名、密碼、master bin-log名稱、bin-log position。

(6)Slave已經開啓了sql線程,由sql線程實時監測relay-log日誌內容是否有更新,如果有更新,則解析文件中的sql語句,並在Slave數據庫中執行相同的操作語句。

注:可以通過show slave status \G  來查看具體的中繼日誌路徑以及連接的master的其他信息。

三:主從複製的配置過程

在兩臺centos7虛擬機上安裝mysql,主服務器ip:192.168.216.134,從服務器ip:192.168.216.135,並分別創建test數據庫。

1:主(master)服務器的配置

(1)、修改配置文件my.cnf

[mysqld]
datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小寫不明感,敏感爲
lower_case_table_names=1

server-id=134  //服務器唯一id,可以用ip的最後一個ip段來標識,不重複即可
log_bin=master-bin //啓動bin log二進制日誌,存放數據同步語句;開啓這個配置的數據庫即爲master
binlog_do_db=test   //指定需要記錄二進制日誌的數據庫,即需要同步的數據庫名

(2)、創建用於從(slave)機器從主(master)機器上獲取bin log文件的賬號

wangbo 和 wangbo123是從數據庫連接主數據庫時的用戶名和密碼

192.168.%.%是允許連接該主服務器的從數據庫的ip

(3)、重啓mysql服務

(4)、查看主服務器狀態

File欄的master-bin.000001即爲bin log二進制文件名稱,Position欄的154即爲position;從服務器連接主服務器時需要用到上步驟中創建的用戶名、密碼和此步驟中的這兩個參數。

2:從(slave)服務器的配置

(1)、修改配置文件my.cnf

[mysqld]
datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小寫不明感,敏感爲
lower_case_table_names=1
 
server-id=135    //服務器唯一id,可以使用ip最後一個段,只要不重複即可
relay-log=slave-relay-bin    //啓動relay log中繼日誌,開啓此配置的服務器即爲slave

(2)、重啓服務器

(3)、連接主服務器

master_host即爲主服務器的ip,master_port主服務器port,master_user主服務器創建的賬號,master_password主服務器創建的密碼,master_log_file主服務器的binlog日誌文件名,master_log_pos主服務器binlog日誌文件中的position。

(4)、啓動slave數據同步

start slave後從服務器便開啓I/O線程,去主服務器中獲取bin log日誌中position後的日誌內容;獲取到的日誌存放到從服務器的relay log中,以便從服務器的SQL線程執行日誌中的語句,進行數據的同步。

(5)、查看從服務器狀態

從第一行中的Slave_Io_State:Waiting for master to send event可以看到slave的io線程在等待着master中有數據庫數據更新事件。

紅框裏的兩個yes,分別表示slave的I/O線程和slave的SQL線程都正在運行,則說明主從模式配置成功,下面就可以操作主服務器的數據庫,並查看從服務器中的同名數據庫的變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章