概念
主从模式
MyCat安装
分库
什么是 MyCat
MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议 的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问, 而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数 主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。
MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和 性能以及众多成熟的使用案例使得 MyCat 变得非常的强大。
使用 Mycat 后的结构图
使用 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的值。
3、log_bin
本环境中 log_bin 值 : master_log
开启日志功能以及日志文件命名,log_bin=master_log。
变量的值就是日志文件名称.
是日志文件名称的主体.
MySQL 数据库自动增加文件名后缀和文件类型.
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;
5.3、查看用户
use mysql;
select host, user from user;
5.4、查看Master信息
show master status;
该日志文件默认在mysql安装目录中
从库
1、修改 Slave 配置文件,该server_id的值要大于主库。
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';
3.4、启动 Slave 功能 start slave;
3.5、查看 Slave 配置 show slave status G;
测试主从是否搭建成功
在主库中新建库
create database demo1 default character set utf8;
在主库中添加表,t_users,在表中添加数据进行测试。
MyCat安装
1、创建新的安装环境。
2、在新的环境中安装jdk。
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;
4、解压上传的 Mycat 压缩包。
5、将解压后的文件夹复制到/usr/local/mycat。
6、MyCat 目录介绍
bin 目录里是启动脚本
conf 目录里是配置文件
catlet 为 Mycat 的一个扩展功能
lib 目录里是 Mycat 和它的依赖 jar
logs 目录里是 console.log 用来保存控制台日志,和 mycat.log 用来保存 mycat 的 log4j 日志。
配置读写分离
<?xml version="1.0"?>
server.xml文件
测试
启动 Mycat 命令
bin/mycat start
停止命令
bin/mycat stop
查看 MyCat 状态
bin/mycat status
访问方式
可以使用命令行访问或客户端软件访问.
命令行访问方式
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。
在从库中添加新的数据
在mycat中查询
分片分库
分片规则
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的值修改就好了,但最终走的还是同一个算法。
不允许在schema.xml文件中多个表使用同样的分片规则,例如
3)在 crc32Slot 算法中的分片数量一旦给定,MyCat 会将该分片数量和 slor 的取值范围保存到文件中。在次修改分片数量时是不会生效的,需要将该文件删除。文件位置位于 conf 目录中的 ruledata 目录中。
配置分库
1、在 master 中创建 3 个数据库。
2、在 MyCat 中配置分库。
3、修改 Schema.xml
4、启动MaCat,查看 conf 目录中的 ruledata 目录。
5、测试
注意:
1、使用 MyCat 实现分库时,先在 MyCat 中定义逻辑库与逻辑表,然后在 MyCat 的链接 中执行创建表的命令必须要在 MyCat 中运行。
因为 MyCat 在创建表时,会在表中添加一个新的列,列名为_slot。
2、使用 MyCat 插入数据时,语句中必须要指定所有的列。即便是一个完全项插入也不允许省略列名。