一、前言

小编最近公司有个新的需求,数据量比较大,要涉及到分库分表。大概了解了一些主流的中间件,使用和网上资料比较多的是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="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测试主流程参考


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

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

Docker安装Mycat和Mysql进行水平分库分表实战【图文教学】的更多相关文章

  1. Mycat安装并实现mysql读写分离,分库分表

    Mycat安装并实现mysql读写分离,分库分表 一.安装Mycat 1.1 创建文件夹 1.2 下载 二.mycat具体配置 2.1 server.xml 2.2 schema.xml 2.3 se ...

  2. Docker安装Mycat并实现mysql读写分离,分库分表

    Docker安装Mycat并实现mysql读写分离,分库分表 一.拉取mycat镜像 二.准备挂载的配置文件 2.1 创建文件夹并添加配置文件 2.1.1 server.xml 2.1.2 serve ...

  3. MySQL 高可用:mysql+mycat实现数据库分片(分库分表)

    本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么 ...

  4. Docker安装MongoDB、MySQL、Jenkins、Gitlab、Nginx

    Docker安装MongoDB.MySQL.Jenkins.Gitlab.Nginx 安装MongoDB 1. 拉取镜像 $ sudo docker pull mongo 2. 运行镜像 $ sudo ...

  5. Mysql中的分库分表

    mysql中的分库分表分库:减少并发问题分表:降低了分布式事务分表 1.垂直分表 把其中的不常用的基础信息提取出来,放到一个表中通过id进行关联.降低表的大小来控制性能,但是这种方式没有解决高数据量带 ...

  6. MySQL纯透明的分库分表技术还没有

    MySQL纯透明的分库分表技术还没有  种树人./oneproxy --proxy-address=:3307 --admin-username=admin --admin-password=D033 ...

  7. mycat+ mysql集群 分库分表

    mycat介绍Mycat数据库分库分表中间件国内最活跃的.性能最好的开源数据库中间件!Mycat关键特性关键特性支持SQL92标准支持MySQL.Oracle.DB2.SQL Server.Postg ...

  8. mycat操作mysql示例之分库

    准备工作: 服务器192.168.96.12,centos7, jdk,mysql5.7,mycat1.6.x,navicat 搭建步骤: 1.在服务器192.168.96.12服务器上安装mysql ...

  9. Docker 安装并使用mysql

    上一篇介绍了Docker在CentOS中的安装,本文介绍如何在Docker中安装并使用mysql 1.拉取最新的mysql镜像 [root]# docker pull mysql 2.查看已有镜像 [ ...

随机推荐

  1. 什么是静态内部(Static Inner)类,语法要注意什么?

    4静态内部类(Static Inner Classes) 马克-to-win:这里的内部类的static,意思是它可以不用实例化外部类,就自己单独被实例化,单独存在(有点像生活中的办公室和办公桌(独立 ...

  2. Linux上部署net6应用

    前言 ​ .net6都出来了,作为一名.net搬砖工却一直都在windows下部署应用,还未尝试过linux环境下部署应用.参考福禄网络研发团队的相关博客,学习一下如何将应用部署到linux系统. . ...

  3. Shiro+springboot+mybatis(md5+salt+散列)认证与授权-01

    这个小项目包含了注册与登录,使用了springboot+mybatis+shiro的技术栈:当用户在浏览器登录时发起请求时,首先这一系列的请求会被拦截器进行拦截(ShiroFilter),然后拦截器根 ...

  4. Python夺命20问

    1.请观看下列代码并回答问题: import collections from random import choice Card = collection.namedtuple('Card', [' ...

  5. 想要白嫖ppt?记住这几个网站就够了

    良心ppt,超赞! [PPT]:OfficePlushttps://www.officeplus.cn/Template/Home.shtml稻壳Docerhttps://www.docer.com/ ...

  6. 如何设计一个良好的API接口?

    沟通创造价值,分享带来快乐.这里是程序员阅读时间,每天和你分享读书心得,欢迎您每天和我一起精进.今天和大家一起讨论的话题是如何设计一个良好的API接口? 作者:梁桂钊 解读:张飞洪 挑战 API是软件 ...

  7. Cesium DrawCommand [1] 不谈地球 画个三角形

    目录 0. 前言 0.1. 源码中的 DrawCommand 1. 创建 1.1. 构成要素 - VertexArray 1.2. 构成要素 - ShaderProgram 1.3. 构成要素 - W ...

  8. keil工程当中实现printf重定向串口打印

    之前是完全不知道printf可以重定向设置 最近才发现还有这等好事,可以让printf直接实现串口打印 在网上找了很多资料,终于实现了我想要的效果 原理:printf是通过调用底部的fputc来实现打 ...

  9. 五三想休息,今天还学习,图解二叉树的层序遍历BFS(广度优先)模板,附面试题题解

    壹 ❀ 引 我在从JS执行栈角度图解递归以及二叉树的前.中.后遍历的底层差异一文中,从一个最基本的数组遍历引出递归,在掌握递归的书写规则后,又从JS执行栈角度解释了二叉树三种深度优先(前序.中序后序) ...

  10. Spring注解开发_Spring容器创建概述

    浅尝Spring注解开发_Spring容器创建概述 浅尝Spring注解开发,基于Spring 4.3.12 概述Spring容器创建的过程,包括12个方法的执行 浅尝Spring注解开发_自定义注册 ...