分库分表:
原来数据库是单机服务器,随着业务数据越来越多,表越来越大,读写的性能都会下降,这时就要考虑进行分库分表了。
划分的方式有:①按业务进行垂直划分,不同的业务数据划分在不同的表;②按某种规则将大表拆分成小表
拆分之后可能会面临的问题:①分布式事务问题,原来一个库就能完成的事情,现在分多个库后要保证多个库的一致性 ②跨库join的问题,原来一次查询能够完成的事情,现在要分多次查询才能完成
一、数据切分的方式有哪些?
1、垂直切分:把不同的业务数据放在不同的数据服务器上,一个服务器崩了不影响其他服务
2、水平切分:将数据按分区分片存储在不同服务器,使得单个表的数据量变小。
分库分表的演进:单裤单表、单裤多表、多库多表、
二、带来的问题以及如何解决?
1、分布式事务一致性问题:XA协议、两阶段提交
2、跨节点查询Join问题:全局数据字典表、字段冗余、数据组装、ER分片
3、跨节点分页、排序、函数问题:
4、全局主键重复问题:UUID、简历sequence表维护主键ID
3、支持分库分表的中间件有哪些?
Cobar(阿里巴巴)、Vitess(谷歌
4、如何分库分表部署上线?
1、停机部署
2、不停机:
①数据分为历史数据和部署时产生的增量数据
②历史数据直接通过程序分库分表
③增量数据,通过程序重写这段时间的数据库的binlog进行分库分表、
④检查数据一致性,通过主键id检查,通过关键字段进行拼接后md5检查
1、mysql怎么选择存储器的?
①MyISAM:以select、insert为主的应用采用这个表,不支持事务、也不支持外溅
②InnoDB:行级锁和外健约束,支持事务。能够自动从灾难中恢复
③Memory:速度快,逻辑存储介质是系统内存
2、怎么让mysql读写分离?
本质上是:主数据库处理增、删、改操作,从数据库完成读操作
3、慢查询是什么?
①慢查询、全名叫慢查询日志,是mysql提供的一种日志记录,用来记录在mysql中响应时间超过阀值的语句。
运行时间超过long_query_time值的SQL语句,都会被记录 在慢查询日志
MySQL数据库并不启动慢查询日志,需要手动来设置这个参数。
如果不是调优需要的话,一般不建议启动该参数
一、mysql复制过程:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。