MYSQL分库分表配置过程记录-mycat实现

之前学习了MYSQL的主从同步,现在来学习一下分库分表。网上查了很多资料,最终决定使用mycat来实现,因为个人觉得这个中间件更符合使用习惯。

这次使用的环境和上次主从同步的一致,主从同步的文章链接在此

https://open.hand-china.com/community/detail/721532145151119360

由于这次配置的是分库分表,所以我们要先取消掉数据库的主从同步。方法也很简单,在slave数据库中执行 stop slave 即可。执行完毕后,salve数据库就和master数据库解除了主从关系,可以认为是两个独立的数据库了。

下面我们来配置Mycat。首先需要安装mycat,可以去官网进行下载http://dl.mycat.org.cn/1.6-RELEASE/。

由于最新的已经是2016年的了,所以我们直接下载最新版的即可。下载下来是一个压缩包,上传到服务器,进行解压

解压完成是一个mycat文件夹,我们进去看一下

可以看到bin、conf、logs文件夹,很显然是执行程序、配置文件、日志所在的位置,目录结构很好理解。下面就要进入conf文件夹进行正式的配置了。

schema.xml

首先修改的就是这个文件,schema.xml 作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、逻辑表以及对应的分片规则、DataNode以及DataSource。mycat下载下来的时候,schema.xml就有一些示例配置,我们需要做的就是将其改为自己的环境。

这是我的环境修改的配置文件,有几个点需要注意:

  1. table -> name。这个是需要进行分表的表名。
  2. dataNode,这个是进行分库时候的数据节点,也就是数据分片
  3. dataHost,这里用于定义具体的数据库实例
  4. writeHost,dataHost的写权限

这里有个点和网上大部分的配置不同,就是writeHost的url。网上一般的配置是ip+端口,而这里使用的是jdbc的方式。而且dataHost的dbDriver也修改为了jdbc。这是因为我使用的是mysql8+的版本,对于8以上版本的,必须使用jdbc方式才可以正常工作。

这里要说明一下,因为mycat已经很久不更新了,所以没有mysql8以上的驱动,我们需要自行下载之后放入lib文件夹。

到这里,schema.xml就算是配置完成了。还有一个重要的配置文件server.xml,可以配置字符集、启动端口之类的。这里我们就不修改了,用它给的默认的就行。下面我们就启动mycat试一下。

启动测试

进入bin目录,执行./mycat start即可启动。我们可以执行./mycat status来查看mycat启动情况

启动完成后,我们可以尝试使用navicat等工具进行连接了。mycat的默认端口是8066.

连接成功后,我们可以看到一个虚拟的数据库TESTDB,这个是和之前schema.xml配置文件里面一致的

我们分别在master和slave建立split_test表

我们尝试在mycat中插入一条数据

然后我们去实际的数据库中进行查看,发现数据被放在了master库中,slave库中是空的

我们再尝试插入一条id大一些的数据,可以看到这次数据被放在了slave库中,这样我们就完成了分库分表。

一些遇到的问题

实际上在配置过程中,远没有上面看起来那么顺利,好像只需要修改一下schema.xml就可以了。下面来记录一下配置过程中踩到的坑。

  1. 查询到的数据有重复
    这个问题出现在一开始配置成功的时候,当时dataNode配置的是三个,dn1,dn2,dn3,dn3和dn1用的是同一个dataHost。schema标签里面填写的dataNode也是这些。结果发现查询的时候,master库中的数据总是会重复,而slave库的数据就正常。后来才想到,因为dn3和dn1是同一个dataHost,它去查询的时候,会把dn1和dn3的数据都混起来,但其实是同一份数据,就导致了重复。后来去掉了dn3,只保留dn1,dn2,结果启动的时候报错了,提示auto-sharding-long的规则要求3个节点,但只配置了两个(报错提示可以在logs路径下wrapper.log中查找到)。接着去排查rule.xml文件,看到auto-sharding-long用到的规则是rang-long。而rang-long的规则写在了autopartition-long.txt中

进入autopartition-long.txt,终于看到了规则。取消掉一个节点即可。

  1. mysql8的不同点
    这个在上面的配置过程中也说过了,主要的配置点在:
    jdbc方式连接、mysql8的驱动
    毕竟mycat长时间没有更新,所以驱动跟不上,所以需要我们手动进行处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值