一、InnoDB主备复制
复制有三个步骤:
- 在主库上把数据更改记录到二进制日志(Binary Log)中(这些记录被称为二进制日志事件)。
- 备库I/O线程:将主库上的日志复制到自己的中继日志(Relay Log)中。如果该线程追赶上了主库,它将进入睡眠状态,直到主库发送信号量通知其有新的事件产生时才会被唤醒。
- 备库SQL线程:读取中继日志中的事件,将其重放到备库数据之上。
二、基于语句的复制和基于行的复制
基于语句的复制
- 优点:基于语句的方式执行复制的过程基本上就是执行SQL语句。这意味着所有在服务器上发生的变更都以一种容易理解的方式运行。基于语句的复制方式一般允许更灵活的操作。
- 缺点:如果正在使用触发器或者存储过程,就不要使用基于语句的复制模式,除非能够清楚地确定不会碰到复制问题。
基于行的复制
- 优点:基于行的复制模式会记录数据变更,因此在二进制日志中记录的都是实际上在主库上发生了变化的数据。由于无须像基于语句的复制那样需要为查询建立执行计划并执行查询,因此基于行的复制占用更少的CPU。
- 缺点:由于语句并没有在日志里记录,因此无法判断执行了那些SQL。