1.mysql分库分表:解决单个mysql存储上限问题1.实现方法:存储层面:利用分布式存储解决方案分库分表:拆分库和表到其它服务器2.常用设计思路:垂直分库(库里面的表分开)+水平分表(表里面的数据分开)分库:数据库分为多个,每个数据库里面都有表,数据均匀存储分库分表:在分的每库里面,进行分表,数据均匀存储到各表3.分片规则MOD_HASHUNI_HASHRIGHT_SHIFTYYYYMMWEEK...4.架构客户端分片服务器主 主从 从5.分库分表操作分类:(1)分片表,(2)ER表:针对具有关联关系的表,对于没有声明分库分表的逻辑,也会参考复杂表的分库分表逻辑(3)全局表:所有库都有表的全部数据(副本)语法:dbpartition by 规则(字段)tbpartitino by 规则(字段)mode_hash() 取余哈系分片规则tbpartitions 表分片数量dbpartitions 库分片数量broadcast:全局表6.分库分表搭建步骤1.配置主从同步2.装mycat包,以及依赖包3.配置mycat,users的用户4.配置本机datasource数据源用户,创建用户授权5.mycat中,配置datasource数据源连接其它主机,mysql的主服务器创建plj用户//添加MySQL59主机MySQL>/*+ mycat:createdatasource{"name":"dw0","url":"jdbc:mysql://192.168.88.59:3306","user":"plj","password":"123456"}*/;//添加MySQL60主机//添加MySQL61主机//添加MySQL62主机6.mycat上搭建2个主从结构的集群c0,c1(分库分表的集群名称必须定义为c0,c1...)mysql>/*! mycat:createcluster{"name":"c0","masters":["dw0"], #主服务器名"replicas":["dr0"] #从服务器名}*/;...7.分片操作(1)mycat上建立数据库,不需要配置逻辑库.mysql -h192.168.88.63 -P8066 -umycat –p654321create database tarena;(2)mycat,建表,分片create table tarena.employees(employee_id int primary key,name char(10),dept_id int , mail varchar(30)) dbpartition BY mod_hash(字段) tbpartition BY mod_hash(employee_id) dbpartitions 2tbpartitions 1;(3)mycat,插入数据测试mysql -h192.168.88.63 -P8066 -umycat –p654321insert into tarena.employees values (9,"jim","1","jim@163.com");insert into tarena.employees values (8,"tom","3","tom@QQ.com");insert into tarena.employees values (7,"lucy","2","lucy@QQ.com");insert into tarena.employees values (6,"john","2","john@QQ.com");
3.mysql分库分表:解决单个mysql存储上限问题
1.实现方法:
存储层面:利用分布式存储解决方案
分库分表:拆分库和表到其它服务器
2.常用设计思路:
垂直分库(库里面的表分开)+水平分表(表里面的数据分开)
分库:数据库分为多个,每个数据库里面都有表,数据均匀存储
分库分表:在分的每库里面,进行分表,数据均匀存储到各表
3.分片规则
MOD_HASH
UNI_HASH
RIGHT_SHIFT
YYYYMM
WEEK
...
4.架构
客户端
分片服务器
主 主
从 从
5.分库分表操作
分类:(1)分片表,
(2)ER表:针对具有关联关系的表,对于没有声明分库分表的逻辑,也会参考复杂表的分库分表逻辑
(3)全局表:所有库都有表的全部数据(副本)
语法:
dbpartition by 规则(字段)
tbpartitino by 规则(字段)
mode_hash() 取余哈系分片规则
tbpartitions 表分片数量
dbpartitions 库分片数量
broadcast:全局表
6.分库分表搭建步骤
1.配置主从同步
2.装mycat包,以及依赖包
3.配置mycat,users的用户
4.配置本机datasource数据源用户,创建用户授权
5.mycat中,配置datasource数据源连接其它主机,mysql的主服务器创建plj用户
//添加MySQL59主机
MySQL>/*+ mycat:createdatasource{
"name":"dw0",
"url":"jdbc:mysql://192.168.88.59:3306",
"user":"plj",
"password":"123456"
}*/;
//添加MySQL60主机
//添加MySQL61主机
//添加MySQL62主机
6.mycat上搭建2个主从结构的集群c0,c1(分库分表的集群名称必须定义为c0,c1...)
mysql>/*! mycat:createcluster{
"name":"c0",
"masters":["dw0"], #主服务器名
"replicas":["dr0"] #从服务器名
}*/;
...
7.分片操作
(1)mycat上建立数据库,不需要配置逻辑库.
mysql -h192.168.88.63 -P8066 -umycat –p654321
create database tarena;
(2)mycat,建表,分片
create table tarena.employees(
employee_id int primary key,
name char(10),
dept_id int ,
mail varchar(30)
)
dbpartition BY mod_hash(字段)
tbpartition BY mod_hash(employee_id)
dbpartitions 2
tbpartitions 1;
(3)mycat,插入数据测试
mysql -h192.168.88.63 -P8066 -umycat –p654321
insert into tarena.employees values (9,"jim","1","jim@163.com");
insert into tarena.employees values (8,"tom","3","tom@QQ.com");
insert into tarena.employees values (7,"lucy","2","lucy@QQ.com");
insert into tarena.employees values (6,"john","2","john@QQ.com");