数据库基础之10(Mycat 分库分表)

目录

1、Mycat分库/分表:

1-1、定义

1-2、软件介绍

1-3、分片规则

1-4、工作过程:

2、环境部署

2-1、配置mycat

2-2、修改配置文件/usr/local/mycat/conf/server.xml-----定义了客户端连接mycat服务时的用户名密码及访问权限

2-3、修改配置文件/usr/local/mycat/conf/schema.xml:--------定义分片信息

2-4、修改配置文件vim /usr/local/mycat/conf/rule.xml:-------定义分片规则的算法

2-5、在节点数据库上添加授权用户:    grant all on *.* to yaya@"%" identified by "123456";

2-6、在节点数据库上设置表名不区分字母大小写

3、测试配置


1、Mycat分库/分表:

 

1-1、定义

 

  • – 通过某种特定条件,将存放在一个数据库(主机)中的数据,分散存放到多个数据库(主机)中。
  • ---以达到分散单台设备负载的效果,即分库分表
  • – 数据的切分根据其切分规则的类型,分为2种切分模式
  • – 垂直分割(纵向) 和 水平分割(横向)
  • --Mycat 是基于Java的分布式数据库系统中间层,为高并发下的分布式提供解决方案

 

  • 垂直分割(纵向切分)

– 把单一的表,拆分成多个表,并分散到不同的数据库(主机)上。
– 一个数据库由多个表构成,每个表对应不同的业务,可以按照业务对表进行分类,将其分布到不同的数据库(主机)上,实现专库专用,让不同的库(主机)分担不同的业务。

  • 水平分割(横向切分)

– 按照表中某个字段的某种规则,把向表中写入的记录分散到多个库(主机)中。
– 简单来说,就是按照数据行切分,将表中的某些行存储到指定的数据库 (主机) 中。

 

1-2、软件介绍

Mycat 是基于Java的分布式数据库系统中间层,为高并发下的分布式提供解决方案

  1. – 支持JDBC形式连接
  2. – 支持MySQL、Oracle、Sqlserver、Mongodb等
  3. – 提供数据读写分离服务
  4. – 可以实现数据库服务器的高可用
  5. – 提供数据分片服务
  6. – 基于阿里巴巴Cobar进行研发的开源软件
  7. – 适合数据大量写入数据的存储需求

1-3、分片规则

mycat服务提供10种分片规则。每种分片规则对应一种算法。
– 1枚举法 sharding-by-intfile --------算法为hash-int
– 2固定分片hash算法 rule1------------func1
– 3范围约定 auto-sharding-long------rang-long
– 4求模法 mod-long------------------mod-long
– 5日期列分区法 sharding-by-date------sharding-by-date
– 6通配取模 sharding-by-pattern ------->sharding-by-pattern
– 7ASCII码求模通配 sharding-by-prefixpattern ------->sharding-by-prefixpattern
– 8编程指定 sharding-by-substring ------->sharding-by-substring
– 9字符串拆分hash解析 sharding-by-stringhash ------>sharding-by-stringhash
– 10一致性hash sharding-by-murmur -------->murmur

1-4、工作过程:

  1. 当Mycat收到一个SQL时,会先解析这个SQL查找涉及到的表
  2. 然后看此表的定义, 如果有分片规则,则获取到SQL里分片字段的值,并匹配分片函数,得到该SQL对应的分片列表
  3. 然后将SQL发往这些分片去执行,最后收集和处理所有分片返回的结果数据,并输出到客户端


2、环境部署

2-1、配置mycat

  • 安装JDK

[root@localhost ~]# rpm -qa | grep -i jdk -----------------安装系统自带的即可
java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64

  •  安装mycat服务软件包

[root@localhost ~]# tar -zxf Mycat-server-1.4-beta-20150604171601-linux.tar.gz #免安装,解压后即可使用
[root@localhost ~]# mv mycat/ /usr/local/
[root@localhost ~]# ls /usr/local/mycat/
bin     catlet     conf       lib     logs      version.txt

  • 目录结构说明

– bin ----- mycat命令 比如启动 停止 等
– catlet ------扩展功能
– conf  ----------配置文件
– lib -------mycat使用的jar包 mycat是java开发的
– log ------mycat启动日志和运行日志
– wrapper.log -----mycat服务启动日志启动有问题可以看这个日志的内容
– mycat.log ------记录 sql脚本执行后的具体报错内容

 

  • 重要配置文件说明

ls /usr/local/mycat/conf
– server.xml------设置客户端连接mycat服务的账号 、密码等
– schema.xml-------配置mycat使用的真实数据库和表
– rule.xml---------定义mycat分片规则
cp server.xml  server.xml.bak----做备份
cp schema.xml  schema.xml.bak----做备份

  • 配置标签说明                                

.......
定义连接mycat服务时使用的用户和密码及逻辑库的名字      
一是一个用户。逻辑库是客户端访问的时候显示的库名
......
指定数据节点(物理库的主机名和存储分片数据的数据库名)
......
指定数据库服务器的IP地址及连接数据库时使用的授权用户名及密码

 

2-2、修改配置文件/usr/local/mycat/conf/server.xml-----定义了客户端连接mycat服务时的用户名密码及访问权限


--------------连接mycat服务时使用的用户名 admin
123456 -------使用admin用户连接mycat用户时使用的密码
TESTDB ------连接上mycat服务后,访问的虚拟库的名字,可以看到的库名多个时,使用逗号分隔 (是逻辑上的库名)

user
TESTDB
true -----定义只读权限,使用定义的user用户连接mycat服务后只有读记录的权限

 

2-3、修改配置文件/usr/local/mycat/conf/schema.xml:--------定义分片信息


 5         ------TESTDB必须和连接上mycat服务后,可以看到的库名一致
 6                
 7                

---填充表名为travelrecord的表内容时,将表内容分片给节点名dn1,dn2的主机,并且定义了分片规则是那种分片规则
 20                
 21                         rule="sharding-by-intfile" />

 37         ----节点dn1的主机名为c1,库名为db1
 38         --- 节点dn2的主机名为c2,库名为db2
 43          44                 writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
 45                 select user()
 46                
 47                  48                         user="yaya" password="123456">-----访问时的用户名和密码为yaya,123456
 55        

 56          57                 writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
 58                 select user()
 59                
 60                  61                         user="yaya" password="123456">-----访问时的用户名和密码为yaya,123456
 68        


2-4、修改配置文件vim /usr/local/mycat/conf/rule.xml:-------定义分片规则的算法

 26         --------------找到分片信息中对应的分片规则
 27                
 28                         sharding_id------定义了分片规则是靠sharding_id字段来区分写入不同节点主机的相关数据库的相关表中

 29                         hash-int-------定义该分片规则对应的算法
 30                

 86          87                 class="org.opencloudb.route.function.PartitionByFileMap">
 88                 partition-hash-int.txt--指出了该算法定义功能的文件名是什么
 89        

vim /usr/local/mycat/conf/partition-hash-int.txt ----打开该算法定义功能的文件

10000=0-------sharding_id字段值为10000时,将会把记录写到dn1节点对应主机的db1库中        
10010=1-------sharding_id字段值为10010时,将会把记录写到dn2节点对应主机的db2库中    


2-5、在节点数据库上添加授权用户:    grant all on *.* to yaya@"%" identified by "123456";

 

2-6、在节点数据库上设置表名不区分字母大小写

Vim /etc/my.cnf
[mysqld]
……
……
lower_case_table_names = 1 --------表名不区分字母大小写
[root@localhost ~]# systemctl restart mysqld-----添加对应设置后重启mysqld服务

/usr/local/mycat/bin/mycat status------起服务
ln -s /usr/local/mycat/bin/mycat  /usr/bin/mycat-----创建软连接
Netstat -untlp | grep 8806-----------查看服务是否启动

 

3、测试配置

• 在客户端连接mycat服务器
– mysql –hmycat服务器ip地址 – P端口 – u用户 – p密码

例如:
[root@room9pc17 ~]# mysql -h192.168.4.56 -P8066 -uadmin -p123456
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
+----------+
1row in set (0.00 sec)

 

  • 建表验证

create table employee(ID int(2) primary key auto_increment,name char(15),pay float(7,2),sharding_id int(2),sex enum("boy","girl"));---------------建表时必须要有规则所定义的字段,和规则对应的算法所定义的
);

 insert into employee(name,pay,sharding_id,sex) values("yangsi",10000,10000,"girl");
 insert into employee(name,pay,sharding_id,sex) values("yangsan",10000,10010,"girl");
 insert into employee(name,pay,sharding_id,sex) values("yanger",10000,10010,"girl");
 insert into employee(name,pay,sharding_id,sex) values("yangyi",10000,10000,"girl");

  •    dn1本机管理员登陆本机:

mysql> select * from employee;
+----+--------+----------+-------------+------+
| ID | name   | pay      | sharding_id | sex  |
+----+--------+----------+-------------+------+
|  1 | yangyi | 10000.00 |       10000 | girl |
|  2 | yangsi | 10000.00 |       10000 | girl |
+----+--------+----------+-------------+------+
2 rows in set (0.00 sec)

  •      dn2本机管理员登陆本机:

mysql> select * from employee;
+----+---------+----------+-------------+------+
| ID | name    | pay      | sharding_id | sex  |
+----+---------+----------+-------------+------+
|  1 | yanger  | 10000.00 |       10010 | girl |
|  2 | yangsan | 10000.00 |       10010 | girl |
+----+---------+----------+-------------+------+
2 rows in set (0.00 sec)

感谢您的拜读,喜欢请点赞!!!

你可能感兴趣的:(数据库)