前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker安装Mycat和Mysql进行水平分库分表实战

Docker安装Mycat和Mysql进行水平分库分表实战

作者头像
掉发的小王
发布于 2022-07-11 08:17:50
发布于 2022-07-11 08:17:50
68400
代码可运行
举报
文章被收录于专栏:小王知识分享小王知识分享
运行总次数:0
代码可运行

一、前言

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

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

二、安装docker网络

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir /usr/local/docker

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -zxvf mycat.tar.gz

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp -r /usr/local/docker/mycat/conf/ /usr/local/mycat/conf/
cp -r /usr/local/docker/mycat/logs/ /usr/local/mycat/logs/

3. 赋予最高权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod 777 /usr/local/mycat/logs
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod 777 /usr/local/mycat/conf

4. 创建dockerfile文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
touch Dockerfile
vi Dockerfile

5. Dockerfile内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build -t mycat .

7. 运行Mycat镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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. 创建容器内在本地的挂载文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf
# 给予权限省略了哈

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
touch /usr/local/mysql/conf/my.cnf

3. 启动镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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. 新建三个数据库及其表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 新建三个库
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;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 每个库下面新建一个表
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容器内部

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it 256 /bin/bash

2. 更新apt-get

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apt-get update

3. 下载Ping命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apt-get install iputils-ping

输入y即可

4. 互ping成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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==

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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. 新增一个表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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条数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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测试主流程参考


Q.E.D.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
应用示例荟萃 | 全方位认识 information_schema
在上一篇《InnoDB 层压缩相关字典表 | 全方位认识information_schema》中,我们详细介绍了InnoDB层记录压缩表信息的字典表,本期我们将为大家带来系列第九篇《应用示例荟萃 | 全方位认识information_schema》,也是"全方位认识information_schema"的最后一篇,下面请跟随我们一起开始information_schema系统库的系统学习之旅吧
老叶茶馆
2020/11/26
7110
Server层表级别对象字典表 | 全方位认识 information_schema
在上一篇《Server层统计信息字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema系统库的列、约束等统计信息字典表,本期我们将为大家带来系列第三篇《Server层表级别对象字典表 | 全方位认识information_schema》。
老叶茶馆
2020/11/26
1.1K0
InnoDB 层系统字典表 | 全方位认识 information_schema(IFS)
在《Server 层混杂信息字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema下的状态变量、系统变量、进程状态、字符集和校对规则等字典表,本期我们将为大家带来系列第五篇《InnoDB 层系统字典表 | 全方位认识 information_schema》,下面请跟随我们一起开始information_schema 系统库的系统学习之旅吧。
老叶茶馆
2020/11/26
9770
InnoDB 层锁、事务、统计信息字典表 | 全方位认识 information_schema
在上一篇《InnoDB 层系统字典表|全方位认识 information_schema》中,我们详细介绍了InnoDB层的系统字典表,本期我们将为大家带来系列第六篇《InnoDB 层锁、事务、统计信息字典表|全方位认识 information_schema》
老叶茶馆
2020/11/26
1.4K0
Server 层混杂信息字典表 | 全方位认识 information_schema(中)
该表提供查询关于语句性能分析的信息。其记录内容对应于SHOW PROFILES和SHOW PROFILE语句产生的信息
老叶茶馆
2020/11/26
4120
Server 层混杂信息字典表 | 全方位认识 information_schema(上)
在上一篇《Server层表级别对象字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema系统库的表级别对象字典表,本期我们将为大家带来系列第四篇《Server层混杂信息字典表 | 全方位认识 information_schema》,下面请跟随我们一起开始information_schema系统库的系统学习之旅吧。
老叶茶馆
2020/11/26
9540
Server 层混杂信息字典表 | 全方位认识 information_schema(下)
该表提供查询关于表级别权限信息,该表中的内容来自mysql.tables_priv
老叶茶馆
2020/11/26
3260
统计信息查询视图|全方位认识 sys 系统库
在上一篇《会话和锁信息查询视图|全方位认识 sys 系统库》中,我们介绍了如何使用 sys 系统库总的视图来查询会话状态信息以及锁等待信息,本期的内容先给大家介绍查询表和索引相关的统计信息快捷视图。下面请跟随我们一起开始 sys 系统库的系统学习之旅吧。
沃趣科技
2018/09/04
2.3K0
统计信息查询视图|全方位认识 sys 系统库
mysql中information_schema库下的COLUMNS_EXTENSIONS表详解
`information_schema.COLUMNS_EXTENSIONS` 表是 MySQL 8.0.22 及以上版本中引入的一个元数据表,用于存储与表列相关的扩展属性。这些属性主要用于存储引擎级别的信息,例如 InnoDB 存储引擎的列属性。下面是对该表的详细解释:
jack.yang
2025/04/05
850
mysql的information_schema下的COLUMNS表详解
`information_schema.COLUMNS` 表是 MySQL 中的一个元数据表,用于存储数据库中所有表的列信息。这个表对于查询和管理数据库结构非常有用,可以帮助您了解每个表中的列定义、数据类型、约束等细节。
jack.yang
2025/04/05
860
mysql中information_schema库下的KEY_COLUMN_USAGE表详解
`information_schema.KEY_COLUMN_USAGE` 表是 MySQL 中的一个元数据表,用于存储关于表的键列信息,包括主键、唯一键以及外键的详细信息。这个表包含了关于哪些列参与了哪些类型的键约束的信息。下面是这个表的详细解释:
jack.yang
2025/04/05
990
MySQL information_schema详解 COLUMNS
如果一个栏位在多个索引中,COLUMN_KEY只会显示其中优先级最高的一个,顺序为PRI, UNI, MUL
bsbforever
2020/08/18
4K0
InnoDB 层压缩相关字典表 | 全方位认识 information_schema
在上一篇《InnoDB 层全文索引字典表|全方位认识 information_schema》中,我们详细介绍了InnoDB层的全文索引字典表,本期我们将为大家带来系列第八篇《InnoDB 层压缩相关字典表|全方位认识 information_schema》,下面请跟随我们一起开始 information_schema 系统库的系统学习之旅吧。
老叶茶馆
2020/11/26
4410
MySQL information_schema详解 KEY_COLUMN_USAGE
https://dev.mysql.com/doc/refman/5.7/en/key-column-usage-table.html
bsbforever
2020/08/18
1.7K0
MySQL字段信息统计机制场景
同事咨询个问题:某个业务基于 INFORMATION_SCHEMA 统计表的信息(比如最大值)向表里面插入数据。
bisal
2023/08/09
4260
MySQL information_schema 系统库介绍
当我们安装好 MySQL 数据库后,会发现数据库实例自带有 information_schema 系统库,你是否有去关注过这个系统库呢?是否有查询过此库中的表数据呢?又是否清楚此库存在的具体作用呢?带着这些疑问,我们一起来看本篇文章。
MySQL技术
2021/08/24
9730
介绍一下 information_schema 库
今天给大家介绍一款 Mysql 中附属的数据库,就是 information_schema 数据库,为什么说是附属呢?是因为这个数据库是在安装 Mysql 的同时就会安装到你电脑上。这个数据库里面主要存储了关于数据库里面的各种库、表、列、注释等信息。这个库对我们有什么用呢?有很大用处,尤其是当一个公司没有数据字典的时候,你就可以通过查看这个数据库,然后自己去梳理字典。
张俊红
2019/06/24
1.9K0
权限系统表 | 全方位认识 mysql 系统库(一)
前面我们已经完整的介绍了performance_schema 、sys、information_schema三个系统库,今天开始我们为大家开启"全方位认识 mysql 系统库"系列,这也是MySQL中的最后一个系统库 ,在更早之前,我们在《MySQL 的 help 命令你真的会用吗?》一文中其实已经介绍过mysql 系统库的帮助信息表了。在接下来的系列文章中,我们将全面介绍 mysql 系统库。下面,请跟随我们一起开始mysql 系统库 的学习之旅吧。
老叶茶馆
2020/12/15
1K0
mysql的information_schema库下COLUMN_STATISTICS表详解
`information_schema.COLUMN_STATISTICS` 表是 MySQL 8.0.16 及更高版本中引入的一个元数据表,用于存储关于表列的统计信息,特别是直方图数据。这些统计信息有助于优化器更准确地估计查询的成本,从而选择更高效的执行计划。
jack.yang
2025/04/05
600
InnoDB 层全文索引字典表 | 全方位认识 information_schema
在上一篇中,我们详细介绍了InnoDB 层的锁、事务、及其相关的统计信息字典表,本期我们将为大家带来系列第七篇《InnoDB 层全文索引字典表 | 全方位认识 information_schema》。
老叶茶馆
2020/11/26
1.2K0
推荐阅读
相关推荐
应用示例荟萃 | 全方位认识 information_schema
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档