• 欢迎访问VPS岛网站,国外VPS,国内VPS,国外服务器,国内服务器,服务器主机,测评及优惠码,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站 QQ群

MySQL 中间件Mycat部署

mysql技术 张九冫 38次浏览 已收录 0个评论

什么是MyCat

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

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

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

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

支持MySQL ORACLE SQLServer等一些主流的数据库
核心技术(分库分表) 数据库分片指:通过某种特定的条件,将我们存放在一个数据库中的数据分散存放 在不同的多个数据库(主机)中,这样来达到分散单台设备的负载,根据切片规则,可分为以下两种切片模式
MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段 并绑定一个函数,来实现动态分片算法
1.Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。
2.Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑 数据节点DataNode。在此可以指定表的分片规则。
3.DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来 关联到后端某个具体数据库上

4.DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上
5.分片规则:前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则 把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难
Mycat软件包(提取码:uo74)
MyCat部署

#安装jdk环境,为了方便我这里直接yum安装了,jdk必须是1.7以上的版本
[root@mycat ~]# yum -y install java
[root@mycat ~]# java -version 
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
[root@mycat ~]# wget https://github.com/MyCATApache/Mycat-Server/releases/download/Mycat-server-1675-release/Mycat-server-1.6.7.5-release-20200422133810-linux.tar.gz
[root@mycat ~]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
[root@mycat conf]# pwd
/usr/local/mycat/conf
[root@mycat conf]# vim server.xml         # 修改配置文件
#找到最后,找出此模块,这里我是为了不和系统用户root冲突,所以修改为了mycat
<user name="mycat">             
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>
#由于我在修改的途中为了观看清晰删除了很多配置,所以这块为了以防万一就先备份一个副本出来
[root@mycat conf]# cp schema.xml schema.xml.bak
[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="false" sqlMaxLimit="100" dataNode="dn1">           # dataNode指定节点
        </schema>
        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
                /> -->
        <dataNode name="dn1" dataHost="host1" database="test1" />                         # database 指定数据库
        <dataHost name="host1" 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.171.135:3306" user="root"
                                   password="123">                 # 指定写的数据库主机,及登录账号密码
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.171.145:3306" user="root" password="123" />       # 指定读的数据主机及账户和密码
                </writeHost>
        </dataHost>
</mycat:schema>
[root@mycat ~]# ln -s /usr/local/mycat/bin/* /usr/bin/       # 做软连接方便使用

MySQL主从配置
1、master配置

[root@master ~]# vim /etc/my.cnf 
.....................
log-bin=mysql-bin
server-id=1

mysql> grant replication slave on *.* to rep@'192.168.171.%' identified by '123';            # 赋予权限使从服务器可以连接
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      448 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> create database test1;
mysql> use test1;
mysql> create table tab1(id int primary key auto_increment,name varchar(22));
mysql> insert into tab1 values(1,'zhang'),(2,'li'),(3,'zhao');
mysql> select * from tab1;
+----+-------+
| id | name  |
+----+-------+
|  1 | zhang |
|  2 | li    |
|  3 | zhao  |
+----+-------+
3 rows in set (0.00 sec)
#赋予权限使mycat能够远程登录
mysql> grant all on *.* to root@'192.168.171.%' identified by '123';
#将mysql命令复制过去,是mycat能简单使用
[root@master ~]# scp /usr/local/mysql/bin/mysql  root@192.168.171.134:/usr/bin/

2、slave配置

[root@slave data]# vim /etc/my.cnf 
.................
relay-log=relay-bin
server-id=2
mysql> change master to master_host='192.168.171.135',master_user='rep',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=448;
mysql> start slave;
mysql> show slave status\G

MySQL 中间件Mycat部署

mysql> use test1;
mysql> select * from tab1;
+----+-------+
| id | name  |
+----+-------+
|  1 | zhang |
|  2 | li    |
|  3 | zhao  |
+----+-------+
3 rows in set (0.00 sec)
#赋予权限使mycat能够远程连接
mysql> grant all on *.* to root@'192.168.171.%' identified by '123';  

3、测试

[root@mycat ~]# mysql -umycat -p123456 -h 192.168.171.134 -P8066
mysql> show databases; 
+----------+ 
| DATABASE | 
+----------+
| TESTDB   |            # 这个是逻辑库
+----------+ 
1 row in set (0.00 sec) 

mysql> use TESTDB 
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| tab1            |
+-----------------+
1 row in set (0.00 sec)

mysql> select * from tab1;
+----+-------+
| id | name  |
+----+-------+
|  1 | zhang |
|  2 | li    |
|  3 | zhao  |
+----+-------+
3 rows in set (0.00 sec)

VPS岛 的文章和资源来自互联网,仅作为参考资料,如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。丨 转载请注明MySQL 中间件Mycat部署
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址