在MySql中,当数据量大的时候,一般选择方案:
1. 分库
(1)可以按照业务需求来垂直分库。
2. 读写分离,
(1)可以将从库中分出一台来做特殊业务查询。例如供开发人员查询问题、报表查询等等。
3. 分表
(1)最后使用,可以按照更细微的业务来分表。
MySql读写分离实现机制方法:
1. 基于程序实现 一般不用
2. 基于MySql自带主从同步机制
MySql的主从同步机制实现原理:当主库有sql过来的时候,会进行两个操作:
1. 更新data数据
2. 将数据放在binlogs中。 所以MySql要实现主从同步,第一步需要开启binlog文件。所有提交语句都会提交到这来。binlogs记录了所有关于修改、数据变动的sql语句。。
从数据库会有两个Thread.
1. 用I\O Thread来定时同步主数据库的binlogs文件,将sql放在从库的relay binlogs文件。
2. 用SQL Thread取出sql 语句并执行, 将数据写入从库的data中。
出现的风险:
1. 数据一致性问题。当两个库间通信突然中断,会导致数据出现不一致问题。
解决方案:MySql提供了半同步方式。如果在Master配置半同步, 当数据过来时候,主库不会立刻写入data,而会等待。从库从主库binlog中拿到数据,会通知主库binlog已经取到数据,那binlog在通知data来修改主库。
带来的后果:
一. 影响MySql写入性能。 根据公司业务场景,来做平衡。如果对数据要求很严格,推荐半同步。
二. 当从库很多,需要很久来等待从库返回信息给binlog。 那MySql允许设置保护机制,设置等待时间,例如1秒(一般 设置),data直接写入。binlog只要检测到一个从库同步成功,就会通知data,不需要等所有从库同步完成。
2. 从库执行SQL Thread失败。
解决方案:从库会抛出异常,直到解决该sql异常。
3. 延迟问题。
解决方案:延迟问题一般出现在I/O Thread跟SQL Thread,可以配置多个线程。提高CPU.
binlog用途之二:用于恢复数据库。
如何设置读写架构:
用Atlas代理来区分读写分离。App--->Altas---->写操作---->Master MySql
----->读操作---->Slave MySql
Altas只会有I/O的限制。但目前来说无压力。
实施流程:
1. 修改Master配置my.cnf
2. 修改slave配置:a. my.cnf b.配置master地址、端口、密码
3.安装atlas
4.配置atlas
配置Master步骤:1.修改server id。 2.修改my.cnf