(1)什么是MySQL主从复制?MySQL主从复制的目的是什么?
MySQL主从复制:使得数据可以从一个数据库服务器复制到其它服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库、某个数据库、甚至是某个数据库上的某个表。
目的:
1、通过增加从服务器来提高数据库的性能。在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
2、提高数据安全。在从服务器上备份数据的过程中,主服务器的数据更新仍在继续进行,但备份操作不会涉及这些实时更新,进而不会对主服务器上的实际数据产生任何影响或中断。备份完毕后,再重新开启从服务器的复制进程,使其继续与主服务器保持数据同步。
3、在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能。
4、数据备份。数据备份,一般是写定时任务,一些特殊行业可能还需要手动备份,有些行业要求备份和原数据不能在同一个地方,所以主从复制就能很好的解决这个问题,不仅备份及时,而且还可以多地备份,保证数据的安全。(许多企业和组织会设定定时任务,比如每天、每周或每月自动执行一次备份操作)
(2)MySQL主从复制流程(实现原理)是什么?
1、主库(Master)记录变更:主数据库在接收到任何数据更新(如INSERT、UPDATE、DELETE等操作)时,会将这些更改记录在其二进制日志(Binary Log,简称binlog)中,binlog记录了所有更改数据库数据的SQL语句或事件。
2、从库(Slave)请求并获取binlog:从数据库通过I/O线程连接到主数据库,请求并接收主数据库的binlog事件。
3、写入Relay Log:从库接收到的binlog事件(binlog dump process)被写入到其本地的中继日志(Relay Log)中。Relay Log保存了主库binlog中待在从库上执行的事务信息。
4、从库SQL线程执行事件:从库上的SQL线程读取中继日志中的事件,并按照事务的顺序在从库上重新执行这些事件,从而使从库的数据与主库保持一致。
5、数据同步:通过不断重复上述过程,从库不断地追赶上主库的更新,最终实现主从数据库之间的数据一致。
(3)MySQL主从复制延时问题如何解决?
半同步复制:是主库写入 binlog 日志之后,就会将强制此时立即将数据同步到从库,从库将日志写入自己本地的 relay log 之后,接着会返回一个 ack 给主库,主库接收到至少一个从库的 ack 之后,才会认为写操作完成了。半同步复制可以确保主库的每个事务至少在一个从库上被确认执行后再提交,从而减小延迟,但是影响写入性能。
并行复制:是从库开启多个线程,并行读取 relay log 中不同数据库的日志,不同SQL线程并行执行特定数据库的事务日志,从而加快数据同步速度。
(4)如何实现MySQL的读写分离?
MySQL的读写分离,优化了数据库的架构。它将数据库的写操作集中在主数据库,读操作集中在从数据库,实现了读写操作的分离。