首页 > 数据库 >MySQL中间件mycat-01

MySQL中间件mycat-01

时间:2023-04-17 20:46:27浏览次数:47  
标签:01 数据库 分片 中间件 mycat master mysql root

@

目录

mycat基础概念

1、什么是MyCat

  1. 一个彻底开源的,面向企业应用开发的大数据库集群
  2. 支持事务、ACID、可以替代MySQL的加强版数据库
  3. 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  4. 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  5. 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  6. 一个新颖的数据库中间件产品

2、为什么使用MyCat

如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了——MyCat

综上所述:Mycat作用为:能满足数据库数据大量存储;提高了查询性能

  1. 读写分离
  2. 数据分片 垂直拆分(分库) 、 水平拆分(分表) 、 垂直+水平拆分(分库分表)
  3. 多数据源整合

3、 数据库中间件对比

① Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数
据库的schema, 集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职, Cobar停止维护。 ② Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新 的功能在其中。青出于蓝而胜于蓝。
③ OneProxy基于MySQL官方的proxy思想利用c进行开发的, OneProxy是一款商业收费的中间
件。舍 弃了一些功能,专注在性能和稳定性上。
④ kingshard由小团队用go语言开发,还需要发展,需要不断完善。
⑤ Vitess是Youtube生产在使用, 架构很复杂。不支持MySQL原生协议,使用需要大量改造成本。
⑥Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。
⑦ MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件
⑧ MySQLRoute是MySQL官方Oracle公司发布的中间件

4、核心技术(分库分表)
数据库分片指:通过某种特定的条件,将我们存放在一个数据库中的数据分散存放在不同的多个数据库(主机)中,这样来达到分散单台设备的负载,根据切片规则,可分为以下两种切片模式MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法。

1.Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。
2.Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。
3.DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上
4.DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上
5、分片规则:前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极的避免后续数据处理的难

Mycat安装部署

环境

主机名 IP地址
master 192.168.1.65
slave 192.168.1.67
mycat 192.168.1.1

1、配置主从复制
//master主机上操作
开启二进制日志

[root@master ~]# cat /etc/my.cnf 
[mysqld]
.....
server_id = 1 //不可和其他主机一直
log-bin = mysql-bin
!重启MySQL

创建用户

mysql> grant replication slave on *.* to rep@'192.168.1.%' identified by '123.com';
Query OK, 0 rows affected, 1 warning (0.00 sec)

查看master二进制文件和位置,后面会用到

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      446 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

//slave主机进行操作

[mysqld]
...
server_id = 2 //不可与其他主机一致
relay_log= relay_log  //中继日志
!重启MySQL
mysql> change master to
    -> master_host='192.168.1.65',
    -> master_user='rep',
    -> master_password='123.com',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=446;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

查看slave状态要求

mysql> show slave status\G
......
 Slave_IO_Running: Yes
 Slav_SQL_Running: Yes

1、部署mycat前提要求

  1. jdk:要求jdk必须是1.7及以上版本
  2. Mysql:推荐mysql是5.5以上版本
  3. Mycat:Mycat的官方网站:http://www.mycat.org.cn/ 下载地址: https://github.com/MyCATApache/Mycatdownload Mycat有windows、linux多种版本。

2、下载部署mycat
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

[root@mycat ~]# cd /usr/local/
[root@mycat local]# wget http://dl.mycat.org.cn/1.6.7.6/20201126013625/Mycat-server-1.6.7.6-release-20201126013625-linux.tar.gz

//安装jdk环境

[root@mycat ~]# yum -y install java-devel
[root@mycat ~]# cd /usr/local/
[root@mycat local]# tar zxf Mycat-server-1.6.7.6-release-202011260

//优化路径

[root@mycat ~]# ln -s /usr/local/mycat/bin/* /usr/local/bin/

3、master主机上创建库
//用于在mycat主机配置文件中指定

mysql> create database qin;
mysql> create table qin.t1 (id int primary key auto_increment,
    -> name char(22)
    -> );
mysql> insert into qin.t1(name) values ('zhangsan'),('lisi') ;
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from qin.t1;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+

3、修改配置文件
//修改server.xml文件

[root@mycat ~]# vim /usr/local/mycat/conf/server.xml
......
        <user name="mycat" defaultAccount="true">  //更改用户名,可不改
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>
                <property name="defaultSchema">TESTDB</property>

//修改schema.xml文件

[root@mycat ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
	</schema>
	<dataNode name="dn1" dataHost="host1" database="qin" /> //指定qin库
	<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>

		<writeHost host="hostM1" url="jdbc:mysql://192.168.1.65:3306" user="root"
				   password="123.com"> //指定master的ip和登入mysql的root用户和密码
		</writeHost>
	</dataHost>
</mycat:schema>

//启动mycat
{ console | start | stop | restart | status |dump } Mycat的默认端口号为:8066
后台运行的话可用 start命令

[root@mycat ~]# mycat console
Running Mycat-server...
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    | 
jvm 1    | MyCAT Server startup successfully. see logs in logs/mycat.log

4、scp mysql命令到mycat主机上
由于mycat并没有安装mysql但又要用到mysql登入命令,所以在随意一台安装mysql主机上吧mysql登入命令copy到mycat主机上

[root@slave ~]# scp /usr/local/mysql/bin/mysql [email protected]:/usr/local/bin/

5、mycat主机测试登入

[root@mycat ~]# mysql  -umycat -p123456 -h 192.168.1.61 -P 8066

6、任意客户端测试登录

[root@slave ~]# mysql  -umycat -p123456 -h 192.168.1.61 -P 8066

7、设置root权限
root只有在本地才有root权限,所以需要创建远程root账号,方便在数据库中更改数据,如果没有权限在客户端登入成功也什么也不能改变数据。

mysql> grant all on *.* to root@'192.168.1.%' identified by '123.com';
Query OK, 0 rows affected, 1 warning (0.00 sec)

8、插入数据测试
//客户端插入数据

[root@slave ~]# mysql  -umycat -p123456 -h 192.168.1.61 -P 8066

mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.01 sec)

mysql> use TESTDB;
Database changed
mysql> show tables;
+---------------+
| Tables_in_qin |
+---------------+
| t1            |
+---------------+
1 row in set (0.02 sec)

mysql> insert into t1(name) values('zi');
Query OK, 1 row affected (0.08 sec)
 OK!

mysql> select * from t1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | zi       |
+------+----------+
3 rows in set (0.02 sec)

//master主机查看验证

mysql> select * from qin.t1;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | zi       |
+----+----------+
3 rows in set (0.00 sec)

标签:01,数据库,分片,中间件,mycat,master,mysql,root
From: https://www.cnblogs.com/qinziteng/p/17327426.html

相关文章

  • zynq7010,petalinux, USB-wifi测试
    zynq7010,基于linux验证USB-wifi功能1.相关电路图,这里貌似复位键默认上电开启的,引脚并没有印出来需要注意的地方注意芯片型号"USB3320",这个在linux内核中如果USB配置正确的话是会被打印出来的usbcore:registerednewinterfacedriverusb-storagechipidea-us......
  • 人月神话读后感01
    最近读了一本书《人月神话》,这本书是软件工程类的一本经典著作。阅读这本书的第一感受就是感觉这本书不像是一种和学习相关的书,更像是用很多形象的比喻,阐述项目管理当中的一些问题,让读者能够很轻松,明白的去阅读。在软件领域,很少能有像《人月神话》-样具有深远影响力和畅销不衰的......
  • 2019-第十届蓝桥杯大赛个人赛省赛(软件类)真题 C大学B组
    返回目录 题目一览:A.数列求值B.迷宫C.完全二叉树的权值D.组队E.年号字串F.数的分解G.特别数的和H.等差数列I.后缀表达式J.灵能传输  A.数列求值   B.迷宫   C.完全二叉树的权值   D.组队   E.年号字串   F.数的分解   ......
  • vs 2010项目转成 2008
    *.csproj*.resx*.sln把11.0改成10.0版本把4.0改成3.5去掉app.config中的.NET版本,就可以不生成*..exe.config中的必需版本信息直接在项目中去掉app.config就不会生成配置文件了删除*..exe.config文件中的.NET版本配置......
  • [oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
    变量定义回忆上次内容上次回顾了一下历史python是如何从无到有的看到Guido长期的坚持和努力 编程语言的基础都是变量声明python是如何声明变量的呢? 变量想要定义变量首先明确什么是变量变量就是数值能变的量英文名称varia......
  • [oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
    变量定义回忆上次内容上次回顾了一下历史python是如何从无到有的看到Guido长期的坚持和努力编程语言的基础都是变量声明python是如何声明变量的呢?变量想要定义变量首先明确什么是变量变量就是数值能变的量英文名称variable计算机在内存中分配出空间用来存储这些能变的量那......
  • [NOI2011] 阿狸的打字机
    [NOI2011]阿狸的打字机/*其实也就是动态建树的问题,如果这个点有,那就把这个点给激活。如果这个点消失了,对应的把他的值取消掉就可以了这样就可以在对应的树下进行查询。然后就是单点修改,对树的子树大小进行查询,用树状数组进行维护就可以了首先根据fail建立子树在fail树......
  • P4069 [SDOI2016]游戏 李超线段树 维护区间优势线段的线段树
    传送门#include<iostream>#include<algorithm>#include<cstring>typedeflonglongll;typedefstd::pair<double,int>PDI;constintN=1e5,M=2e5+10;constllINF=123456789123456789;intn,m,cnt;inth[N],e[M],ne[M],......
  • ASEMI代理ADAU1701JSTZ-RL原装ADI车规级ADAU1701JSTZ-RL
    编辑:llASEMI代理ADAU1701JSTZ-RL原装ADI车规级ADAU1701JSTZ-RL型号:ADAU1701JSTZ-RL品牌:ADI/亚德诺封装:LQFP-48批号:2023+安装类型:表面贴装型引脚数量:48类型:车规级芯片工作温度:−0°C~70°CADAU1701JSTZ-RL特征28-/56位,50MIPS数字音频处理器从串行EEPROM自启动用于模拟控制的带4输......
  • 团体天梯练习 L2-011 玩转二叉树
    L2-011玩转二叉树给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数\(N(≤30)\),是二叉树中结点的个数。第二行给......