设为首页 加入收藏

TOP

mycat分库分表docker的实现教程(一)
2018-06-25 08:46:50 】 浏览:125
Tags:mycat 分库 docker 实现 教程

实验环境

docker版本:Docker version 1.13.1

mycat版本:Mycat-server-1.6-RELEASE-

jdk版本:jdk1.8

mysql版本:mysql5.7

linux版本:Linux VM_0_12_centos 3.10.0-862.3.2.el7.x86_64 #1 SMP Mon May 21 23:36:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

实验目的

实现mysql分库分表,本示例中将用户的消费记录表(user_consumption_record)分了三个库,对应三张表,三个库分别在不同的节点上,使用mycat做路由。使得对用用户来说,就好像在操作一个表。

用户表(未做分库分表操作),是单表直接放到了其中一个节点上。

实验结果展示

这里写图片描述

构建实验所需的docker镜像

我们所需要的镜像有两个,第一个是mysql 的镜像,第二个是mycat的镜像,mysql 的镜像,docker search 一下可以找到很多可以用的,所以我们这边就不重复去自己构建了,显得麻烦。

下面是我们使用的网上直接找的mysql镜像:

这里写图片描述

下面我们开始构建我们需要的一个含jdk8的mycat1.6的镜像,构建所需的资源如下:

这里写图片描述

下面是构建含jdk8的mycat1.6的镜像的Dockerfile

FROM docker.io/centos
COPY mycat/jdk-8u171-linux-x64.tar.gz /usr/local/
RUN tar -zxvf /usr/local/jdk-8u171-linux-x64.tar.gz -C /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_171
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
COPY mycat/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz  /usr/local/
RUN tar -zxvf /usr/local/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
ENV MYCAT_HOME=/usr/local/mycat

RUN source /etc/profile
RUN source ~/.bash_profile
CMD ["/usr/local/mycat/bin/mycat", "console"]

执行类似下面的命令,就可以生成我们需要的含jdk8的mycat1.6的镜像了(/home/wen 这个是我的当前构建目录)

docker build -t centos-jdk8-mycat1.6 -f Dockerfile  /home/wen/

编写mycat的sechma.xml文件

mycat的server.xml 、rule.xml 都没改过,我这边就不贴出来了,这里面如果有一些标签的意义不理解的,那还是请百度把,本文就不讲解这些标签怎么使用了。


  


  

        
    
    
    
 
select user() select user() select user()

docker-compose文件的编写

docker-compose.yml 其实就是帮我们做了个服务编排,使用起来就很方便了,下面贴出本次实验的服务编排明细:

version: '2'
services:
  mycat:
   image: centos-jdk8-mycat1.6
   networks:
       jznet:
         ipv4_address: 172.18.4.26
   volumes:
     - /root/data/mycat/logs:/usr/local/mycat/logs
     - /home/wen/mycat-test/schema.xml:/usr/local/mycat/conf/schema.xml
   ports:
     - "8066:8066"
     - "9066:9066"
  mysql-01:
   image: docker.io/centos/mysql-57-centos7
   networks:
       jznet:
         ipv4_address: 172.18.4.21
   ports:
     - "3301:3306"
   environment:
     - MYSQL_ROOT_PASSWORD=123456
  mysql-02:
   image: docker.io/centos/mysql-57-centos7
   networks:
       jznet:
         ipv4_address: 172.18.4.22
   ports:
     - "3302:3306"
   environment:
     - MYSQL_ROOT_PASSWORD=123456
  mysql-03:
   image: docker.io/centos/mysql-57-centos7
   networks:
       jznet:
         ipv4_address: 172.18.4.23
   ports:
     - "3303:3306"
   environment:
     - MYSQL_ROOT_PASSWORD=123456
networks:
  jznet:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.18.4.0/26

启动服务

这里写图片描述

启动之后我们发现mycat的日志还是会报错的,报下面的错误:

这里写图片描述

其实这个是由于我们数据的db1、db2、db3、没创建好导致的,我们在各自的数据库将这三个库手动创建好就可以了

这里写图片描述

实验sql

select * from user_consumption_record limit 10;

create table user(id int not null,name varchar(20));
create table user_consumption_record(id int not null PRIMARY key  COMMENT "主键" auto_increment ,goods varchar(20) COMMENT "商品",amount DECIMAL(15,2) COMMENT "金额",finish_time datetime) COMMENT "完成时间";


insert into user_consumption_record(id,goods,amount,finish_time) values(7,'a',1,now());

insert into user_consumption_record(id,goods,amount,finish_time) valu
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇mysql基础学习之外键(foreignkey.. 下一篇Oracle Database 11g在Win8 上的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目