分库分表
数据分散存储
垂直分库:以表为依据,根据业务将不同表拆分到不同库;特点:每个库表结构不同,数据也不同,并集是全量数据;
垂直分表:以字段为依据,根据字段属性将一张表不同字段拆分到不同表;特点:每个库表结构不同,数据不同通过主键关联,并集是全量数据;
水平分库:以数据行为依据,按照一定规则将同一表的数据拆分到不同库;特点:每个库表结构相同,数据不同,并集是全量数据;
水平分表:以数据行为依据,按照一定规则将同一表的数据拆分到不同表;特点:每个表结构相同,数据不同,并集是全量数据;
Mycat是基于java的实现分库分表的数据库中间件(与连接MySQL一样)
编辑Mycat的配置文件schema.xml,配置数据节点datanode和节点主机datahost,修改dbDriver为jdbc,修改url;修改配置文件server.xml用户及密码;rule.xml分片规则;然后重新启动mycat,创建逻辑表结构,插入数据看分片结果。
#连接并登陆Mycat mysql -h 192.168.200.210 -P 8066 -uroot -p0119 #重新启动mycat cd /usr/local/mycat bin/mycat restart # 查看启动日志,确保没有报错 tail -f logs/wrapper.log配置文件
1、schema.xml配置文件,包含逻辑库、逻辑表、分片规则、分片节点及数据源的配置;
--(1)shcema标签 --DB01逻辑库库名,操作时use DB01;自动limit100行 --定义逻辑表表名,分布几个数据节点,分片规则名字 <schema name "DB01" checkSQLschema="true" sqlMaxLimit="100"> <table name="tb_order" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/> </schema> --(2)dataNode标签(数据节点名字,节点主机名字,主机里面的数据库) <dataNode name="dn1" dataHost="dhost1" database="db01"/> --(3)dataHost标签 --节点主机名字,最大和最小连接数,balance负载均衡策略0123,dbDriver数据库驱动native,jdbc <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"> ... </dataHost>2、rule.xml 分片规则,分片规则tableRule(按照id字段分片,分片算法)及参数Function(class是java类,属性txt文件)
3、server.xml 系统配置信息,system和user(用户及权限)
Mycat分片
(1)垂直分库案例:数据库按照业务垂直拆分为商品,订单及用户数据库。
垂直分库不需要在schema.xml中指定rule分片规则,database都是shopping
多表连接查询是不能跨数据库,会报错。
全局表配置(省市区三张表设置为全局表,三个数据库里都有)
<table name="tb_areas_city" dataNode="dn1,dn2,dn3" primaryKey=”id” type=”global”/>
(2)水平分库案例:tb_log表拆分
--(1)shcema.xml <schema name "itcast" checkSQLschema="true" sqlMaxLimit="100"> <table name="tb_log" dataNode="dn4,dn5,dn6" rule="mod-long"/> --取模分片%3 </schema> <dataNode name="dn4" dataHost="dhost1" database="itcast"/> <dataNode name="dn5" dataHost="dhost2" database="itcast"/> <dataNode name="dn6" dataHost="dhost3" database="itcast"/> --三个dataHost相同不变分片规则(都是针对水平拆分),在schema.xml中仅写名字,在rule.xml具体说明
范围分片、取模分片、固定分片hash算法都针对数字类型;
一致性hash分片、字符串hash解析是针对字符串类型;
--范围分片(在txt里定义范围分哪个片,0-500M=0,500M-1000M=1,1000M-1500M=2) <tableRule name="auto-sharding-long"...<columns>id,<algorithm>rang-long <function name="rang-long" <property autopartition-long.txt --取模分片 <tableRule name="mod-long"...<columns>id,<algorithm>mod-long <function name="mod-long" <property count=3 --节点数量 --一致性hash(根据计算的hash值分片) <tableRule name="sharding-by-murmur"...<columns>id,<algorithm>murmur <function name="murmur" <property count=3 --节点数量 --枚举分片(按照配置好的枚举值拆分,省份性别状态) <tableRule name="sharding-by-infile-enumstatus" <columns>status,<algorithm>hash-int <function name="hash-int" <property partition-hash-int.txt --存枚举值1=0,2=1,3=2 <property name="defaultNode"=2 --超出枚举范围的默认节点 --应用指定分片(指定的子字符串计算分片号) <tableRule name="sharding-by-substring" <columns>id,<algorithm>sharding-by-substring <function name="sharding-by-substring" <property startIndex=0 --开始索引位置 <property size=2,partitionCount=3,defaultPartition=0 --截取长度,分片数,默认节点 --固定分片hash算法(二进制与10个1进行位与运算,超出的只看低位) <tableRule name="sharding-by-long-hash" <columns>id,<algorithm>sharding-by-long-hash <function name="sharding-by-long-hash" <property partitionCount=2,1 --节点数量2+1 <property partitionLength=256,512 --三个节点存的长度,默认最大1024 --字符串hash解析(指定的子字符串计算hash值-与10个1进行位与分片) <tableRule name="sharding-by-stringhash" <columns>name,<algorithm>sharding-by-stringhash <function name="sharding-by-stringhash" <property partitionCount=2 --节点数量2 <property partitionLength=512,hashSlice=0:2 --每片长度,hash运算截取的子字符串位置 --按天分片(设置开始和结束日期,每10天一个分片,超出循环) <tableRule name="sharding-by-date" <columns>create_time,<algorithm>sharding-by-date <function name="sharding-by-date" <property dateFormat=yyyy-MM-dd <property sBeginDate=2022-01-01,sEndDate=2022-01-30,sPartionDay=10 --按月分片(设置开始和结束日期,每个自然月一个分片,超出循环) <tableRule name="sharding-by-month" <columns>create_time,<algorithm>partbymonth <function name="partbymonth" <property dateFormat=yyyy-MM-dd <property sBeginDate=2022-01-01,sEndDate=2022-03-31Mycat管理及监控
mycat中间件:解析sql-分片分析-路由分析-读写分离分析
若查询语句不涉及status字段会路由给全部三个分片,返回结果-结果合并-聚合排序分页
聚合排序分页在mycat进行
mycat8066数据访问端口,9066是数据库管理端口
mysql -h 192.168.200.210 -P 9066 -uroot -p 连接端口进行监控
mycat-web(eye)提供图形化监控服务,依赖zookeeper
可以配置mycat和mysql管理,mycat监控,SQL监控统计,性能等;
读写分离
主从复制后,配置读写分离,增删改操作主库,读操作执行从库,降低单台服务器访问压力,应用程序连mycat实现。
一主一从(主库宕机后写操作全部停摆)
schema.xml中dataHost 设置balance=3,值的含义如下:
dataHost添加writeHost和readHost的行
双主双从(高可用,全部数据同步)
master1处理所有写请求,slave1,master2,slave2处理读请求,当master1宕机后,master2自动接管写请求,两个主库互为备机。
分别搭建两个主从复制后,搭建主库相互复制
change master to master_host='192.163.200.213',master_user='itcast', master_password='root@123456',master_log_file='binlog.000002',master_log_pos=663; start slave; show slave status\G;配置读写分离:writeHost和readHost,balance=1 双主双从模式
writeType=0写操作配置,switchType自动切换 =1
黑马课程MySQL数据库基础篇,进阶篇和运维篇知识点和笔记内容全部更新完成。