Docker安装Mycat和Mysql进行水平分库分表实战【图文教学】
一、前言
小编最近公司有个新的需求,数据量比较大,要涉及到分库分表。大概了解了一些主流的中间件,使用和网上资料比较多的是Mycat
和sharding-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="http://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条数据
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和Mysql进行水平分库分表实战【图文教学】的更多相关文章
- Mycat安装并实现mysql读写分离,分库分表
Mycat安装并实现mysql读写分离,分库分表 一.安装Mycat 1.1 创建文件夹 1.2 下载 二.mycat具体配置 2.1 server.xml 2.2 schema.xml 2.3 se ...
- Docker安装Mycat并实现mysql读写分离,分库分表
Docker安装Mycat并实现mysql读写分离,分库分表 一.拉取mycat镜像 二.准备挂载的配置文件 2.1 创建文件夹并添加配置文件 2.1.1 server.xml 2.1.2 serve ...
- MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么 ...
- Docker安装MongoDB、MySQL、Jenkins、Gitlab、Nginx
Docker安装MongoDB.MySQL.Jenkins.Gitlab.Nginx 安装MongoDB 1. 拉取镜像 $ sudo docker pull mongo 2. 运行镜像 $ sudo ...
- Mysql中的分库分表
mysql中的分库分表分库:减少并发问题分表:降低了分布式事务分表 1.垂直分表 把其中的不常用的基础信息提取出来,放到一个表中通过id进行关联.降低表的大小来控制性能,但是这种方式没有解决高数据量带 ...
- MySQL纯透明的分库分表技术还没有
MySQL纯透明的分库分表技术还没有 种树人./oneproxy --proxy-address=:3307 --admin-username=admin --admin-password=D033 ...
- mycat+ mysql集群 分库分表
mycat介绍Mycat数据库分库分表中间件国内最活跃的.性能最好的开源数据库中间件!Mycat关键特性关键特性支持SQL92标准支持MySQL.Oracle.DB2.SQL Server.Postg ...
- mycat操作mysql示例之分库
准备工作: 服务器192.168.96.12,centos7, jdk,mysql5.7,mycat1.6.x,navicat 搭建步骤: 1.在服务器192.168.96.12服务器上安装mysql ...
- Docker 安装并使用mysql
上一篇介绍了Docker在CentOS中的安装,本文介绍如何在Docker中安装并使用mysql 1.拉取最新的mysql镜像 [root]# docker pull mysql 2.查看已有镜像 [ ...
随机推荐
- 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
问题描述:在使用python爬取斗鱼直播的数据时,使用str(读取到的字节,编码格式)进行解码时报错:'utf-8' codec can't decode byte 0x8b in position ...
- Android 预置APK
1. 预置apk,使其不可卸载 第一步: 在 "/vendor/huawei/packages/apps" 目录下创建一个对应名称的文件夹. 第二步: 将 ...
- maven安装和配置阿里云镜像(各种详细配置)
maven安装和详细配置 提示:下面是maven3.6.3版本百度云链接,记住maven3.3以上版本必须安装jdk1.7及以上版本,否则会出错. 链接:https://pan.baidu.com/s ...
- FreeSql的各种工程demo上新啦
FreeSql的各种工程demo GitHub | Gitee console,winforms nf461,vb,wpf,webapi,workerSevice,signalIR xamarinFo ...
- python---概述
python的主要应用领域 云计算:云计算的最火的语言,典型应用OpenStack. web开发:众多优秀的web框架,典型地有Django,众多大型网站也是python开发,比如YouTube.豆瓣 ...
- 帝国cms插件 解决后台修改信息时内容关键字不替换的问题
很多站长是不是发现了帝国cms增加信息时,是有关键词替换的,这样是有利于网站优化排名. 但是在后台格式化数据之后,再去进行修改之后,对不起,内容关键字就实效了. 针对这一问题,解决方案如下: 找到 / ...
- [已解决] error: cannot convert `int*' to `int**' for argument `2' to `void print_f(int, int**)'
#include "stdio.h" #include "stdlib.h" #include "time.h" void print_f( ...
- 1903021116—吉琛—Java第七周作业—客户类测试
项目 内容 课程班级博客链接 19信计班 这个作业要求链接 第七周作业链接 博客名称 学号-姓名-Java第七周作业-客户类测试 要求 每道题要有题目,代码(使用插入代码,不会插入代码的自己查资料解决 ...
- 接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock
因为本章的内容是使用jq工具配合完成,因此在开始部分会先花一定的篇幅介绍jq机器使用,如果读者已经熟悉jq,可以直接跳过这部分.先来看应用场景,App 经常会有一些信息展示的列表页,比如商家的菜品.股 ...
- R2DBC正式孵化成功,利好Spring Webflux
2022年4月25日,R2DBC社区宣布具有普遍可用性的1.0.0.RELEASE正式发布. R2DBC致力于为反应式编程 API操作关系型数据库带来规范支持,R2DBC不同于我们熟知的JDBC规范, ...