debian怎么配置静态ip地址
221
2022-09-22
11.MySQL数据分片
11.MySQL数据分片
一、数据分片概述
1.1、相关概念
1.1.1、分库/分表1.1.2、水平分割1.1.3、垂直分割
1.2、MyCAT介绍
1.2.1、软件介绍1.2.2、分片规则1.2.3、工作过程
二、部署MyCAT服务
2.1、拓扑结构2.2、部署MyCAT服务
2.2.1、创建数据库2.2.2、在分片服务器上安装JDK2.2.3、安装mycat软件2.2.4、重要的配置文件
2.3、修改配置文件
2.3.1、创建连接用户2.3.2、配置数据分片2.3.3、查看配置完成后的结果
三、测试配置
3.1、分片规则
3.1.1、枚举分片规则 sharding-by-intfile3.1.2、求模分片规则mod-long
四、添加新库、新表
4.1、添加新库4.2、添加新表4.3、重启服务4.4、客户端登录查看
一、数据分片概述
1.1、相关概念
1.1.1、分库/分表
将存放在一台数据库服务器中的数据,按照特定的方式进行拆分,分散存放到多台数据库服务器中,以达到分散单台服务器负载的效果。
1.1.2、水平分割
横向切分按照表中指定字段的分片规则,将表记录按行切分,分散存储到多个数据库中。
1.1.3、垂直分割
纵向切分将单个数据库的多个表按业务类型分类,分散存储到不同的数据库。
1.2、MyCAT介绍
1.2.1、软件介绍
MyCAT是基于java的分布式数据库系统中间件,为高并发环境的分布式存储提供解决方案
适合数据大量写入的存储需求,不适合大量查询的环境支持MySQL、Oracle、Sqlserver、Mongodb等提供数据读写分离服务提供数据分片服务基于阿里巴巴Cobar进行研发的开源软件
1.2.2、分片规则
MyCAT支持提供10种分片规则
枚举法 sharding-by-intfile固定分片 rule1范围约定 auto-sharding-long求模法 mod-long日期列分区法 sharding-by-date通配取模 sharding-by-patternASCII码求模通配 sharding-by-prefixpattern编程指定 sharding-by-substring字符串拆分hash解析 sharding-by-stringhash一致性hash sharding-by-murmur
1.2.3、工作过程
当MyCAT收到一个SQL命令时
解析SQL命令涉及到的表然后看对表的配置,如果有分片规则,则获取SQL命令里分片字段的值,并匹配分片函数,获取分片列表然后将SQL命令发往对应的数据库服务器去执行最后收集和处理所有分片结构数据,并返回到客户端
二、部署MyCAT服务
2.1、拓扑结构
2.2、部署MyCAT服务
2.2.1、创建数据库
分别在数据库1、2、3上创建数据库db1、db2、db3
--数据库1mysql> create database db1;--数据库2mysql> create database db2;--数据库3mysql> create database db3;
2.2.2、在分片服务器上安装JDK
[root@mycat ~]# yum -y install java-1.8.0-openjdk.x86_64[root@mycat ~]# java -versionopenjdk version "1.8.0_161"OpenJDK Runtime Environment (build 1.8.0_161-b14)OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
2.2.3、安装mycat软件
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz#免安装源码包[root@mycat ~]# tar -zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz[root@mycat ~]# ls mycat/bin catlet conf lib logs version.txt[root@mycat ~]# mv mycat/ /usr/local/[root@mycat ~]# ls /usr/local/mycat/bin #mycat命令catlet #扩展功能conf #配置文件lib #mycat使用的jar包logs #mycat启动日志和运行日志
mycat使用命令
[root@mycat ~]# /usr/local/mycat/bin/mycat helpUsage: /usr/local/mycat/bin/mycat { console | start | stop | restart | status | dump }
2.2.4、重要的配置文件
[root@mycat ~]# cd /usr/local/mycat/conf[root@mycat conf]# ls *.xmlehcache.xml log4j2.xml rule.xml #分片规则schema.xml #配置数据分片存储的表server.xml #设置连接账号及逻辑库
2.3、修改配置文件
2.3.1、创建连接用户
使用默认配置暂时不用配置
[root@mycat conf]# pwd/usr/local/mycat/conf[root@mycat conf]# vim server.xml
2.3.2、配置数据分片
先备份schema.xml
[root@mycat conf]# cp schema.xml /root/
删除无用的注释行
[root@mycat conf]# vim schema.xml:q![root@mycat conf]# sed -i '56,77d' schema.xml #删除56到77行[root@mycat conf]# sed -i '39,42d' schema.xml #删除39到42行
#对travelrecord表做分片存储
#对company表做分片存储
#定义数据库主机名及存储数据的库
用户授权
[root@db1 ~]# mysql -uroot -p123456 -e 'grant all on *.* to adminabc@"%" identified by "123456"'[root@db2 ~]# mysql -uroot -p123456 -e 'grant all on *.* to adminabc@"%" identified by "123456"'[root@db3 ~]# mysql -uroot -p123456 -e 'grant all on *.* to adminabc@"%" identified by "123456"'
客户端验证登陆
mysql -h192.168.4.53 -uadminabc -p123456 mysql -h192.168.4.54 -uadminabc -p123456 mysql -h192.168.4.55 -uadminabc -p123456
启动服务查看状态
[root@mycat conf]# /usr/local/mycat/bin/mycat start Starting Mycat-server...[root@mycat conf]# netstat -utnlp | grep 8066[root@mycat mycat]# pwd/usr/local/mycat[root@mycat mycat]# ls logs/
2.3.3、查看配置完成后的结果
[root@client ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456mysql> show databases;+----------+| DATABASE |+----------+| TESTDB | --定义的逻辑库,实际上不存在。里面的表也是假的+----------+1 row in set (0.00 sec)mysql> use TESTDBmysql> show tables;+------------------+| Tables in TESTDB |+------------------+| company || customer || customer_addr || employee || goods || hotnews || orders || order_items || travelrecord |+------------------+9 rows in set (0.00 sec)
三、测试配置
3.1、分片规则
3.1.1、枚举分片规则 sharding-by-intfile
给分片字段赋值时,值必须在分片规则配置文件定义的值里选择
查看那张表使用sharding-by-intfile
vim schema.xml
查看分片字段名字段名必须在规则文件定义的值里选择
vim /usr/local/mycat/conf/rule.xml
修改分片规则配置文件,定义值列表
vim /usr/local/mycat/conf/rule.xml
vim /usr/local/mycat/conf/partition-hash-int.txt10000=0 #0表示第一台数据库服务器,对应dn110010=1 #1表示第二台数据库服务器,对应dn210020=2 #3表示第三台数据库服务器,对应dn3
重启mycat服务
[root@mycat local]# /usr/local/mycat/bin/mycat stopStopping Mycat-server...Stopped Mycat-server.[root@mycat local]# /usr/local/mycat/bin/mycat startStarting Mycat-server...[root@mycat local]# netstat -utnlp | grep 8066tcp6 0 0 :::8066 :::* LISTEN 4600/java
客户端连接mycat服务器,创建employee并存储数据
mysql> create table employee( ID int primary key auto_increment , -> sharding_id int , name char(15) , age int );mysql> desc employee;+-------------+----------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------------+----------+------+-----+---------+----------------+| ID | int(11) | NO | PRI | NULL | auto_increment || sharding_id | int(11) | YES | | NULL | || name | char(15) | YES | | NULL | || age | int(11) | YES | | NULL | |+-------------+----------+------+-----+---------+----------------+4 rows in set (0.04 sec)mysql> insert into employee(sharding_id , name , age )values(10000,"bob",19),(10000,"bob",19),(10000,"bob",19);Query OK, 3 rows affected (0.06 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> insert into employee(sharding_id , name , age )values(10010,"bobA",19),(10010,"bobA",19),(10010,"bobA",19);Query OK, 3 rows affected (0.11 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> insert into employee(sharding_id , name , age )values(10020,"bobF",19),(10020,"bobF",19),(10020,"bobF",19);Query OK, 3 rows affected (0.03 sec)Records: 3 Duplicates: 0 Warnings: 0
在三台数据库服务器上查看employee表记录
[root@db1 ~]# mysql -uroot -p123456 -e 'select * from db1.employee'mysql: [Warning] Using a password on the command line interface can be insecure.+----+-------------+------+------+| ID | sharding_id | name | age |+----+-------------+------+------+| 1 | 10000 | bob | 19 || 2 | 10000 | bob | 19 || 3 | 10000 | bob | 19 |+----+-------------+------+------+[root@db2 ~]# mysql -uroot -p123456 -e 'select * from db2.employee'mysql: [Warning] Using a password on the command line interface can be insecure.+----+-------------+------+------+| ID | sharding_id | name | age |+----+-------------+------+------+| 1 | 10010 | bobA | 19 || 2 | 10010 | bobA | 19 || 3 | 10010 | bobA | 19 |+----+-------------+------+------+[root@db3 ~]# mysql -uroot -p123456 -e 'select * from db3.employee'mysql: [Warning] Using a password on the command line interface can be insecure.+----+-------------+------+------+| ID | sharding_id | name | age |+----+-------------+------+------+| 1 | 10020 | bobF | 19 || 2 | 10020 | bobF | 19 || 3 | 10020 | bobF | 19 |
3.1.2、求模分片规则mod-long
根据字段值与设定的数字求模结果存储数据使用分片字段的值和指定数字的值,做取余运算,根据运算结果存取数据。例如余数为0对应dn1余数为1对应dn2余数为2对应dn3查看使用求模分别规则的表
[root@mycat local]# vim /usr/local/mycat/conf/schema.xml
查看分片字段名
vim /usr/local/mycat/conf/rule.xml
设置分片字段求模的数字
vim /usr/local/mycat/conf/rule.xml
重启mycat服务
[root@mycat ~]# /usr/local/mycat/bin/mycat stop Stopping Mycat-server...Stopped Mycat-server.[root@mycat ~]# /usr/local/mycat/bin/mycat startStarting Mycat-server...[root@mycat ~]# netstat -utnlp | grep 8066tcp6 0 0 :::8066 :::* LISTEN 4896/java
客户端连接mycat服务器建表 并存储数据
[root@client ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456
分布式存储插入记录不能省略字段名
mysql> use TESTDBmysql> create table hotnews( id int , title char(50) , comment char(200) ) ;mysql> insert into hotnews(id , title , comment) values (9,"xxx","xxxx"),(9,"xxx","xxx"),(9,"xxx","xxxx");Query OK, 3 rows affected (0.09 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> insert into hotnews(id , title , comment) values (10,"xxxA","xxxxA"),(10,"xxxA","xxxA"),(10,"xxxA","xxxxA");Query OK, 3 rows affected (0.12 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> insert into hotnews(id , title , comment) values (11, "xxxB","xxxxA"),(11,"xxxB","xxxA"),(11,"xxxB","xxxxA");Query OK, 3 rows affected (0.03 sec)Records: 3 Duplicates: 0 Warnings: 0
三台数据库查看数据
[root@db1 ~]# mysql -uroot -p123456 -e 'select * from db1.hotnews'mysql: [Warning] Using a password on the command line interface can be insecure.+------+-------+---------+| id | title | comment |+------+-------+---------+| 9 | xxx | xxxx || 9 | xxx | xxx || 9 | xxx | xxxx |+------+-------+---------+[root@db2 ~]# mysql -uroot -p123456 -e 'select * from db2.hotnews'mysql: [Warning] Using a password on the command line interface can be insecure.+------+-------+---------+| id | title | comment |+------+-------+---------+| 10 | xxxA | xxxxA || 10 | xxxA | xxxA || 10 | xxxA | xxxxA |+------+-------+---------+[root@db3 ~]# mysql -uroot -p123456 -e 'select * from db3.hotnews'mysql: [Warning] Using a password on the command line interface can be insecure.+------+-------+---------+| id | title | comment |+------+-------+---------+| 11 | xxxB | xxxxA || 11 | xxxB | xxxA || 11 | xxxB | xxxxA |
四、添加新库、新表
4.1、添加新库
修改server.xml文件添加GAMEDB库
[root@mycat ~]# vim /usr/local/mycat/conf/server.xml
4.2、添加新表
修改schema.xml
[root@mycat ~]# vim /usr/local/mycat/conf/schema.xml
4.3、重启服务
[root@mycat ~]# /usr/local/mycat/bin/mycat stopStopping Mycat-server...Stopped Mycat-server.[root@mycat ~]# /usr/local/mycat/bin/mycat startStarting Mycat-server...[root@mycat ~]# netstat -utnlp | grep 8066tcp6 0 0 :::8066 :::* LISTEN 2126/java
4.4、客户端登录查看
[root@client ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456mysql> show databases;+----------+| DATABASE |+----------+| GAMEDB || TESTDB |+----------+2 rows in set (0.00 sec)mysql> use GAMEDBmysql> show tables;+------------------+| Tables in GAMEDB |+------------------+| company2 || hotnews2 |+------------------+2 rows in set (0.00 sec)mysql> create table company2(name char(20),addr char(50));Query OK, 0 rows affected (0.01 sec)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~