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