1. 程式人生 > >MyCat實現資料庫與資料庫之間的讀寫分離

MyCat實現資料庫與資料庫之間的讀寫分離

一、Mycat的安裝準備:

1、jdk:要求jdk必須是1.7及以上版本

2、Mysql:推薦mysql是5.5以上版本

3、Mycat:

Mycat的官方網站:

http://www.mycat.org.cn/

下載地址:

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” />