mysql主从复制

mysql主从复制

1、主从复制过程

主从复制过程需要主库跟踪对应的binlog中数据操作变化,比如:updates, deletes等。从数据启动后,binlog

作为写记录一直记录着所有修改数据库的结构和数据内容的事件。通常,select语句不会被binlog记录,因为它没既没修改数据库的结构,也没修改数据库的数据内容。

每个连接主库的从库(副本)都会从主库请求获取一份binlog。从库从主库拉取数据,而不是主库推送数据给从库。从库执行接受的binlog中记录的事件,类似于在从库上重复主库上更改。根据主库发生的更改,从库将会进行表的创建、表结构更改、数据插入删除或者更新。

因为每个从库都是独立的,主库返回给从库的binlog将在每个从库上独立的更新该从库,而不影响其他从库。另外,从库可以随意更改从主库获取的binlog,停止或者启动从库进程,而不会影响主库或者其他从库最新的数据库状态(即这些数据库可正常更新)。

主库需要同步的数据更新,可以根据主从库的各种配置以及控制变量设置规则进行过滤。可以参考更多规则;

2、同步(复制)线程

msyql 的主从同步通过3个线程完成,其中1个线程在主库,2个线程在从库上。

2.1 Binary log dump 线程

当从库连上主库时,主库会创建一个线程来发送 binlog 的内容给从库。

在数据库终端执行sql: SHOW PROCESSLIST , 可以看到 Binlog Dump 线程。

binlog dump 线程在binlog中读取要发送给从库的数据时,会对binlog加锁。一旦数据读取完成,线程将释放锁,即使数据还未发送到从库。

2.2 同步 IO 线程

当在从库上执行sql: START SLAVE ,从库将创建一个I/O线程。该线程将连接主库,并请求主库发送binlog中更新的记录给从库。

主库的Binlog Dump线程,将更新的binlog发送到从库,从库的 I/O线程将这些更新入从库的relay log。

在从库中执行sql: SHOW SLAVE STATUS, 能够看到 Slave_IO_running 的状态。

2.3 同步 SQL 线程

从库创建同步SQL线程来读取 relay log,并执行其中的事务。

每对主/从库连接都有3个线程。如果一个主库连接多个从库,那么主库将会给每个处于连接状态的从库创建一个Binary log dump线程,每个从库也有自己的同步I/O以及SQL线程。

一个从库使用2个线程将从主库读取更新以及在从库执行数据更新分成独立的任务。因此,从主库读取更新的任务不会减慢,即使从库执行数据更新任务很慢。例如,如果从库停止运行一段时间后再启动从库,从库的 I/O线程能够快速获从主库取到所有的binlog,即使 SQL 线程滞后。如果从库在 SQL线程执行所有更新前停止运行, I/O 线程至少获取到了一份安全的更新binlog并保存到从库的relay log, 当下次启动从库后就可能执行数据更新。

在从库上通过设置系统变量 slave_parallel_workers 的值大于0(默认值),可以开启并行处理任务。当该变量设置了,从库设置创建设置的数量的worker 线程,以及一个协调线程来管理worker 线程。如果你在使用多从库通道,每个通道都将有这么多线程。slave_parallel_workers大于0从库一般被称为多线程从库(副本)。一旦这么设置,失败的事务将会被重试。

3、Relay log与从库元数据存储

从库(副本)也会记录从库(源库)的binlog的当前位置以及从库的relay log。

在同步过程中,一个从库创建多个信息库。

3.1 relay log

该log有 I/O线程写入,log中的事务来自主库的binlog,并且将被 SQL线程执行更新到从库。

3.2 从库连接元数据存储

包含了从库I/O线程连接主库需要的信息,以及从主库binlog中检索事务需要的信息。连接元数据存储被写进表mysql.slave_master_info或者一个文件中。

3.3 从库的应用程序元数据存储

包含了从库SQL线程从relay log读取事务以及将事务更新到从库的信息。从库的应用程序元数据存储被写进表mysql.slave_relay_log_info 或者 一个文件中。

从库连接元数据存储与从库的应用程序元数据存储被统称为从库元数据存储,可以参考更多相关说明

使从库能够灵活应对宕机: 事务性存储引擎InnoDB创建表mysql.slave_master_info 与 表mysql.slave_relay_log_info。从库的应用程序元数据存储表更新将与事务一起提交, 也就是记录在元数据存储中的从库进度信息一直与从库的更新保持一致,即使从库宕机。

你可能感兴趣的:(mysql,mysql,数据库,java)