1. 程式人生 > >MyCat1.6+Mysql5.7的主從複製+讀寫分離

MyCat1.6+Mysql5.7的主從複製+讀寫分離

1.Mysql的主從複製前提準備工作及注意事項:

a、主DB server和從DB server資料庫的版本一致

b、主DB server和從DB server資料庫資料一致[ 這裡就會可以把主的備份在從上還原,也可以直接將主的資料目錄拷貝到從的相應資料目錄]

c、主DB server開啟二進位制日誌,DB server和從DB serverserver_id都必須唯一

搭建環境:

mysql節點1環境 【我這裡用這臺伺服器作為主節點】

作業系統版本 : centos7

資料庫版本 : mysql-5.7

資料庫名 : db1

表名:app_user_log

ip:192.168.25.142

mysql節點2

環境 【從節點】

作業系統版本 : centos7

資料庫版本 : mysql-5.7

資料庫名 : db1

表名:app_user_log

ip:192.168.25.143

2.Mysql主伺服器配置

第一步:修改my.conf檔案:

[mysqld]段下新增:

#伺服器唯一標示,一般取伺服器的ip

server-id = 142
#啟動MySQL二進位制日誌
log_bin = master-bin
log_bin_index = master-bin.index
#指定記錄二進位制日誌的資料庫
binlog_do_db = db1
#指定不記錄二進位制日誌的資料庫
binlog_ignore_db = mysql

第二步:重啟

mysql服務

service mysqld restart

第三步:建立帳戶並授權slave

mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';

mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';

#一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,加強安全。

重新整理許可權

mysql> FLUSH PRIVILEGES;

檢視mysql現在有哪些使用者

mysql>select user,host from mysql.user;

也可以藉助Navicat來檢視:


第四步:查詢master的狀態

mysql> show master status;


3.Mysql從伺服器配置

第一步:修改my.conf檔案

[mysqld]

server-id=143


第二步:重啟mysql服務,改完配置檔案一定要重啟   service mysqld restart


第三步:配置從伺服器,用root使用者登陸,也可以用Navicat來操作,我這裡就用這個黑框來操作了

mysql>

change master to master_host='192.168.25.142',master_port=3306,master_user='backup',master_password='123456',master_log_file='master-bin.000002',master_log_pos=1571;

注意語句中間不要斷開,master_port為mysql伺服器埠號(無引號)master_user為執行同步操作的資料庫賬戶,“1571”無單引號(此處的1571就是show master status 中看到的position的值,這裡的mysql-bin.000002就是file對應的值),如下圖,即第2裡面的第四步操作的那張圖


第四步:啟動從伺服器複製功能

Mysql>start slave;


第五步:檢查從伺服器複製功能狀態:可以去Navicat來檢視,在143伺服器資料庫上新建一個查詢語句:

show slave status

只需要檢視下面圈起來的這個2個欄位狀態,同時為yes即標識你配置成功!


4.所有配置完成,進行測試:

注意:一定要保證主庫中的表在從庫中存在,並且名字表名要想同!

刪除一條主庫的資料,從庫也會刪除!就不演示了。。。



主從複製配置完成!

5.配置讀寫分離:

<dataNode name="dn1" dataHost="localhost1" database="db1" />

<dataNode name="dn2" dataHost="localhost1" database="db3" />

<dataNode name="dn3" dataHost="localhost2" database="db2" />

<dataHost name="localhost1" maxCon="1000" minCon="10"balance="1"

writeType="0"dbType="mysql" dbDriver="native"switchType="2"  slaveThreshold="100">

<heartbeat>show slave status</heartbeat>

<writeHost host="hostM" url="192.168.25.142:3306" user="root"

password="root">

<readHost host="hostS" url="192.168.25.143:3306" user="root"

password="root" />

</writeHost>

</dataHost>

(1) 設定 balance="1"與writeType="0"

Balance引數設定:

1. balance=“0”, 所有讀操作都發送到當前可用的writeHost上。

2. balance=“1”,所有讀操作都隨機的傳送到readHost。

3. balance=“2”,所有讀操作都隨機的在writeHost、readhost上分發

WriteType引數設定:

1. writeType=“0”, 所有寫操作都發送到可用的writeHost上。

2. writeType=“1”,所有寫操作都隨機的傳送到readHost。

3. writeType=“2”,所有寫操作都隨機的在writeHost、readhost分上發。

 “readHost是從屬於writeHost的,即意味著它從那個writeHost獲取同步資料,因此,當它所屬的writeHost宕機了,則它也不會再參與到讀寫分離中來,即“不工作了”,這是因為此時,它的資料已經“不可靠”了。基於這個考慮,目前mycat 1.3和1.4版本中,若想支援MySQL一主一從的標準配置,並且在主節點宕機的情況下,從節點還能讀取資料,則需要在Mycat裡配置為兩個writeHost並設定banlance=1。”

(2) 設定 switchType="2" 與slaveThreshold="100"

switchType 目前有三種選擇:

-1:表示不自動切換

1 :預設值,自動切換

2 :基於MySQL主從同步的狀態決定是否切換

“Mycat心跳檢查語句配置為 show slave status ,dataHost 上定義兩個新屬性: switchType="2" 與slaveThreshold="100",此時意味著開啟MySQL主從複製狀態繫結的讀寫分離與切換機制。Mycat心跳機制通過檢測 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三個欄位來確定當前主從同步的狀態以及Seconds_Behind_Master主從複製時延。

配置完成!