为什么需要主从复制

1、读写分离:主库负责写入和更新,从库负责读。提升数据库服务能力。
2、数据备份:可以通过从库进行数据备份,不影响主库的写入和更新。
3、架构的扩展:随着业务量扩大,数据库IO越来越频繁,此时做多库的存储,能够有效降低磁盘IO访问频率,提升单个机器的IO性能。

什么是MySQL的主从复制

MySQL主从复制是指数据可以从一台MySQL数据库服务器(主服务器)复制到一台或多台MySQL数据库服务器(从服务器)。默认情况下,复制是异步的;从服务器不需要永久连接就可以接收来自主服务器的更新。我们可以通过配置,就可以复制主服务器中的所有数据库,或者是选定的数据库甚至是选定的特定的表。

MySQL中复制的优点

  1. 横向扩展解决方案-在多个从站之间分配负载以提高性能。在这种环境下,所有写入和更新都必须在主服务器上进行。但是,读取可能发生在一个或多个从属上。该模型可以提高写入性能(因为主机专用于更新),同时可以在越来越多的从机上显着提高读取速度。
  2. 数据安全性-因为数据被复制到从属服务器,并且从属服务器可以暂停复制过程,所以可以在从属服务器上运行备份服务而不会破坏相应的主数据。
  3. 分析-可以在主服务器上创建实时数据,而信息分析可以在从服务器上进行,而不会影响主服务器的性能。
  4. 远程数据分发-可以使用复制来创建数据的本地副本以供远程站点使用,而无需永久访问主数据库。
  5. 读写分离-在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
  6. 数据实时备份

MySQL复制的原理

首先必须要明白一点,MySQL的主从复制是基于二进制日志(binary log)来实现的。

扩展:mysql中的日志分类一般有如下三种

mysql主主复制优缺点 mysql主从复制的作用_MySQL

1、主服务器将所有的数据改变(更新,删除等)记录到二进制日志binary log中。
2、连接到主服务器的每个从服务器都会请求主服务器的二进制日志,如果探测到其发生改变,则开始一个I/O Thread请求主服务器二进制事件。
3、同时主服务器会为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从服务器中的中继日志中,从服务器将会启动SQL线程从中继日志中读取二进制日志,在本地重放,使其数据和主服务器中的数据保持一致。之后I/OThread和SQL线程将进入睡眠状态,等待下一次被唤醒。
总结:

Binlog dump thread:主服务器创建的一个线程,以便在从服务器连接时将二进制日志内容发送到从服务器。此线程可以在主服务器上的SHOW PROCESSLIST的输出中标识为Binlog Dump线程。

Slave I/O thread:在从属服务器上发出START SLAVE语句时,从属服务器会创建一个I / O Thread,该线程连接到主服务器并要求其发送记录在其二进制日志中的更新。

Slave SQL thread:从服务器创建一个SQL Thread以读取由I / O Thread写入的中继日志,并执行其中包含的事件。

每个主/从连接都有三个线程。具有多个从服务器的主服务器为每个当前连接的从服务器创建一个二进制日志转储线程,并且每个从服务器都有自己的I / O和SQL Thread。

mysql主主复制优缺点 mysql主从复制的作用_服务器_02

复制原理总结

1、从库会生成两个线程,一个I/O Thread,一个SQL Thread;
2、I/O Thread回去请求主库的binlog,并将获取到的binlog写到本地的relay-log(中继日志)中;
3、主库会生成一个Dump Thread,用来给从库I/O Thread 传递binlog 日志;
4、SQL Thread 会读取relay log 文件中的日志,并解析成SQL 语句逐一执行。

MySQL主从的形式

一主一从

mysql主主复制优缺点 mysql主从复制的作用_mysql_03


该模式可以进行读写分离,数据备份

主主复制

mysql主主复制优缺点 mysql主从复制的作用_SQL_04


双向复制,互为对方的从库

一主多从

mysql主主复制优缺点 mysql主从复制的作用_SQL_05


目前用的比较多的复制形式,可以有效的进行读写分离、容灾备份等。

多主一从

mysql主主复制优缺点 mysql主从复制的作用_MySQL_06


从机主要用来做备份

级联复制

mysql主主复制优缺点 mysql主从复制的作用_服务器_07

基于docker进行mysql主从复制的搭建