MyCat實現資料庫與資料庫之間的讀寫分離
一、Mycat的安裝準備:
1、jdk:要求jdk必須是1.7及以上版本
2、Mysql:推薦mysql是5.5以上版本
3、Mycat:
Mycat的官方網站:
下載地址:
https://github.com/MyCATApache/Mycat-download
Mycat的安裝
Mycat有windows、linux多種版本。本教程為linux安裝步驟,windows基本相同。
第一步:下載Mycat-server-xxxx-linux.tar.gz
第二步:將壓縮包解壓縮。建議將mycat放到/usr/local/mycat目錄下。
第三步:進入mycat目錄,啟動mycat
./mycat start
停止:
./mycat stop
mycat 支援的命令{ console | start | stop | restart | status | dump }
Mycat的預設埠號為:8066
二、Mycat的分片
兩臺mysql資料庫伺服器
Host1:192.168.37.101
Host2:192.168.37.102
host1環境:
作業系統版本:centos6.4
資料庫版本:mysql-5.6
mycat版本::1.4release(發行版)
資料庫名:db1、db3
mysql節點2環境:
作業系統版本 : centos6.4
資料庫版本 : mysql-5.6
mycat版本 :1.4 release
資料庫名 : db2
配置重要檔案Schema.xml
<!-- auto sharding by id (long) --> id自動分片的規則
<table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>
給mycat建立個虛擬的資料庫名mycatName,給mycatName建立指定表名,和db1、db2、db3表名相同才能進行分片
MyCat安裝到節點1上(需要安裝jdk)
select user()
select user()
</mycat:schema>
schema.xml中刪除
,不刪除的話分節的話三張表都會有相3同資料
配置重要檔案Server.xml
123456
mycatName
false
配置重要檔案rule.xml
三、mycat讀寫分離:
主從配置需要注意的地方
1、主DB server和從DB server資料庫的版本一致
2、主DB server和從DB server資料庫資料名稱一致
3、主DB server開啟二進位制日誌,主DB server和從DB server的server_id都必須唯一
1.拷貝my.cnf cp /usr/share/mysql/my-default.cnf /etc/
改名 mv my-default.cnf my.cnf
編輯 vim my.cnf 加入 lower_case_table_names=1 不區分大小寫
重啟mysql service mysql restart
2.主從複製:讀寫,刪除增加一致性
主伺服器配置:(在192.168.37.101上配置)
第一步:更改/etc/my.cnf 檔案
binlog-do-db=db1
binlog-ignore-db=mysql
#啟用二進位制日誌
log-bin=mysql-bin
#伺服器唯一ID,一般取IP最後一段
server-id=134
第二步:重啟mysql服務
service mysql restart
第三步:建立一個使用者
mysql>GRANT FILE ON . TO ‘backup’@’%’ IDENTIFIED BY ‘123456’;
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . to ‘backup’@’%’ identified by ‘123456’;
重新整理許可權
mysql> FLUSH PRIVILEGES;
檢視mysql現在有哪些使用者
mysql>select user,host from mysql.user;
第四步:查詢master的狀態
mysql> show master status;
±-----------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±-----------------±---------±-------------±-----------------±------------------+
| mysql-bin.000001 | 517| db1 | mysql | |
±-----------------±---------±-------------±-----------------±------------------+
1 row in set
從伺服器配置:(在192.168.37.102上配置)
第一步:
在從伺服器Hadoop02上覆制檔案
cp /usr/share/mysql/my-default.cnf /etc/
改名
mv my-default.cnf my.cnf
更改配置vim /etc/my.cnf
server-id=106
第二步:重啟mysql服務
service mysql restart
第三步:配置從伺服器
change master to master_host=‘192.168.37.101’,master_port=3306,master_user=‘backup’,master_password=‘123456’,master_log_file=‘mysql-bin.000001’,master_log_pos=517
注意語句中間不要斷開,master_port為mysql伺服器埠號(無引號),master_user為執行同步操作的資料庫賬戶,“120”無單引號(此處的120就是show master status 中看到的position的值,這裡的 mysql-bin.000001就是file對應的值)。
第四步:啟動從伺服器複製功能
Mysql>start slave;
第五步:檢查從伺服器複製功能狀態:
mysql> show slave status
……………………(省略部分)
Slave_IO_Running: Yes //此狀態必須YES
Slave_SQL_Running: Yes //此狀態必須YES
……………………(省略部分)
注:Slave_IO及Slave_SQL程序必須正常執行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
錯誤處理:
如果出現此錯誤:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
因為是mysql是克隆的系統所以mysql的uuid是一樣的,所以需要修改。
配置mycat實現讀寫分離:
<dataHost name=“localhost1” maxCon=“1000” minCon=“10” balance=“1”
writeType=“0” dbType=“mysql” dbDriver=“native” switchType=“2” slaveThreshold=“100”>
show slave status
<writeHost host=“hostM” url=“192.168.25.101:3306” user="root"password=“root”>
<readHost host=“hostS” url=“192.168.25.102:3306” user="root"password=“root” />