Docker搭建Mycat並實現分庫分表

一、簡介

開源的數據庫分庫分表中間件...

更多的介紹能夠去官網:html

http://www.mycat.io/
複製代碼

開始以前要啓動mysql, 這裏就不贅述了, 能夠參考以前的《Docker實戰及經常使用服務安裝》 mysql

二、構建鏡像

2.一、新建目錄linux

mkdir -p /srv/mycat
mkdir -p /usr/local/mycat
複製代碼

2.二、下載mycat安裝包sql

cd /srv/mycat
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
mv Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz mycat.tar.gz
複製代碼

2.三、解壓文件,複製配置文件docker

tar -zxvf mycat.tar.gz
cp -r /srv/mycat/conf/ /usr/local/mycat/conf/
複製代碼

2.四、建立Dockerfile數據庫

cd /srv/mycat
vim Dockerfile
複製代碼

Dockerfile 文件內容vim

FROM openjdk:8
ADD mycat.tar.gz /usr/local/
VOLUME /usr/local/mycat/conf
ENV MYCAT_HOME=/usr/local/mycat
EXPOSE 8066 9066
CMD ["/usr/local/mycat/bin/mycat", "console","&"]

複製代碼

2.五、建立mycat鏡像bash

Dockerfile所在目錄下執行服務器

docker build -t mycat-1.6 .
複製代碼

構建過程可能須要一些時間, 若是以前沒有jdk8的鏡像它會爲咱們自動下載學習

構建完成以後能夠經過docker images 進行查看

2.六、修改mycat配置文件

以前已經將配置文件都copy到咱們新建的目錄

cd /usr/local/mycat/conf
ls
複製代碼

mycat 主要的應該就是配置文件的配置了,主要如下三個須要熟悉。

  • server.xml是Mycat服務器參數調整和用戶受權的配置文件

  • schema.xml是邏輯庫定義和表以及分片定義的配置文件

  • rule.xml是分片規則的配置文件

  • 配置文件更詳細的介紹能夠百度找找, 別的我也是剛接觸不是很清楚

server.xml 裏面能夠修改root 的密碼,默認是123456,這裏爲了和以前MySQL數據庫一致我就改爲root了

schema.xml:

這裏沒用的我已經都刪除了,配置了3個分片,這樣簡單的一個分庫分表就配置完了

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <!-- auto sharding by id (long) -->
        <table name="user_table" dataNode="dn1" primaryKey="id"/>
        <table name="test_table" dataNode="dn1,dn2,dn3" rule="mod-long" autoIncrement="true" primaryKey="id"/>
        <table name="db_table" dataNode="dn1,dn2,dn3" rule="mod-long" autoIncrement="true" primaryKey="id"/>
    </schema>

    <dataNode name="dn1" dataHost="localhost1" database="db1"/>
    <dataNode name="dn2" dataHost="localhost1" database="db2"/>
    <dataNode name="dn3" dataHost="localhost1" database="db3"/>

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.0.0.131:3307" user="root" password="root">
            <readHost host="hostS1" url="192.0.0.131:3307" user="root" password="root" />
        </writeHost>
    </dataHost>

</mycat:schema>

複製代碼

更多詳細的配置能夠參考:

https://www.cnblogs.com/icebutterfly/p/9505624.html
複製代碼

2.七、建立數據庫和表

我這裏只經過docker啓動了一個數據庫實例, 因此新建三個數據庫

建庫,db一、db二、db3:

CREATE DATABASE IF NOT EXISTS db1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATABASE IF NOT EXISTS db2 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATABASE IF NOT EXISTS db3 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
複製代碼

表test_table:

CREATE TABLE `test_table` (
  `id` smallint(6) NOT NULL,
  `name` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
複製代碼

表user_table:

CREATE TABLE `user_table` (
  `id` smallint(6) NOT NULL,
  `user_name` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
複製代碼

2.八、啓動mycat

docker run --name mycat -p 8066:8066 -p 9066:9066 -v /usr/local/mycat/conf/:/usr/local/mycat/conf -d mycat-1.6
複製代碼

啓動成功以後, 會返回容器id

這裏能夠經過docker logs mycat,進行日誌的查看

docker logs mycat
複製代碼

2.九、測試

可使用Navicat 進行鏈接, ip地址就是服務器的ip,端口是8066, 用戶名密碼都是root

mycat虛擬表:

MySQL數據庫,其中db1有本身單獨的user_table表:

mycat中執行插入語句

INSERT INTO test_table(id, name) VALUES (1, '測試1');
INSERT INTO test_table(id, name) VALUES (2, '測試2');
INSERT INTO test_table(id, name) VALUES (3, '測試3');
INSERT INTO test_table(id, name) VALUES (4, '測試4');
INSERT INTO test_table(id, name) VALUES (5, '測試5');
INSERT INTO test_table(id, name) VALUES (6, '測試6');

INSERT INTO user_table(id, user_name, password) VALUES (1, 'zhangsan', '123456');
INSERT INTO user_table(id, user_name, password) VALUES (2, 'lisi', '123456');
複製代碼

查看3個庫的數據

查看mycat虛擬表數據

修改一條試一下

update test_table set name = '測試修改' where id = 1
複製代碼

沒有問題, 這樣一個簡單的分庫分表就實現了, 僅限於學習, 真正運用到生產要考慮的事情還有不少。

須要注意的是,表的新增、刪除都須要先修改schema.xml,要想在加入讀寫分離的話,能夠參考以前的MySQL主從複製的配置

相關文章
相關標籤/搜索