Mycat基本使用

Mycat

Mycat属于数据库中间件,用于连接Java应用程序和MySQL数据库。主要作用如下:
1.读写分离
2.数据分片
垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)
3.多数据源整合
在这里插入图片描述

原理

Mycat原理主要是拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
在这里插入图片描述

安装

Mycat官网:http://www.mycat.org.cn/
我这里选择的版本是:Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

conf下的三个主要配置文件:
1.schema.xml:定义逻辑库,表、分片节点等内容
2.rule.xml:定义分片规则
3.server.xml:定义用户以及系统相关变量,如端口等

修改配置文件

1.修改配置文件server.xml,将下列用户名root改成mycat,为了和mysql区分,配置中的schemas是逻辑库名,即mycat和后台数据库整体看做一个逻辑库,Java程序只需要和mycat相连即可,不用管后台mysql数据库。

<user name="mycat">
	<property name="password">123456</property>
	<property name="schemas">TESTDB</property>
</user>

2.修改schema.xml,建议先备份
(1)删除schema标签中的内容:
在这里插入图片描述
(2)删除以上内容后,在schema标签中配置逻辑库TESTDB默认的节点为dn1
在这里插入图片描述
(3)将节点dn2和dn3删掉,暂时不用这么多节点
在这里插入图片描述
(4)删除多于的写主机hostS1
在这里插入图片描述
(5)进行完(1)~(4)步骤并删除多于注释,修改后的配置文件如下:

  1 <?xml version="1.0"?>
  2 <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3 <mycat:schema xmlns:mycat="http://io.mycat/">
  4 
  5     <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
  6     </schema>
  7     <dataNode name="dn1" dataHost="host1" database="testdb" />
  8     <dataHost name="host1" maxCon="1000" minCon="10" balance="3"
  9               writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
 10         <heartbeat>select user()</heartbeat>
 11         <!-- can have multi write hosts -->
 12         <writeHost host="hostM1" url="写MySQL服务器ip:端口" user="root"
 13                    password="密码">
 14             <!-- can have multi read hosts -->
 15             <readHost host="hostS2" url="读MySQL服务器ip:端口" user="root" password="密码" />
 16         </writeHost>
 17     </dataHost>
 18 </mycat:schema>

< dataHost >的balance属性用来配置读写分离的类型:

负载均衡类型,目前的取值有4 种:
(1) balance=“0”, 不开启读写分离机制, 所有读操作都发送到当前可用的 writeHost 上。
(2) balance=“1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从
模式(M1->S1, M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
(3) balance=“2”,所有读操作都随机的在 writeHost、 readhost 上分发。
(4) balance=“3”,所有读请求随机的分发到 readhost 执行, writerHost 不负担读压力

3.安装Java环境
4.在mycat/conf/wrapper.conf 下增加:
wrapper.java.command=java安装目录/bin/java
5.启动mycat
控制台启动:mycat/bin/mycat console
后台启动:mycat/bin/mycat start

登录

1.用于管理维护Mycat的登录方式:
mysql -umycat -p123456 -P 9066 -h 你的ip
2.用户通过Mycat查询数据的登录方式:
mysql -umycat -p123456 -P 8066-h 你的ip
在这里插入图片描述

搭建读写分离

通过Mycat和MySQL的主从复制配合搭建数据库的读写分离,实现MySQL的高可用性,我们将搭建:一主一从、双主双从两种读写分离模式。

一主一从

在这里插入图片描述

1.主机配置,在/etc/my.cnf下添加:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
///新加入的配置 start///
#主服务器唯一ID
server_id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库,数据库不能提前创建
#因为主从复制是从 从机接入点开始,如果在主机上提前建好数据库
#会导致从机无法复制
binlog-do-db=testdb
#设置binlog格式
binlog_format=STATEMENT
///新加入的配置  end///
[client]
port=3306
socket=/var/lib/mysql/mysql.sock

2.从机配置,在/etc/my.cnf下添加:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
///新加入的配置 start///
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
///新加入的配置  end///

3.重启mysql
systemctl restart mysqld
4.关闭防火墙
systemctl stop firewalld
5. 在主机上分配一个用户,分配给从机,用于验证从机身份
6. mysql> grant replication slave on *.*to'slave'@'%'identified by '123456';
7. 查看主机状态
在这里插入图片描述
至此,不要在主机上再进行任何操作,保持现有binlog状态,以免这些操作无法同步到从机。

8.在从机上配置需要复制的主机

mysql> reset master;
Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_host='主机ip',
    -> master_user='slave',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000002',master_log_pos=438;
Query OK, 0 rows affected, 2 warnings (0.05 sec)

启动从机复制功能,查看状态:
在这里插入图片描述

9.在主机创建数据库testdb,可在从机上看到也出现testdb,搭建成功。
10.停止从服务器复制功能:stop slave;
启动从机:start slave;
重新配置主从,在从机上执行:stop slave;reset master;

双主双从模式

一个主机m1用于处理所有写请求,它的从机s1和另一台主机m2还有它的从机s2负责所有读请求。当m1主机宕机后,m2主机负责写请求,m1、m2互为备机。
在这里插入图片描述

1.主机master1,/etc/my.cnf关于主从的配置

#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候, 有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1, 取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1

2.主机master2,/etc/my.cnf关于主从的配置

#主服务器唯一ID
server-id=3
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2

3.从机slave1,/etc/my.cnf关于主从的配置

#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

4.从机slave2,/etc/my.cnf关于主从的配置

#从服务器唯一ID
server-id=4
#启用中继日志
relay-log=mysql-relay

5.master1上在一主一从章节中已经创建好了slave用户,同样,在master2上也创建一个slave用户
6. show master status查看主机的状态,记住binlog文件和position接入点,然后在从机上分别连上主机,即slave1连上master1,slave2连上master2
7. 两个主机相互复制,在master1上执行:

mysql> change master to master_host='master2主机ip',
    -> master_user='slave',
    -> master_password='123456',
    -> master_log_file='master2的binlog',master_log_pos=接入点;

mysql> start slave;

同样,在master2上执行连接到master1上的命令。

8.修改mycat/conf/schema.xml配置文件:

<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
	writeType="0" dbType="mysql" dbDriver="native" switchType="1"
	slaveThreshold="100" >
	
	<heartbeat>select user()</heartbeat>
	<!-- can have multi write hosts -->
	<writeHost host="hostM1" url="master1的ip:3306" user="root"
	password="123123">
	<!-- can have multi read hosts -->
	<readHost host="hostS1" url="slave1的ip:3306" user="root"
	password="123123" />
	</writeHost>
	<writeHost host="hostM2" url="master2的ip:3306" user="root"
	password="123123">
	<!-- can have multi read hosts -->
	<readHost host="hostS2" url="slave2的ip:3306" user="root"
	password="123123" />
	</writeHost>
</dataHost>

参数说明:
balance=“1”:全部的readHost与stand by writeHost参与select语句的负载均衡
writeType=“0”:所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
writeType=“1”:所有写操作都随机的发送到配置的 writeHost, 1.5 以后废弃不推荐
writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties
switchType=“1”:1 默认值,自动切换;-1 表示不自动切换;基于 MySQL 主从同步的状态决定是否切换

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mycat中间件是一种用于分布式数据库架构的工具,它可以将多个数据库节点组合成一个逻辑库,并提供高性能和高可用性的数据库访问。在使用Mycat中间件之前,首先需要下载Mycat并将其上传到服务器。推荐将Mycat放在/usr/local/mycat目录下。你可以从Mycat官网的下载地址http://dl.mycat.io/1.6-RELEASE/下载Mycat的压缩包。 在启动Mycat之前,需要进入Mycat的bin目录,并执行命令"./mycat start"来启动Mycat。默认情况下,Mycat的端口是8066。一旦启动成功,你就可以开始使用Mycat中间件来管理你的分布式数据库了。 如果你想了解更详细的关于Mycat中间件的使用方法,我推荐你阅读一本名为《分布式数据库架构及企业实践-基于Mycat中间件》的高清版本的PDF文件。这本书由资深Mycat专家、一线架构师和DBA编写,共有8章内容,涵盖了Mycat的各个方面,包括基本原理、架构设计、性能优化等等。你可以在书中找到关于Mycat中间件的详尽介绍和使用方法。 在实际开发中,Mycat中间件通常是与数据库进行交互的,而对于开发者来说,Mycat中间件几乎是隐身的。在Mycat中,有一些重要的内部概念需要理解,包括逻辑库、逻辑表、分片节点、节点主机和分片规则等等。逻辑库是指Mycat本身,逻辑表是指Mycat中的表,而分片节点是指每个表分片数据所在的数据库。节点主机有时会将多个分片节点放在同一台服务器上,这些分片节点共享相同的节点主机。为了提高性能,通常会将读写压力较高的分片节点放在不同的节点主机上。分片规则是指数据切分的规则,这个规则非常重要,因为它决定了后续数据处理的难度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Mycat数据库中间件的使用教程](https://blog.csdn.net/weixin_39940088/article/details/88764488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [分布式数据库架构及企业实践-基于Mycat中间件](https://download.csdn.net/download/henanshengpuyangshi/10286770)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值