mycat分库分表

垂直分:A业务,B业务,C业务分别放在不同的数据库。

水平分:A业务同样的表复制3份,放到3个数据库。

通俗理解:垂直分,锤子,锤烂  ---> 表结构不一样;水平分,复制的感觉,一样的表结构

===================================================================

mysql分片和分区的区别:

当数据库表中数据量能够被预测到将会非常大,或者已经拥有庞大的数据时,
我们应该选择分表或者分区(即使用多个数据库)来解决数据访问时的性能问题。
如果单机的cpu能够承受站点的并发数,应该选择分表的方式,因为分表相对简单,
容易实现scale,而且涉及到多表连接时,分区是不能直接使用join的。
但如果站点并发数太大,需要多个cpu来访问多个数据库是无疑的,
这时需要选择分区的方式。

分表能够解决单表数据量过大带来的查询效率下降的问题,但是,
却无法给数据库的并发处理能力带来质的提升。面对高并发的读写访问,
当数据库master服务器无法承载写操作压力时,不管如何扩展slave服务器,
此时都没有意义了。因此,我们必须换一种思路,对数据库进行拆分,
从而提高数据库写入能力,这就是所谓的分库。

(一般最少200万数据考虑分表,但是如果对查询性能要求不太高,或者有其他需求,可以调整)

先根据业务或者区域分库=》再分表(本篇仅讨论分库)

搭建参考资料:

https://blog.csdn.net/yelllowcong/article/details/79063546

https://blog.csdn.net/sinat_34093604/article/details/78708119

使用参考:

https://www.jianshu.com/p/26513f428ecf

https://blog.csdn.net/linlinv3/article/details/51777324

分片规则:

https://blog.csdn.net/xiaobluesky/article/details/50429428

https://blog.csdn.net/webnum/article/details/78312025

常遇错误:

https://blog.csdn.net/smooth00/article/details/71082046

https://www.cnblogs.com/ivictor/archive/2016/01/25/5155123.html

http://blog.51cto.com/goome/2058959

https://blog.csdn.net/l1028386804/article/details/53441395

mycat与sharddingJdbc 对比:

mycat 相比于sharddingJdbc中间多一层proxy,sharddingJdbc实现是轻量级实现

===========================================================================================
启动MyCat:

进入bin目录然后:
./mycat start
查看启动状态:
./mycat status
停止:
./mycat stop
重启:
./mycat restart 

===========================================================================================

实际操作步骤:

一、环境

Mycat部署一共需要用到三台服务器 , 两台mysql服务器 , 一台mycat服务器.

一台mysql服务器分别建10个实例 , 总计20个。( dss_db1 - dss_db20 )

Mycat版本:  Mycat-server-1.6-release (在mycat 服务器上不需要安装mysql,但是要安装jdk)

  • 创建mysql数据库实例

在第一台mysql中:

执行建库、建表语句

在第二台mysql中:

执行建库、建表语句

(如果当前环境只有一台mysql , 则在一台mysql上建立20个数据库实例)

三、安装mycat

将mycat安装包下载下来,选择目录存放

#解压文件

tar -zxvf Mycat-server-1.6-RELEASE-xxx-linux.tar.gz

修改配置文件:

1.server.xml中

TESTDB均改为 ***DB

123456设置为连接mycat对应的密码(Navicat连接mycat的密码,账户为root)

修改<property name="useOffHeapForMerge">0</property>

2.

用mycat配置文件中的schema.xml替换  schema.xml (自己配置表名和所属数据库实例,然后还有连接的数据库的用户和密码)

修改 localhost1与localhost2下面对应的 url 与password

(现在只有一台mysql就配置为一样)

用mycat配置文件中的rule.xml替换 rule.xml (根据自己的业务配的划分规则,例如:枚举(适合区域)、一致性hash(适合大数据量、方便扩容))

用mycat配置文件中的partition-hash-int.txt替换 partition-hash-int.txt (这里面根据自己的业务配置的区域划分规则,例如:北京在第一台数据库实例,上海在第二台等等,可以北京上海都在一台,后面的值一样就行。)

3.

wrapper.conf中修改

wrapper.java.command=/usr/lib/jvm/java-1.8.0/bin/java(这个是linux服务器下jdk的安装目录,最后的结尾必须到/java)

4.Log4j2.xml里面配level属性 置日志级别

  • 启动mycat

进入bin目录然后:
./mycat start
查看启动状态:
./mycat status
停止:
./mycat stop
重启:
./mycat restart

logs文件夹下 wrapper.log 查看mycat日志,mycat启动后,日志最后打印successful则表示mycat启动成功,然后用navicat连接mycat。

(如果要插入数据,需要在mycat下用insert into 带上完整列名添加,mycat会自动插入对应的分片上,查询也在mycat下面查询 ; 如果熟悉分片,按区域枚举分片的数据也可以直接在对应的分片下面直接添加;详情见mycat分片文档)

四、连接mycat

Navicat中 用server.xml设置的mycat密码连接mycat(账户为root , mycat端口是8066)

在mycat中 执行mysql脚本中的3mycat

区域按枚举分配,数据量大的,不是区域为主键的用一致性hash分(方便以后扩容),数据量不大的可以设置为全局表,避免跨表join(每个库都同步数据,取的时候从任意一个库中取),其余可以设置为普通表,数据只放到一台数据库上。(单点的情况)

<!--设置编码 -->

server.xml添加:
<property name="charset">utf8</property>

<!--设置schema可以直接在mycat连接里面打开表,否则报schema不存在-->
<schema name="***" checkSQLschema="false" sqlMaxLimit="100" > , false改为true,

mycat默认返回100条,可以用limit限制,也可以在配置文件中配置

===========================================================================================

实际问题:

一般1千万的数据有1个G的内存,在造千万级的数据时候可以用jdbc插入数据库,然后同时开启线程,最快的百度有人已经实现3分多钟插入1个亿的数据,我们实际操作50分钟左右才插入1个亿的数据,有待优化。

navicat里面还有一个数据同步的功能,可以在开发和测试来回切换数据或者是临时存储,为了方便修改了功能和sql语句,免得重新跑数据。

===========================================================================================

sql优化:

就是老一套的索引、缓存、搜索引擎(solr,es)等。

===========================================================================================

最后的啰嗦,分布式数据库才是以后的发展方向:

参考资料:
http://www.sohu.com/a/256862409_268033

===========================================================================================

mycat集群

官方推荐:

   (根据不同的业务场景,mysql可以分为写写分离,读写分离)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值