mysql主從複製的簡單示例

一:介紹

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

二:示意圖

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

在Mysql-A的數據庫事件(例如修改數據庫的sql操作語句),都會存儲到日誌系統A中,在相應的端口(默認3306)通過網絡發送給Mysql-B。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很可能就跟不上了。

三:在兩臺centos7虛擬機上安裝mysql,並分別創建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
log_bin=master-bin  //啓動MySQL的bin log二進制日誌,即存放數據同步語句
binlog_do_db=test   //指定需要記錄二進制日誌的數據庫,即需要同步的數據庫名

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

(3)、重啓mysql服務

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

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
relay-log=slave-relay-bin    //啓動mysql的relay log 中繼日誌

(2)、重啓服務器

(3)、連接主服務器

(4)、啓動slave數據同步

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

如果看到紅框裏的兩個yes,則證明主從模式配置成功,下面就可以操作主服務器的數據庫,並查看從服務器中的同名數據庫的變化。

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