一、什么是主从复制?

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库

二 、为什么要做主从复制?

1. 数据同步备份  :  master发生故障后,可以马上切换到slave,降低服务风险

2. 读写分离 :  在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作可以把写操作放在master,读取操作放在slave,减轻单一数据库的操作压力

3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

 

三 、mysql主从复制的原理是什么?

SQL server 数据库主从复制 数据库主从复制的原理_主从复制

  • 从库生成两个线程,一个I/O线程,一个SQL线程;
  • i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
  • 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
  • SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致; 

 

为什么主服务器上已经有了Binary log,为什么还要记录Relay log?(搬过来直接记录不就可以了吗?)

因为从计算机设计合理的角度来说,我们是需要队列去操作的,由于网络的原因Binary log是不能一口气传到从服务器上来的,为不影响从服务器去执行其它的任务,new 了一个I/O Thread线程来接受Binary log中的数据存储到 Relay log当中。Relay log就类似于生产者(I/O Thread)与消费者(SQL Thread)里面的管道,缓存Binary log中传来的数据,Relay  log是存储在从服器的缓存当中的,因此它的开销是很小的。SQL Thread相当于消费者从换从中读取数据,将主服务器传来的指令做到从服务器
的数据库中。同过这种生产者消费者模式  ,不影响消费者的性能。 

四、 MySQL主从复制存在的问题及解决方法

 

mysql主从复制存在的问题:

  • 主库宕机后,数据可能丢失
  • 从库只有一个sql Thread,主库写压力大,复制很可能延时

解决方法:

  • 半同步复制---解决数据丢失的问题 (详情见下一篇)
  • 并行复制----解决从库复制延迟的问题     参考 :

从数据库的读的延迟问题了解吗?如何解决?(上面第二条的原因)

4、做主从后主服务器挂了怎么办?