使用Docker部署基于MyCat的MySql

对着背影说爱祢 提交于 2019-12-04 10:05:32

Mysql已经提供了Docker image,可以很方便开启一个mysql服务器。

1. Pull Mysql Image


$ docker pull mysql


前提是已经安装Docker,这个可以参考docker官网,步骤很详细。

2. 创建外部数据挂载点


$ sudo mkdir -p /var/docker/mysql/data_0
$ sudo mkdir -p /var/docker/mysql/data_1
$ sudo mkdir -p /var/docker/mysql/data_2
$ sudo chmod 775 -R /var/docker/mysql/


除了这种方式,也可选择使用Docker数据卷。

3. 启动Mysql容器

通过-e参数可以设定一下Mysql服务端的参数,这里设置了root的密码,并且创建了一个密码为dev的用户dev。
CentOS 下需要加 --privileged=true  ,ubuntu 不需要


$ docker run --privileged=true -p 3307:3306 --name mysql-test0 -v /var/docker/mysql/data_0/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql
$ docker run --privileged=true -p 3308:3306 --name mysql-test1 -v /var/docker/mysql/data_1/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql
$ docker run --privileged=true -p 3309:3306 --name mysql-test2 -v /var/docker/mysql/data_2/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev -d mysql

$ docker ps


4. 在宿主机安装并配置MyCat


     或者创建MyCat镜像,以Docker服务方式启动(参见创建Docker镜像部分)
     下载mycat
wget http://219.238.7.66/files/718600000960CC62/dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
 解压至 /usr/local 目录
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local/
        配置mycat
          主要在/usr/local/mycat/conf/server.xml 和 schema.xml中
               server.xml中,取消掉33-35行的注释
               schema.xml中,其他部分不用修改,dataNode和dataHost部分修改为以下内容,注意IP改为相应主机IP


  <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost2" database="db1" />
    <dataNode name="dn3" dataHost="localhost3" database="db1" />
    <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
     <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
    <dataNode    name="jdbc_dn2" dataHost="jdbchost" database="db2" />
    <dataNode name="jdbc_dn3"     dataHost="jdbchost" database="db3" /> -->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- can have multi write hosts -->
        <writeHost host="hostM1" url="192.168.189.181:3306" user="root" password="root"></writeHost>
    </dataHost>
    <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- can have multi write hosts -->
        <writeHost host="hostM1" url="192.168.189.181:3307" user="root" password="root"></writeHost>
    </dataHost>
    <dataHost name="localhost3" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- can have multi write hosts -->
        <writeHost host="hostM1" url="192.168.189.181:3308" user="root" password="root"></writeHost>
    </dataHost>


5.创建db,创建表

     依次连接三个mysql服务,创建名为db1的数据
     连接mycat服务 注意端口为8066,并执行建表语句
    


create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);


执行插入操作,
执行查询查看是否全部插入


insert into travelrecord(id,user_id,traveldate,fee,days)  values(1,'Victor',20160101,100,10);
insert into travelrecord(id,user_id,traveldate,fee,days)  values(5000001,'Job',20160102,100,10);
insert into travelrecord(id,user_id,traveldate,fee,days)  values(10000001,'Slow',20160103,100,10);
select * from travelrecord;


再依次到各个独立的mysql服务中查询,可以看到每个mysql中都有一个travelrecord表,每个表中都有一条记录,组合起来恰好是mycat的查询结果
CentOS下docker启动mysql的问题
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!