mycat将几个分库模拟为一个数据库,大大简化了应用;且mycat提供一个公共连接池,从而有效控制后端连接数量

数据库复制分担读负载,垂直、水平分库分担写负载

分库之前要和开发充分讨论业务逻辑,确定拆分方案



收集分析业务模块:

订单模块要和其他模块产生关联,原本都出于同一个数据库的时候,可以通过简单的表关联获取这些信息,一旦拆分到不同数据库上,就不能使用关联查询了,这时候,可以在订单模块中冗余一部分信息,如:下单的商品名称、商品价格...  另一方面订单模块和用户模块之间也存在依赖关系,订单模块需要用户模块中下单人的信息,如:姓名、电话...(这些并不频繁,可以通过api接口的方式获取这些信息)  而订单和仓配模块 关联会比较多,因此还是放到一个库中以便关联查询  


mysql复制步骤:

演示环境:

(node1是拆分前的,node2-4是拆分后的)


节点1:

创建数据库,将数据导入数据库

--master-data=2:来记录节点1当前的二进制日志的日志点

--single-transaction:保证备份在同一个事务中进行的,也就是保证数据的一致性

--routines:如果有存储过程,把存储过程也备份

--triggers:触发器

--events:event事件

查看文件bak_imooc.sql:

(二进制日志名、日志点。接下来把数据恢复到节点2、3、4的时候,同步的时候只会同步节点之后的数据,之前的数据在初始化之前就已经备份 了)

用scp命令将数据分别拷贝到其他3台数据库服务器中(节点1中进行)

(输入密码)


在节点2、3、4上分别执行导入:

(node2)

在节点1建立用于复制的账号:

授权帐号:


在节点2设置复制链路:

(指定同步的日志名,以及日志点)

查看节点2的复制链路:

(slave_io_runnning:no,slave_sql_running:no显示还没有开启)

一般主上的数据库名和从上的数据库名要保持一致,但这里是垂直切分,我们希望切分后的数据库名是不一样的,比如节点二只保留订单模块的数据将数据库命名为order_db,所以要建立一个过滤连接来改掉数据库名(mysql5.7支持):

(可以指定只同步哪些,忽略哪些。此处重新命名了数据库名)

启动复制链路:

show slave status查看复制链路:


节点3(参考节点2):


节点4(参考节点2):