天天看點

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

一、實驗目标 搭建兩台MySQL伺服器,一台作為主伺服器,一台作為從伺服器,主伺服器進行寫操作,從伺服器進行讀操作。

二、測試環境 主資料庫: CentOS7, MySQL15.1 , 192.168.1.233 從資料庫: CentOS7, MySQL15.1 , 192.168.1.234

三、主從配置步驟

1、確定主資料庫與從資料庫裡的資料一樣 例如:主資料庫裡的a的資料庫裡有b,c,d表,那從資料庫裡的就應該有一個模子刻出來的a的資料庫和b,c,d表

我這裡在兩台MySQL上都建立了個名為“test”的資料庫來測試,如圖:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

2、在主資料庫裡建立一個同步賬号

1)每個從資料庫會使用一個MySQL賬号來連接配接主資料庫,是以我們要在主資料庫裡建立一個賬号,并且該賬号要授予 REPLICATION SLAVE 權限,你可以為每個從資料庫分别建立賬号,當然也可以用同一個!)

2)你可以用原來的賬号不一定要新創賬号,但你應該注意,這個賬号和密碼會被明文存放在master.info檔案中,是以建議單獨創一個隻擁有相關權限的賬号,以減少對其它賬号的危害!)

3)建立新賬号使用“CREATE USER”,給賬号授權使用“GRANT”指令,如果你僅僅為了主從複制建立賬号,隻需要授予REPLICATION SLAVE權限。

4)下面來建立一個賬号,賬号名:repl,密碼:repl123,隻允許192.168.1.的IP段登入,如下:

  1. mysql> CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'repl123';

  2. mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';

5)如果開發防火牆,可能要配置下端口,如下:

  1. firewall-cmd --zone=public --add-port=3306/tcp --permanent

  2. firewall-cmd --reload

3、配置主資料庫

1)要主資料庫,你必須要啟用二進制日志( binary logging),并且建立一個唯一的Server ID,這步驟可能要重新開機MySQL。 2)主伺服器發送變更記錄到從伺服器依賴的是二進制日志,如果沒啟用二進制日志,複制操作不能實作(主庫複制到從庫)。 3)複制組中的每台伺服器都要配置唯一的Server ID,取值範圍是1到 (2 32 )−1,你自己決定取值。 4)配置二進制日志和Server ID,你需要關閉MySQL和編輯my.cnf或者my.ini檔案,在 [mysqld] 節點下添加配置。 5)下面是啟用二進制日志,日志檔案名以“mysql-bin”作為字首,Server ID配置為1,如下:

  1. [mysqld]

  2. log-bin=mysql-bin

  3. server-id=1

  4. #網絡上還有如下配置

  5. #binlog-do-db=mstest //要同步的mstest資料庫,要同步多個資料庫,就多加幾個replicate-db-db=資料庫名 #binlog-ignore-db=mysql //要忽略的資料庫

提示1:如果你不配置server-id或者配置值為0,那麼主伺服器将拒絕所有從伺服器的連接配接。 提示2:在使用InnoDB的事務複制,為了盡可能持久和資料一緻,你應該在my.cnf裡配置innodb_flush_log_at_trx_commit=1 和 sync_binlog=1; For the greatest possible durability and consistency in a replication setup using 

InnoDB

 with transactions, you should use

innodb_flush_log_at_trx_commit=1

 and 

sync_binlog=1

 in the master 

my.cnf

 file. 提示3:確定主伺服器裡的skip-networking選項未啟用,如果網絡被禁用,你的從伺服器将不能與主伺服器通信并且複制失敗。

注意: 實際操作發現 /etc/my.cnf檔案和教材說的不一樣,可能我裝的是MariaDB,如下:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

目測檔案被放到了 /etc/my.cnf.d 目錄裡,如下:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

在 /etc/my.cnf.d/server.cnf 增加相關配置,如下:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

 重新開機MySQL,如圖:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

 檢視主伺服器狀态,mysql> show master status;, 如圖:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

 (注意:記錄好File和Position,後面要用)

4、配置從資料庫

1)從伺服器,同理,要配置設定一個唯一的Server ID,需要關閉MySQL,修改好後再重新開機,如下:

  1. [mysqld]

  2. server-id=2

  3. #可以指定要複制的庫

  4. replicate-do-db = test #

    在master端不指定binlog-do-db,在slave端用replication-do-db來過濾
  5. replicate-ignore-db = mysql #忽略的庫

  6. #網上還有下面配置

  7. #relay-log=mysqld-relay-bin

提示1:如果有多個從伺服器,每個伺服器的server-id不能重複,跟IP一樣是唯一辨別,如果你沒設定server-id或者設定為0,則從伺服器不會連接配接到主伺服器。 提示2:一般你不需要在從伺服器上啟用二進制日志,如果你在從伺服器上啟用二進制日志,那你可用它來做資料備份和崩潰恢複,或者做更複雜的事情(比如這個從伺服器用來當作其它從伺服器的主伺服器)。

2)配置連接配接主伺服器的資訊

  1. mysql> stop slave;

  2. mysql> CHANGE MASTER TO

  3. -> MASTER_HOST='192.168.1.233',

  4. -> MASTER_USER='repl',

  5. -> MASTER_PASSWORD='repl123',

  6. -> MASTER_LOG_FILE='mysql-bin.000002',

  7. -> MASTER_LOG_POS=313;

  8. mysql> start slave;

3)檢視從伺服器狀态

  1. mysql> show slave status \G;

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

5、測試資料同步

測試,連接配接主伺服器 192.168.1.233,添加了表 stu_user, 然後再連接配接上 192.168.1.234,發現也自己同步建立了表 stu_user,如圖:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

然後在主資料庫添加一條記錄,從資料庫也自動添加了記錄,如圖:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

  至此,主從的配置已經完成了, 目前是在從庫裡面配置複制“test”這個庫, 如果要添加其它庫,可以在主伺服器中添加“binlog-do-db”配置,或者在從伺服器中添加“replicate-do-db”配置。

四、讀寫分離實作

主從配置是讀寫分離的前提,現在前提已經配置好了,讀寫分離就看具體項目的實作, 讀寫分離,就是“寫”的操作都在主資料庫,“讀”的操作都在從資料庫!

這裡我選用一個比較輕量的架構SpeedPHP來做讀寫分離示範, 這個架構做讀寫分離非常簡單,按要求在配置檔案填好資訊即可,如圖:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

簡單寫了些增加/删除/查詢的方法,如圖:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)
CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

  頁面效果如下圖:

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

再來看看兩個資料庫,資訊一緻,如圖: 

CentOS7,MySQL主從配置和讀寫分離(MySQL主從、MySQL讀寫分離、MySQL分布式、資料庫讀寫分離、主從配置)

  這個例子中, 讀取賬号清單的是從 192.168.1.234 (從資料庫)上面的資料庫操作的, 添加和删除賬号是從 192.168.1.233 (主資料庫)上面的資料庫操作的, 實作了讀寫分離!

(完)

參考: 官方文檔: https://dev.mysql.com/doc/refman/5.5/en/replication-howto.html 

mysql主從配置(清晰的思路): http://www.cnblogs.com/sustudy/p/4174189.html  MySQL5.6 資料庫主從(Master/Slave)同步安裝與配置詳解: http://blog.csdn.net/xlgen157387/article/details/51331244  MySQL主從架構配置: http://blog.csdn.net/jiangsyace/article/details/50556240 

繼續閱讀