1,mysql的主从复制
主从复制概念:是指数据可以从一个mysql数据库服务器主节点复制到一个或者多个从节点.mysql默认采用异步复制的方式.
主从复制的主要用途:1)读写分离:在实际开发中,如果遇见某sql语句需要锁表,导致暂时不能使用读服务,这样会影响现有业务,这种情况下使用主从复制,让主数据库负责写,从数据库负责读,这样可以保证业务正常运作 2)数据实时备份:当系统中某个节点发生故障时,可以方便的故障切换 3)高可用HA 4)架构扩展:随着系统业务访问量增大,单机部署数据库可能会有I/O访问频率过高问题.有了主从复制,增加多个数据存储节点,将敷在分布在多个从节点上,降低单机磁盘I/O访问频率,提高单机的I/O性能
mysql主从形式: 1)一主一从 2)一主多从 3)多主一从(将多个数据库备份到一台存储性能比较好的服务器上) 4)双主复制 5)级联复制:级联复制模式下,部分slave的数据同步不连接主节点,而是连接从节点。因为如果主节点有太多的从节点,就会 损耗一部分性能用于replication,那么我们可以让3~5个从节点连接主节点,其它从节点作为二级或者三级与从节点连接,这样不仅可以缓解主节点 的压力,并且对数据一致性没有负面影响
mysql主从复制原理:涉及三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread,SQL thread)运行在从节点
log dump thread:当从节点连接主节点时,主节点会创建一个log gump线程,用于发送bin-log的内容.在读取bin-log中的操作时,log-dump thread会对主节点上的bin-log加锁,当读取完成,甚至在发送给从节点之前,锁会被释放.
I/O thread:当从节点上执行 "start slave"命令后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。
SQL thread:SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性
当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个binary log dump 进程,而每个从节点都有自己的I/O进程,SQL进程。从节点用两个线程将从主库拉取更新和执行分成独立的任务,这样在执行同步数据任务的时候,不会降低 读操作的性能。比如,如果从节点没有运行,此时I/O进程可以很快从主节点获取更新,尽管SQL进程还没有执行。如果在SQL进程执行之前从节点服务停 止,至少I/O进程已经从主节点拉取到了最新的变更并且保存在本地relay日志中,当服务再次起来之后,就可以完成数据的同步
复制的基本过程如下:
从节点上的I/O 进程连接主节点,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;主 节点接收到来自从节点的I/O请求后,通过负责复制的I/O进程根据请求信息读取指定日志指定位置之后的日志信息,返回给从节点。返回信息中除了日志所包 含的信息之外,还包括本次返回的信息的bin-log file 的以及bin-log position;从节点的I/O进程接收到内容后,将接收到