背景
最近两周研究了一下 MyCat ,下载了一份官方的实践指南,搜了几篇部署介绍,启动了三个虚拟机节点,然后就开始了验证过程。
毕竟不是专业 DBA,我的首要目标是弄清楚如何部署,产品从普通 MySQL 数据库迁移到 MyCat 需要注意的事项。抓主要矛盾,了解关键技术点,解决关键疑惑,有一本书叫《关键20小时,快速学会任何技能》,跟它的核心思想类似。
本文继续整理在没有完全掌握 MyCat 的用法之前,实践过程中因碰到问题而学到的、需要注意的知识点。
schema 和 数据库的关系
客户端连接 MyCat 后如果执行建表语句,那么该表必须在 schema.xml 中声明,否则会创建失败:
修改 schema.xml ,添加该表后,重启 mycat 再建表:
重点:MyCat 逻辑库中的任何表,都需要事先在 schema.xml 中定义,对表比较多的项目来说,整理表及其分片策略是个麻烦的工作。
表结构限制
首先,分片的表必须提供分片字段,默认的按 long 分片时,必须有 ID 字段,否则报错:
逻辑库和用户的权限
需要注意 server.xml 中配置的 MyCat 的逻辑库和对应帐号的权限,否则会出现无权限异常:
其次,分片字段不允许修改。
第三,schema.xml 中定义多个逻辑库之后,如果需要给某个用户授权多个逻辑库的访问权限,那么需要用逗号分割:
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mydb,trigletest</property>
<property name="defaultSchema">secsight</property>
</user>
MyCat 三表关联测试
官方宣称能够支出两张表关联查询,不知道对多表关联是否支持呢?笔者验证了一下三表关联。创建三个分片的逻辑表,分片规则用 mod-long 按取模分片,然后插入数据后,数据均匀分散在多个物理表中。
表一,关系表
表二,公司表:
表三,员工表:
双表查询:
三表左关联查询:
select a.id,b.company_name,c.employee_name,c.employee_age
from employee_company a
left join company b on a.company_id=b.id
join employee c on a.employee_id=c.id order by a.id;
分片的三个物理库中的14条记录都查出来了,结果如下:
启示录
不知道别的企业是怎么进行技术选择和数据库,产品的数据库是不是应该由专业的数据库技术支持团队来做呢,有没有坑点?我只研究了不到五天,只了解了应用的皮毛而已。如何迁移后真有问题,担不起这个大责哇!