主从复制的原理:基于主服务器的二进制日志(binlog)跟踪所有的对数据库的完整更改实现。当主数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,如果master的二进制日志一旦发生改变,slave就会把变化复制到自己的日志当中,随后做出相应的操作,以此实现从数据库和主数据库的一致性。
实现步骤:
要实现MySQL的主从复制,首先必须打开Master端的binlog记录功能,否则就无法实现。binlog: binary log,是主库中保存所有更新事件日志的二进制文件。因为整个复制过程实际上就是Slave从Master端获取binlog日志,然后在Slave上以相同顺序执行获取的binlog日志中的记录的各种SQL操作。
读写分离:目的是为了减轻数据库的读写压力,可以通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。主服务器用于写,从服务器用于读,从服务器可以有多个。
实现步骤:
使用一些中间件来实现,譬如Mycat
分库分表:分表又分为垂直分表和水平分表,垂直分表是根据功能的不同或者不同模块对表进行分离,水平分表可以根据用户Id等进行分表,例如ID为偶数的放在一张表中,为奇数的放在另外一个表里面。
分库:
什么时候考虑分表?
- 一张表的查询速度已经慢到影响使用的时候。
- 数据量大
- 当频繁插入或者联合查询时,速度变慢