一、什么是主从复制?
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库
二 、为什么要做主从复制?
1. 数据同步备份 : master发生故障后,可以马上切换到slave,降低服务风险
2. 读写分离 : 在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作可以把写操作放在master,读取操作放在slave,减轻单一数据库的操作压力
3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
三 、mysql主从复制的原理是什么?
- 从库生成两个线程,一个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、做主从后主服务器挂了怎么办?