如何通过图文教程实战安装Docker上的Mycat与MySQL实现数据库水平分库分表?

2026-05-05 21:592阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1875个文字,预计阅读时间需要8分钟。

如何通过图文教程实战安装Docker上的Mycat与MySQL实现数据库水平分库分表?

一、前言最近,我们公司有一个新的需求,数据量比较大,需要涉及到数据库的分库分表。初步了解了主流的中间件,如Mycat和Sharding-JDBC,个人更倾向于使用Mycat。

二、需求分析新的需求数据量较大,需要考虑分库分表。初步了解了主流的中间件,包括Mycat和Sharding-JDBC,个人更倾向于Mycat。

三、原因原因如下:

1.Mycat的使用和网上资料较多,相对更容易上手。

2.个人对Mycat的架构和原理更熟悉,使用起来更得心应手。

一、前言

小编最近公司有个新的需求,数据量比较大,要涉及到分库分表。大概了解了一些主流的中间件,使用和网上资料比较多的是Mycatsharding-jdbc,小编比较倾向于Mycat。原因很简单就是参考的资料比较多,教学比较多,小编经过一天的尝试,终于完成了!这篇主要是实战,一些知识点请自行百度,小编也是没有了解太多,最主要的目的是看一下效果!网上全使用Docker还是不多,而且很迷糊,小编进行补充,让大家少走弯路!!

写在前面:
本次简单的进行分库分表测试,测试分片规则是mod-long,简单的根据id取余分组,实际业务肯定不符合,大家根据业务进行具体规则!!小编的场景是水平的拆分哈,如果不符合你的可以看看使用Docker安装,然后再修改分片策略即可!
小编大部分的命令都是来自于两位大佬的,后面给出链接,大家可以去看一下哈!不过他们省略了一些,我给补充上,能够顺畅的走下去流程!!

二、安装docker网络

因为我们的Mycat和Mysql都是使用docker安装的,容器和容器之间是相互隔离的,这时候需要用到docker网络帮助我们进行两个容器之间的通信!

docker network create -d bridge --ip-range=192.168.1.0/24 --gateway=192.168.1.1 --subnet=192.168.1.0/24 bridge2

这是用的大佬的创建命令,可以去原文看看:原文地址

我们把Mycat和Mysql都是创建出来在进行统一的测试。

三、安装Mycat

1. 创建新目录并解压Mycat

创建一个存放压缩包的命令

mkdir /usr/local/docker

准备好压缩包
链接:百度云地址
提取码:2n1u

tar -zxvf mycat.tar.gz

2. 复制到docker挂载创建目录

cp -r /usr/local/docker/mycat/conf/ /usr/local/mycat/conf/ cp -r /usr/local/docker/mycat/logs/ /usr/local/mycat/logs/

3. 赋予最高权限

chmod 777 /usr/local/mycat/logs

chmod 777 /usr/local/mycat/conf

4. 创建dockerfile文件

touch Dockerfile vi Dockerfile

5. Dockerfile内容

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","&"]



6. 构建Mycat镜像

docker build -t mycat .


7. 运行Mycat镜像

docker run --name mycat -p 8066:8066 -p 9066:9066 -v /usr/local/mycat/conf/:/usr/local/mycat/conf -v /usr/local/mycat/logs:/usr/local/mycat/logs -d --network=bridge2 --ip=192.168.1.8 mycat

四、创建Mysql容器

1. 创建容器内在本地的挂载文件夹

mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf # 给予权限省略了哈

2. 初始化mysql的配置文件*.cnf

touch /usr/local/mysql/conf/my.cnf

3. 启动镜像

docker run -p 3306:3306 --name mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d --network=bridge2 --ip=192.168.1.9 mysql:5.7

4. 本地测试连接


5. 新建三个数据库及其表

# 新建三个库 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;

# 每个库下面新建一个表 drop table test_table; CREATE TABLE `test_table` ( `id` int(6) NOT NULL, `name` varchar(500) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

五、Mycat和Mysql互ping

1. 进入Mycat容器内部

docker exec -it 256 /bin/bash

2. 更新apt-get

apt-get update

3. 下载Ping命令

apt-get install iputils-ping

输入y即可

4. 互ping成功

ping 192.168.1.8


5. 退出容器,以后台形式运行

Ctrl + P + Q

六、修改Mycat配置文件

1. 重要配置

mycat主要的应该就是配置文件的配置了,主要以下三个需要熟悉。
server.xml是Mycat服务器参数调整和用户授权的配置文件
schema.xml是逻辑库定义和表以及分片定义的配置文件
rule.xml是分片规则的配置文件

2. 修改schema.xml

注意mysql的ip地址写你的docker网络指定的ip

<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <!-- auto sharding by id (long) --> <table name="test_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="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.1.9:3306" user="root" password="root"> <!-- can have multi read hosts --> <readHost host="hostS1" url="192.168.1.9:3306" user="root" password="root" /> </writeHost> </dataHost> </mycat:schema>

其他的我们按照默认的

3. 重新启动Mycat

4. 本地测试连接

密码:123456(默认)

5. 新增一个表

drop table test_table; CREATE TABLE `test_table` ( `id` int(6) NOT NULL, `name` varchar(500) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

七、测试

1. 我们在Mycat上添加9条数据

如何通过图文教程实战安装Docker上的Mycat与MySQL实现数据库水平分库分表?

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 test_table(id, name) VALUES (7, '测试7'); INSERT INTO test_table(id, name) VALUES (8, '测试8'); INSERT INTO test_table(id, name) VALUES (9, '测试9');

2. 查询各个库上的数据

八、总结

经过一天的测试和放弃,最终完成了测试,主要是忘记了docker容器之间不能直接通信,卡了半天,还是要感谢两位大佬的文章,让我顺利完成!如果对你有帮助,一键三连走起来哈!谢谢大家!!

docker网络解决参考

mycat测试主流程参考


有缘人才可以看得到的哦!!!

点击访问!小编自己的网站,里面也是有很多好的文章哦!

本文共计1875个文字,预计阅读时间需要8分钟。

如何通过图文教程实战安装Docker上的Mycat与MySQL实现数据库水平分库分表?

一、前言最近,我们公司有一个新的需求,数据量比较大,需要涉及到数据库的分库分表。初步了解了主流的中间件,如Mycat和Sharding-JDBC,个人更倾向于使用Mycat。

二、需求分析新的需求数据量较大,需要考虑分库分表。初步了解了主流的中间件,包括Mycat和Sharding-JDBC,个人更倾向于Mycat。

三、原因原因如下:

1.Mycat的使用和网上资料较多,相对更容易上手。

2.个人对Mycat的架构和原理更熟悉,使用起来更得心应手。

一、前言

小编最近公司有个新的需求,数据量比较大,要涉及到分库分表。大概了解了一些主流的中间件,使用和网上资料比较多的是Mycatsharding-jdbc,小编比较倾向于Mycat。原因很简单就是参考的资料比较多,教学比较多,小编经过一天的尝试,终于完成了!这篇主要是实战,一些知识点请自行百度,小编也是没有了解太多,最主要的目的是看一下效果!网上全使用Docker还是不多,而且很迷糊,小编进行补充,让大家少走弯路!!

写在前面:
本次简单的进行分库分表测试,测试分片规则是mod-long,简单的根据id取余分组,实际业务肯定不符合,大家根据业务进行具体规则!!小编的场景是水平的拆分哈,如果不符合你的可以看看使用Docker安装,然后再修改分片策略即可!
小编大部分的命令都是来自于两位大佬的,后面给出链接,大家可以去看一下哈!不过他们省略了一些,我给补充上,能够顺畅的走下去流程!!

二、安装docker网络

因为我们的Mycat和Mysql都是使用docker安装的,容器和容器之间是相互隔离的,这时候需要用到docker网络帮助我们进行两个容器之间的通信!

docker network create -d bridge --ip-range=192.168.1.0/24 --gateway=192.168.1.1 --subnet=192.168.1.0/24 bridge2

这是用的大佬的创建命令,可以去原文看看:原文地址

我们把Mycat和Mysql都是创建出来在进行统一的测试。

三、安装Mycat

1. 创建新目录并解压Mycat

创建一个存放压缩包的命令

mkdir /usr/local/docker

准备好压缩包
链接:百度云地址
提取码:2n1u

tar -zxvf mycat.tar.gz

2. 复制到docker挂载创建目录

cp -r /usr/local/docker/mycat/conf/ /usr/local/mycat/conf/ cp -r /usr/local/docker/mycat/logs/ /usr/local/mycat/logs/

3. 赋予最高权限

chmod 777 /usr/local/mycat/logs

chmod 777 /usr/local/mycat/conf

4. 创建dockerfile文件

touch Dockerfile vi Dockerfile

5. Dockerfile内容

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","&"]



6. 构建Mycat镜像

docker build -t mycat .


7. 运行Mycat镜像

docker run --name mycat -p 8066:8066 -p 9066:9066 -v /usr/local/mycat/conf/:/usr/local/mycat/conf -v /usr/local/mycat/logs:/usr/local/mycat/logs -d --network=bridge2 --ip=192.168.1.8 mycat

四、创建Mysql容器

1. 创建容器内在本地的挂载文件夹

mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf # 给予权限省略了哈

2. 初始化mysql的配置文件*.cnf

touch /usr/local/mysql/conf/my.cnf

3. 启动镜像

docker run -p 3306:3306 --name mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d --network=bridge2 --ip=192.168.1.9 mysql:5.7

4. 本地测试连接


5. 新建三个数据库及其表

# 新建三个库 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;

# 每个库下面新建一个表 drop table test_table; CREATE TABLE `test_table` ( `id` int(6) NOT NULL, `name` varchar(500) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

五、Mycat和Mysql互ping

1. 进入Mycat容器内部

docker exec -it 256 /bin/bash

2. 更新apt-get

apt-get update

3. 下载Ping命令

apt-get install iputils-ping

输入y即可

4. 互ping成功

ping 192.168.1.8


5. 退出容器,以后台形式运行

Ctrl + P + Q

六、修改Mycat配置文件

1. 重要配置

mycat主要的应该就是配置文件的配置了,主要以下三个需要熟悉。
server.xml是Mycat服务器参数调整和用户授权的配置文件
schema.xml是逻辑库定义和表以及分片定义的配置文件
rule.xml是分片规则的配置文件

2. 修改schema.xml

注意mysql的ip地址写你的docker网络指定的ip

<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <!-- auto sharding by id (long) --> <table name="test_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="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.1.9:3306" user="root" password="root"> <!-- can have multi read hosts --> <readHost host="hostS1" url="192.168.1.9:3306" user="root" password="root" /> </writeHost> </dataHost> </mycat:schema>

其他的我们按照默认的

3. 重新启动Mycat

4. 本地测试连接

密码:123456(默认)

5. 新增一个表

drop table test_table; CREATE TABLE `test_table` ( `id` int(6) NOT NULL, `name` varchar(500) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

七、测试

1. 我们在Mycat上添加9条数据

如何通过图文教程实战安装Docker上的Mycat与MySQL实现数据库水平分库分表?

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 test_table(id, name) VALUES (7, '测试7'); INSERT INTO test_table(id, name) VALUES (8, '测试8'); INSERT INTO test_table(id, name) VALUES (9, '测试9');

2. 查询各个库上的数据

八、总结

经过一天的测试和放弃,最终完成了测试,主要是忘记了docker容器之间不能直接通信,卡了半天,还是要感谢两位大佬的文章,让我顺利完成!如果对你有帮助,一键三连走起来哈!谢谢大家!!

docker网络解决参考

mycat测试主流程参考


有缘人才可以看得到的哦!!!

点击访问!小编自己的网站,里面也是有很多好的文章哦!