MySQL生产环境部署架构
常用的分库分表架构
按业务id分库分表,建立索引映射表同时进行分库分表,数据同步到ES做复杂搜索。
分库分表下如何分页
假设用户现在要查询自己的订单,同时订单要求要支持分页,该怎么做?
方案一:因为同一个用户的订单可能是分布在不同的库不同表的,需要建立一个索引表,
(user_id, order_id),这个表对user_id进行分库分表后,同一个用户的数据就会进入到同一张表里,
既然在同一张表里就可以利用mysql自带的分页机制。
方案二:加载到内存之中,在内存中分页。
对于主从同步保证高可用可选的模式
建议选用半同步方式,半同步方式也有两种情况,MySQL5.7之后默认是:当从库同步binlog成功后,才提交事务,返回成功给客户端。
对于主从同步延时如何提升
MySQL5.7之后已经支持多线程同步了,可以开启,提升速度。slave_parallel_workers>0,slave_parallel_type设置为LOGIGAL_CLOCK,可以使用percona-toolkit工具集里的pt-hearbeat工具,它会在主库里创建一个hearbeat表,然后有一个线程定时更新这个表里的时间戳字段,从库上就有一个monitor线程负责检查从库同步过来的heartbeat表里的时间戳。
基于主从复制实现故障转移
使用MHA进行故障转移,具体步骤网上例子很多
分库分表运行几年后,进行再次扩容应该怎么做
应该在设计之初就对增加表的情况say no,使得单表在20年后才有百万级的数据量。但是如果服务器存储空间耗尽,就要增加数据库服务器了,将旧表分散到不同服务器上,更改路由规则。