MySQL-中间件mycat(一)

4b424f35f2de4fcd8480289320c2ac92.gif

目录

🍁mycat基础概念

🍁Mycat安装部署

🍃初始环境

🍃测试环境

🍃下载安装

🍃修改配置文件

🍃启动mycat

🍃测试连接


    🦐博客主页:大虾好吃吗的博客

    🦐MySQL专栏:MySQL专栏地址

        mycat目前已经出mycat2版本了,虽然还没有全面普及,但是大概这两年各大企业逐步升级mycat2,但是mycat1还是要有一定的了解。本次mycat分三章讲解,熟悉mycat1后,可以去官网下载一个mycat2学习。官网地址:上海云业网络科技有限公司

mycat基础概念

一、什么是MyCat

  1. 一个彻底开源的,面向企业应用开发的大数据库集群

  2. 支持事务、ACID,通过远程可以直接当做数据库使用

  3. 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

  4. 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

  5. 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

  6. 一个新颖的数据库中间件产品

二、为什么使用MyCat

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

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

  1. 读写分离

  2. 数据分片 垂直拆分(分库) 、 水平拆分(分表) 、 垂直+水平拆分(分库分表)

  3. 多数据源整合

三、数据库中间件对比

  1. Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema, 集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职, Cobar停止维护。

  2. Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新 的功能在其中。青出于蓝而胜于蓝。

  3. OneProxy基于MySQL官方的proxy思想利用c进行开发的, OneProxy是一款商业收费的中间件。舍 弃了一些功能,专注在性能和稳定性上。

  4. kingshard由小团队用go语言开发,还需要发展,需要不断完善。

  5. Vitess是Youtube生产在使用, 架构很复杂。不支持MySQL原生协议,使用需要大量改造成本。

  6. Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。

  7. MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件

  8. MySQLRoute是MySQL官方Oracle公司发布的中间件

四、支持的数据库

支持MySQL、ORACLE、SQLServer等一些主流的数据库。

五、核心技术(分库分表)

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

  1. Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。

  2. Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。

  3. DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上

  4. DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上

六、分片规则

        前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难。

Mycat安装部署

拓扑图如下:

 

c964daf97ed248868a22291a6735b5aa.png

初始环境

master和slave搭建主从复制,这里就搭建一个简单地主从关系就可以。

1. master开启二进制日志、server_id

[root@master ~]# vim /etc/my.cnf
server_id=1
log_bin=mysql-bin
[root@master ~]# systemctl restart mysqld
[root@master ~]# mysql -uroot -p123             #登录mysql创建主从连接用户
#省略登录信息
mysql> grant replication slave on *.* to rep@'192.168.8.%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
​
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 |      446 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2. slave指定server_id、指定maste为8.20

[root@slave ~]# vim /etc/my.cnf 
server_id=2
[root@slave ~]# systemctl restart mysqld
[root@slave ~]# mysql -uroot -p123              #登录mysql指定主为8.20
#省略登录信息
mysql> change master to
    -> master_user='rep',
    -> master_host='192.168.8.20',
    -> master_port=3306,
    -> master_password='123',
    -> master_log_file='mysql-bin.000005',
    -> master_log_pos=446;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
​
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
​
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.8.20
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 446
               Relay_Log_File: slave-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
#省略部分内容

测试环境

1. master创建库、表、插入数据

mysql> create database mytest character set utf8;
Query OK, 1 row affected (0.01 sec)
​
mysql> use mytest
Database changed
mysql> create table tb1(
    -> id int primary key,
    -> name varchar(20));
Query OK, 0 rows affected (0.01 sec)
​
mysql> insert into tb1 values(1,'z3');
Query OK, 1 row affected (0.08 sec)
​
mysql> grant all on *.* to root@'%' identified by '123';                #提前创建一个root的远程用户,权限可以根据需求提供,如果没有创建,mycat则没有权限查看数据
Query OK, 0 rows affected, 1 warning (0.01 sec)

2. slave查看数据

mysql> select * from mytest.tb1;
+----+------+
| id | name |
+----+------+
|  1 | z3   |
+----+------+
1 row in set (0.00 sec)

下载安装

1. 下载及安装

jdk:要求jdk必须是1.7及以上版本

Mysql:推荐mysql是5.5以上版本

Mycat:Mycat的官方网站:上海云业网络科技有限公司

下载地址: GitHub - MyCATApache/Mycat-download Mycat有windows、linux多种版本。

第一步:下载Mycat-server-xxxx-linux.tar.gz

第二步:将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。

第三步:进入mycat目录,启动mycat./mycat start 停止:./mycat stop

mycat支持的命令{ console | start | stop | restart | status |dump } Mycat的默认端口号为:8066

2. 配置文件的相关配置

①schema.xml: 定义逻辑库,表、分片节点等内容

②rule.xml: 定义分片规则

③server.xml: 定义用户以及系统相关变量,如端口等

准备好jdk、mycat软件包,解压到相应目录。

[root@mycat src]# tar zxf jdk-8u131-linux-x64.tar.gz 
[root@mycat src]# mv jdk1.8.0_131/ /usr/local/java
[root@mycat src]# tar zxf Mycat-server-1.6.7.6-release-20220524173810-linux.tar.gz 
[root@mycat src]# mv mycat/ /usr/local/mycat
[root@mycat src]# vim /etc/profile                      #添加path路径
export JAVA_HOME=/usr/local/java
export MYCAT_HOME=/usr/local/mycat
export PATH=$JAVA_HOME/bin:$PATH:$MYCAT_HOME/bin
[root@mycat src]# source /etc/profile
[root@mycat src]# java -version                         #查看jdk版本
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[root@mycat src]# cd /usr/local/mycat/conf/

修改配置文件

1. 修改server.xml 修改用户信息,与MySQL区分, 如下:

[root@mycat conf]# vim server.xml

76d170f0cc6c4f57934cb92909fb6ec3.png

2 . 修改schema.xml,这里只需要修改IP(如下图所示),其他的注释信息也被我删掉了,方便查看。

[root@mycat conf]# vim 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="localhost1" database="mytest" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="jdbc:mysql://192.168.8.20:3306" user="root"
                                   password="123">
                <readHost host="hostS1" url="jdbc:mysql://192.168.8.30:3306" user="root"
                                   password="123"></readHost>
                </writeHost>
                
        </dataHost>
</mycat:schema>

 

06c985df6d584e0a9e38c37bec74fcf5.png

启动mycat

[root@mycat conf]# mycat console
或者
[root@mycat conf]# mycat start

测试连接

slave测试等mycat,用户名为mycat,密码默认为123456,端口8066.

[root@slave ~]# mysql -umycat -p123456 -h 192.168.8.10 -P8066
#省略登录信息
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.00 sec)

mysql> use TESTDB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------+
| Tables_in_mytest |
+------------------+
| tb1              |
+------------------+
1 row in set (0.01 sec)

mysql> select * from tb1;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
+------+------+
1 row in set (0.49 sec)

至此mycat部署完成,后面还将针对文件的详细信息,详细讲解。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/14617.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

找网站绝对路径

目录 Linux系统 目标出网。且命令有回显 目标出网&#xff0c;命令无回显 目标不出网&#xff0c;命令无回显 Windows系统 目标出网&#xff0c;命令有回显 目标出网&#xff0c;命令无回显 目标不出网&#xff0c;命令无回显 Linux系统 目标出网。且命令有回显 find …

gpt在线使用-免费的 GPT在哪下载

免费的 GPT&#xff08;Generative Pre-trained Transformer&#xff09; 。现在您可以免费体验我们的 GPT 技术&#xff0c;来让您的业务或项目更加智能。 GPT 是一种基于最前沿的自然语言处理技术&#xff0c;它展现出了令人惊叹的预测能力和交互性能。我们的 GPT 是在世界顶…

SQL Compliance Manager Crack

SQL Compliance Manager Crack 新的SQL CM云代理-扩展了当前SQL CM代理的功能&#xff0c;以支持EC2上Microsoft SQL服务器的远程审核。允许用户添加在共享网络位置上活动的SQL Server&#xff0c;以写入/读取数据并支持DBaaS SQL Server实例。云代理包含与当前SQL代理相同的行…

被chatGPT割了一块钱韭菜

大家好&#xff0c;才是真的好。 chatGPT热度一直上升&#xff0c;让我萌生了一个胆大而创新的想法&#xff0c; 把chatGPT嵌入到Notes客户机中来玩。 考虑到我已经下载了一个chatGPT的Notes应用&#xff08;请见《ChatGPT APIs for HCL DOMINO》&#xff09;&#xff0c;想着…

No.045<软考>《(高项)备考大全》【专项1】《案例分析 - 简介、方法、技巧、理论》

《案例分析》 1 专项介绍1.1 考试分析1.2 试卷参考1.3 题型分析 2 案例分析答题技巧2.1 考试6要2.2 三不要—可以2.3 其他技巧 3 案例中的万金油4 各领域中的重要工具与输出5 案例分析答题技巧6 案例分析理论题历年考点分析6.1 一般知识和科研立项6.2 整体、范围、需求6.3 进度…

我想知道,就目前形势而言,学java好还是C++好?

前言 就现实点看看&#xff0c;可以对比现在Java和C的市场占有率&#xff0c;可以看到&#xff0c;到目前为止&#xff0c;Java在国内编程语言的市场仍然是占据着大头&#xff0c;在招聘当中Java的人数占有率仍然是遥遥领先于C&#xff0c;Java目前开阔的市场以及其巨大的岗位…

风光场景削减及源荷不确定性的虚拟电厂随机优化调度研究(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

Python小姿势 - ###### 随机选取的知识点:Python日期时间处理

随机选取的知识点&#xff1a;Python日期时间处理 Python日期时间处理&#xff1a;一种更简单的方式 日期和时间处理是许多程序中必不可少的部分。Python提供了一个标准库来处理日期和时间&#xff0c;这个库叫做datetime&#xff0c;它提供了一些类来处理不同的日期和时间格式…

SpringCloud --- Nacos注册中心、配置管理

一、Nacos注册中心 1.1、认识和安装Nacos Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比Eureka功能更加丰富&#xff0c;在国内受欢迎程度较高。 1.2、服务注册到nacos Nacos是SpringCloudAlibaba的组件&#xff0c;而SpringCloudAlibaba也遵循Spr…

基于U-Net系列的医学图像分割

U-Net 在FCN 的基础上增加了上采样操作的次数和跳跃连接&#xff0c;使用跳跃连接将解码器的输出特征与编码器的语义特征融合&#xff0c;提高了分割精度&#xff0c;改善了 FCN 上采样不足的问题。 U-Net中没有全连接层&#xff0c;通过互连卷积与反卷积过程中的特征&#xff…

前端优化的分析

前端优化的分析 目录概述需求&#xff1a; 设计思路实现思路分析渲染层性能更好的API 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,cha…

在线问诊小程序系统方案以及价值

方案价值zlzwgz0127 1.扩大医院流量 a.预约到院 在线展示专家的介绍&#xff0c;更能彰显实力&#xff0c;吸引患者来院就医&#xff0c; 用户可选择在线问诊和预约到院 b.社区团购导流 与我们合作社区团购给医院的体检产品导流 c.专家直播导流 通过专家直播吸引潜在患者…

分享两个有意思的登录界面

1.带有浮动占位符和灯光按钮的登录界面 先上效果&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>html {height: 100%;}body {m…

GB/T 28181-2022 新版差异笔记

GB/T 28181-2022 新版差异笔记 文章目录 GB/T 28181-2022 新版差异笔记更改了标准范围删除部分术语和定义增加PTZ缩略语更改SIP监控域互联结构图更改了“联网系统通讯协议结构图”增加了媒体流数据传输的RTP时间戳要求增加了对H.265、AAC的支持更改了SDP协议的引用更改了与其他…

Https详解

文章目录 一. 什么是 Https1. "加密"是什么?2. 对称加密3. 非对称加密4. "中间人攻击" 二. 引入证书理解签名黑客能否伪造证书?黑客能否替换公钥?黑客能否篡改签名?如何查看证书? 一. 什么是 Https https 就是 http 安全层(SSL)–> 用来加密的协…

选择DAO的组织结构时,应着重考虑的各个关键阶段与安全可靠性

近年来&#xff0c;去中心化自治组织 (Decentralized Autonomous Organizations&#xff0c;DAO)已成为了管理智能合约项目和社区的流行方式。简单而言&#xff0c;DAO是一个基于智能合约运作的数字化组织。组织内的成员可以根据对应的模型结构&#xff0c;做出不同的决策。虽然…

【并发基础】一篇文章带你彻底搞懂Java线程中断的底层原理——interrupt()、interrupted()、isInterrupted()

目录 〇、Java线程中断与阻塞的区别 0.1 线程中断 0.2 线程阻塞 一、线程的中断 二、中断方法 2.1 void interrupt() 2.1.1 可中断的阻塞 2.1.2 不可中断的阻塞 2.1.3 实践案例 2.2 boolean isInterrupted() 2.3 boolean interrupted() 2.4 代码案例 三、源码分析…

Python 实验四 常用数据结构(1)

1.从键盘输入一个正整数列表&#xff0c;以一1结束&#xff0c;分别计算列表中奇数和偶数的和。 n int(input("请输入一个正整数&#xff1a;")) list [] while n ! -1:list.append(n)n int(input("请输入一个正整数&#xff1a;")) else:print("…

Java-代码生成器的实现

文章目录 前言一、概述二、手写代码1. 简要说明2. 代码编写3. 完整代码4. 测试效果 三、项目源码 前言 最近看了一个开源的项目&#xff0c;jfinal-layui&#xff0c;然后这个项目里面有一个 代码生成器 的功能 之前虽然有用过代码生成器&#xff0c;但是从来没有看过相关的源…

Android音视频开发-OpenGL ES正交投影实现方法

本文实例为大家分享了OpenGL ES正交投影展示的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 绘制正方形 在最开始绘制的六边形里面好像看起来挺容易的&#xff0c;也没有出现什么问题&#xff0c;接下来不妨忘记前面绘制六边形的代码&#xff0c;让我们按照自己的…