mycat是什么_MyCat

概念

主从模式

MyCat安装

分库


什么是 MyCat

MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议 的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问, 而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数 主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。

MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和 性能以及众多成熟的使用案例使得 MyCat 变得非常的强大。

使用 Mycat 后的结构图

4f0d85a34447c69402f6b6fdc31289bf.png

使用 Mycat 的优势

数据量级

单一的 MySQL 其数据存储量级和操作量级有限。
Mycat 可以管理若干 MySQL 数据库,同时实现数据的存储和操作. 

开源性质

Mycat 是 java 编写的中间件. 开源,免费。
有非常多的人和组织对 Mycat 实行开发,维护,管理,更新.
 Mycat 版本提升较快,可以跟随环境发展.如果有问题,可以快速解决. 
Mycat 有开源网站和开源社区.且有官方发布的电子书籍. 
Mycat 是阿里原应用 corba 二次开发而来的. 

MyCat 中的概念

1、切分

逻辑上的切分,在物理层面是使用多库[database],多表[table]实现的切分,其中切分又分为纵向切分和横向切分。

纵向切分:把原本存储于一个库的数据存储到多个库上。

横向切分:把原本存储于一个表的数据分块存储到多个表上。

2、逻辑库-Schema

Mycat 中定义的 database是逻辑上存在的,物理上是不存在的,主要是针对纵向切分提供的概念。

3、逻辑表-table

Mycat 中定义的 table是逻辑上存在,物理上是不存在的,主要是针对横向切分提供的概念。 

4、MyCat端口

Mycat默认端口是 8066。

5、数据主机 - dataHost

物理 MySQL 存放的主机地址,可以使用主机名,IP,域名定义。

6、数据节点 - dataNode

配置物理的 database,数据保存的物理节点,就是 database。

7、分片规则

当控制数据的时候,如何访问物理 database 和 table
就是访问 dataHost 和 dataNode 的算法
在 Mycat 处理具体的数据 CRUD 的时候,如何访问 dataHost 和 dataNode 的算法.如:哈希 算法,crc32 算法等。 

MySql 的主从模式搭建

安装 MySQL
主库:192.168.130.131
从库:192.168.130.132

主库

1、登录虚拟机,修改Master配置文件。

路径:/etc/my.cnf 
命令:vim /etc/my.cnf
	配置server_id

2、server_id

本环境中 server_id 是 1,是MySQL 服务唯一标识。
配置要求: 
server_id 任意配置,只要是数字即可。
server_id Master,唯一标识数字必须小于 Slave(从库) 唯一标识数字。也就是说主库的server_id的值要小于从库的server_id的值。 

5a3a6279a0cd5bb374810f8ba35f90ec.png

3、log_bin

本环境中 log_bin 值 : master_log 
开启日志功能以及日志文件命名,log_bin=master_log。
变量的值就是日志文件名称.
是日志文件名称的主体. 
MySQL 数据库自动增加文件名后缀和文件类型. 

4cfae8358044c572d83227a4fe04c7d7.png

4、重启 MySQL

如果在修改配置文件时Mysql是在启动状态的,需要将Mysql重启
service mysqld restart

5、配置 Master

          5.1、访问 MySQL 
                 mysql -uusername -ppassword
          5.2、创建用户 
                 在 MySQL 数据库中,为不存在的用户授权,就是同步创建用户并授权。
                 此用户是从库访问主库使用的用户。
                 ip 地址不能写为%,因为主从备份中,当前创建的用户是给从库 Slave 访问主库 Master 使用的。用户必须有指定的访问地址,不能是通用地址。

命令:
    grant all privileges on *.* to ‘username’@’ip’ identified by ‘password’ with grant option; 

    flush privileges; 

1e3dc477828997b83f1c547387249582.png

5.3、查看用户

use mysql;

select host, user from user;

79fca4397f864a9290ddac3804b6d8c6.png

5.4、查看Master信息

show master status;

fec14300ec3465335583da6eeeafe6b6.png

该日志文件默认在mysql安装目录中

ff299bf47ada5cfce90c80841a3014fc.png

从库

1、修改 Slave 配置文件,该server_id的值要大于主库。

6350410b70653e11a0e3d02cd6da2512.png
/etc/my.cnf

2、重启 MySQL 服务。

3、配置 Slave

	3.1、登录mysql。              mysql -uusername -ppassword
        3.2、停止 Slave 功能	  stop slave;
        3.3、配置主库信息 
			需要修改的数据是依据Master信息修改的,ip是Master所在物理机IP,用户名和密码是 Master 提供的 Slave 访问用户名和密码。
日志文件是在 Master 中查看的主库信息提供的,在 Master 中使用命令 show master status 查看日志文件名称。
	示例:
 change master to master_host=’ip’, master_user=’username’, master_password=’password’, master_log_file=’log_file_name’;
	使用:
 change master to master_host='192.168.130.131',master_user='myslave',master_password='myslave',master_log_file='master_log.000001'; 

a6c4a94195cad549806c8ac4d1cc4cbe.png
3.4、启动 Slave 功能  start slave; 

cdd7380b94da38d1b80cdc63030ed7fa.png
3.5、查看 Slave 配置 		show slave status G; 

0a27064c5c4065e6e41feddd8c94d90f.png

测试主从是否搭建成功

在主库中新建库

create database demo1 default character set utf8;

298a82c79e4730e0170ea9c9288e4efc.png

8e326758be6241644f13f2686565eb8e.png

在主库中添加表,t_users,在表中添加数据进行测试。

4484ab9a1db2c1f26a8011f5885ad669.png

MyCat安装

1、创建新的安装环境。

2、在新的环境中安装jdk。

b024730bdb3ec69b4a6e2c3296cb93fa.png

3、在主数据库和从数据库都需要完成

	3.1、放开 3306 端口
			关闭防火墙
	3.2、保证 root 用户可以被 mycat 访问 
			在 Mycat 中通过 Master 数据库的 root 用户访问 Master 数据库,也就是在主从库中都需要授权。

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; 

flush privileges; 

8e8545872fe721bb39a21d31f8d1a195.png

4、解压上传的 Mycat 压缩包。

5、将解压后的文件夹复制到/usr/local/mycat。

6、MyCat 目录介绍

bin 目录里是启动脚本   
conf 目录里是配置文件 
catlet 为 Mycat 的一个扩展功能   
lib 目录里是 Mycat 和它的依赖 jar   
logs 目录里是 console.log 用来保存控制台日志,和 mycat.log 用来保存 mycat 的 log4j 日志。

69b9515785520684d8e212d620f3e971.png

配置读写分离

<?xml version="1.0"?>

server.xml文件

4e45e6127deeb37ae4278e94224ebc43.png

测试

启动 Mycat 命令 
bin/mycat start 

停止命令 
	bin/mycat stop
查看 MyCat 状态 
	bin/mycat status

访问方式 
	可以使用命令行访问或客户端软件访问. 

c4ab60013de378edfc99febe14e677d0.png
命令行访问方式 
	mysql -u 用户名 -p 密码 -hmycat 主机 IP -P8066 链接成功后,可以当做 MySQL 数据库使用. 访问约束 

查看 Mycat 日志 
logs/wrapper.log 
日志中记录的是所有的 mycat 操作. 查看的时候主要看异常信息 caused by 信息 


balance 
balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上  
balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡  
balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。  
balance=”3”, 所有读请求随机的分发到 writeHost 对应的 readhost 执行,writerHost 不负担读压力

测试写。

当从Mycat中执行了一条插入语句,mycat会先将数据插入到master中,然后slave去读master的日志文件后,会把sql语句读过来,在自己库里面执行了一遍。

测试读,在schema.xml文件中,修改balance。

df4c1f92f8e85acdb6c768cf3d3cdb0a.png

在从库中添加新的数据

7310720454effad2e157237a017cb238.png

在mycat中查询

ef91771d61b767a85bbfe82969ceac5c.png

分片分库

分片规则

auto-sharding-long 范围约定 
	以 500 万为单位,实现分片规则. 逻辑库 A 对应 dataNode - db1 和 db2. 1-500 万保存在 db1 中, 500 万零 1 到 1000 万保存 在 db2 中,1000 万零 1 到 1500 万保存在 db1 中.依次类推. 
crc32slot 规则 
	在 CRUD 操作时,根据具体数据的 crc32 算法计算,数据应该保存在哪一个 dataNode 中 

配置分片规则需要注意的地方

1)<columns>id</columns>中推荐配置主键列 
2)所有的 tableRule 只能使用一次。如果需要为多个表配置相同的分片规则,那么需要 在此重新定义该规则。
	也就是说在rule.xml文件中,将tableRule进行拷贝,将name的值修改就好了,但最终走的还是同一个算法。

8c7869c71dc5a8b687fb571ddcf25fcc.png

不允许在schema.xml文件中多个表使用同样的分片规则,例如

bacf0e055e94e0f6de0b48e0f4634d1a.png
 3)在 crc32Slot 算法中的分片数量一旦给定,MyCat 会将该分片数量和 slor 的取值范围保存到文件中。在次修改分片数量时是不会生效的,需要将该文件删除。文件位置位于 conf 目录中的 ruledata 目录中。 

db4dea6a5944510c5e151dce48252856.png

配置分库

1、在 master 中创建 3 个数据库。

2、在 MyCat 中配置分库。

3、修改 Schema.xml

0329007c0a667bdb59fd22d62eaaea63.png

4、启动MaCat,查看 conf 目录中的 ruledata 目录。

5646a3008e758d6eaabf9106f77d91fe.png

5、测试

ce31cdc23add3a001213a6350f133e38.png

注意:

1、使用 MyCat 实现分库时,先在 MyCat 中定义逻辑库与逻辑表,然后在 MyCat 的链接 中执行创建表的命令必须要在 MyCat 中运行。
因为 MyCat 在创建表时,会在表中添加一个新的列,列名为_slot。

2、使用 MyCat 插入数据时,语句中必须要指定所有的列。即便是一个完全项插入也不允许省略列名。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值