什么是主从同步?
主从同步,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库。当一个数据库进行改变时,另一个数据库也在改变。主数据库一般是实时的业务数据库。从数据库的作用和使用场合一般有几个:
- 是作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;
- 是可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能;
为什么MySQL要做主从同步(作用)?
通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。
为了提升业务系统性能,优化用户体验,可以通过做主从复制来减轻主数据库的负载。 而且如果主数
据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。
Mysql主从同步的原理图:
原理:
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日
志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为
slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制
日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行
到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
实现读写分离:
从数据库 进行读操作
主数据库进行写操作
简化过程:
- master在执行sql之后,记录二进制log文件(bin-log)。
- slave连接master,并从master获取binlog,存于本地relay-log中,然后从上次记住的位置起执行SQL语
句,一旦遇到错误则停止同步。
用途:
- 实时准备,用于故障切换
- 使数据库支撑更大的并发,提供查询功能
- 对数据进行了备份
缺点:
- 数据的实时性差:数据不是实时同步到只读服务器上的,当数据写入主服务器后,要在下次同步后才
能查询到。 - 数据量大时同步效率差:单表数据量过大时插入和更新因索引,磁盘IO等问题,性能会变的很差。
- 同时连接多个(至少两个)数据库:至少要连接到两个数据数据库,实际的读写操作是在程序代码中完
成的,容易引起混乱 - 读具有高性能高可靠性和可伸缩:只读服务器,因为没有写操作,会大大减轻磁盘IO等性能问题,大
大提高效率;只读服务器可以采用负载均衡,主数据库发布到多个只读服务器上实现读操作的可伸缩性。