栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql数据库—分片存储

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql数据库—分片存储

1、分库分表

        将存放在一台的数据库服务器中的数据,按照特定的方式拆分,分散存到多台数据库服务器中,以达到分散单台服务器负载的效果。

2、MyCAT软件介绍:提供数据分库分表存储的服务软件(中间件)

  • mycat是基于java的分布式数据库系统中间件,为高并发环境的分布式存储提供解决数据的方案。
  • 适合数据大量写入的存储需求,支持MySQL、Oracle、Sqlserver、Mongodb等。
  • 提供数据读写分离服务,提供数据分片服务
  • 基于阿里巴巴Cobar进行研发的开源软件,查询数据比较慢。

 3、mycat分布服务器的工作过程

  • 当mycat收到sql命令时,解析sql命令涉及到的表。
  • 然后看对表的配置,如果有分片规则,则获取sql命令里分片字段的值,并匹配分片函数,获得分片列表。
  • 然后将sql命令发往对应的数据库服务器去执行。
  • 最后收集和处理所有分片结果数据,并返回到客户端。
  • 分布式存储数据表名不允许重复

4、mycat服务部署

Schema
Schema:由它指定逻辑数据库(相当于MySQL的database数据库)

Table
Table:逻辑表(相当于MySQL的table表)

DataNode
DataNode:真正存储数据的物理节点

DataHost
DataHost:存储节点所在的数据库主机(指定MySQL数据库的连接信息)

User
User:MyCat的用户(类似于MySQL的用户,支持多用户)

4.1、环境准备

1)mycat分片服务器:192.168.4.40,不需要安装数据库服务软件

2)三台数据库服务器:192.168.4.10 / 20 / 30,3台全新的数据库服务器

3)客户端服务器:192.168.4.50,只需要有mysql命令,数据库服务不需要

注意:mycat内存不小于1G,所有服务器关闭firewalld、selinux

 4.2、部署mycat服务(192.168.4.40)

1)安装软件

[root@mycat ~]# yum -y install java-1.8.0-openjdk.x86_64
[root@mycat ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[root@mycat ~]# mv mycat/ /usr/local/mycat

2)修改配置文件

认识安装目录文件列表

  • /usr/local/mycat/conf/*.xml:mycat服务软件的配置文件
  • /usr/local/mycat/conf/*.txt:分片规则配置文件
  • /usr/local/mycat/conf/*.properties:分片规则配置文件
  • /usr/local/mycat/log:日志文件
  • /usr/local/mycat/lib:java主程序存放目录
  • /usr/local/mycat/version.txt:软件的一些信息以及开发团队的信息。
  • /usr/local/mycat/catlet:和其他协同工作的时候存放的目录

主要是修改如下3个配置文件

  • schema.xml:定义逻辑库,表、分片节点等内容
  • rule.xml:定义分片规则
  • server.xml:定义用户以及系统相关变量,如端口等 

3) 定义客户端连接mycat使用的用户名、密码、虚拟库名

[root@mycat ~]# vim /usr/local/mycat/conf/server.xml 
          用户名
                123456 密码
                TESTDB  虚拟库名
        
         用户名
                user 密码
                TESTDB 虚拟库名
                true 只读访问权限
         

 4)定义分片存储数据的表

设置分片存储数据的表配置文件说明:

[root@mycat ~]# vim /usr/local/mycat/conf/schema.xml 

#定义分片存储数据的表

 

          

        

               ....

        

    #定义数据库服务器主机名

#定义数据库服务器ip地址

        ......

  

 5)备份源文件,删除不需要的行

[root@mycat ~]# cp /usr/local/mycat/conf/schema.xml /root/
[root@mycat ~]# sed -i '56,77d' /usr/local/mycat/conf/schema.xml 
[root@mycat ~]# sed -i '39,42d' /usr/local/mycat/conf/schema.xml 

6)修改配置文件,标红的部分是定义存储数据的数据库服务器

[root@mycat ~]# vim /usr/local/mycat/conf/schema.xml 


       
               


               

               

               
                           rule="mod-long" />
               
                           rule="sharding-by-intfile" />
               
                           rule="sharding-by-intfile">
                                                                        parentKey="id">
                                                                                        parentKey="id" />
                       

                                                                        parentKey="id" />
               

       
       
       
       
                                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                select user()
                                                   password="JY1987...zy2011">
               

       

                                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                select user()
                                                   password="JY1987...zy2011">
               

       

                                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                select user()
                                                   password="JY1987...zy2011">
               

       

4.3、部署数据库服务器(192.168.4.10 | 20 |30)

1)三台数据库服务器都要添加用户jyadmin

mysql> grant all on *.* to jyadmin@"%" identified by "JY1987...zy2011";
Query OK, 0 rows affected, 1 warning (0.00 sec)

2)创建存储数据的库

mysql> create database db1;                   # 数据库mysql10创建
Query OK, 1 row affected (0.01 sec)

mysql> create database db2;                   #数据库mysql20创建
Query OK, 1 row affected (0.00 sec)

mysql> create database db3;                   #数据库mysql30创建
Query OK, 1 row affected (0.00 sec)

4.4、启动192.168.4.40主机的mycat服务

1)验证数据库服务器的授权用户

[root@mycat ~]# which mysql || yum -y install mariadb
[root@mycat ~]# mysql -h192.168.4.10 -ujyadmin -pJY1987...zy2011
[root@mycat ~]# mysql -h192.168.4.20 -ujyadmin -pJY1987...zy2011
[root@mycat ~]# mysql -h192.168.4.30 -ujyadmin -pJY1987...zy2011

2)启动mycat服务

[root@mycat ~]# /usr/local/mycat/bin/mycat start   # 启动
Starting Mycat-server...
[root@mycat ~]# ls /usr/local/mycat/logs/
mycat.log  mycat.pid  wrapper.log
[root@mycat ~]# netstat -utnlp | grep 8066
tcp6       0      0 :::8066                 :::*                    LISTEN      1808/java

[root@mycat ~]# /usr/local/mycat/bin/mycat stop    # 停止
Stopping Mycat-server...
Stopped Mycat-server.
[root@mycat ~]# netstat -utnlp | grep 8066
[root@mycat ~]# ls /usr/local/mycat/logs/
mycat.log  wrapper.log

[root@mycat ~]# cat /usr/local/mycat/logs/wrapper.log      #排错的日志

4.5、客户端【192.168.4.50】连接mycat服务器,查看库和表

[root@host50 ~]# mysql -h192.168.4.40 -P8066 -uroot -p123456
mysql> use TESTDB;
Database changed
mysql> show tables;
+------------------+
| Tables in TESTDB |
+------------------+
| company          |
| customer         |
| customer_addr    |
| employee         |
| goods            |
| hotnews          |
| orders           |
| order_items      |
| travelrecord     |
+------------------+
9 rows in set (0.00 sec)


#这些表不存在,要存储数据,需要根据表使用的分片规则建表后,才能存储数据
mysql> select * from goods;
ERROR 1146 (42S02): Table 'db2.goods' doesn't exist

4.5、建表并存储数据,分片规则配置说明: