Mariadb/MySQL主从同步原理及LOG和POS详解(一)

Mariadb/MySQL主从同步原理及LOG和POS详解(一)_第1张图片

一、Mariadb与MySQL的前生今世

二者详细的历史渊源,就请度娘吧。先主要谈谈Mariadb优于MySQL的优势。

  1. MariaDB目前主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
  2. MariaDB在扩展功能、存储引擎(使用XtraDB来代替MySQL的InnoDB)以及一些新的功能改进方面都强过MySQL,而且从MySQL可以快速简单的迁移到MariaDB。
  3. MariaDB的主从同步对多线程支持的更好,其效率可能比MySQL优秀。详见:MariaDB与MySQL的主从复制效率对比

二、主从复制实现数据高可靠性(Data High Availability)

1. 主从复制的优势

(1) 数据分布 (Data distribution )
(2) 负载平衡(load balancing)
(3) 备份(Backups)
(4) 高可用性和容错行 High availability and failover

2. 支持复制的模式:
binlog_format
Description: Determines whether replication is row-based, statement-based or mixed(确定复制是基于行,基于语句还是混合). Statement-based was the default until MariaDB 10.2.3. (MariaDB 10.2.3版本以下默认是基于语句复制模式)Be careful of changing the binary log format when a replication environment is already running.(复制环境已在运行时,请小心更改二进制日志格式) See Binary Log Formats. Starting from MariaDB 10.0.22 a slave will apply any events it gets from the master, regardless of the binary log format(从MariaDB 10.0.22开始,无论二进制日志格式如何,从属服务器都将应用从主服务器获取的任何事件). binlog_format only applies to normal (not replicated) updates(binlog_format仅适用于正常(未复制)更新).
Commandline: --binlog-format=format
Scope: Global, Session
Dynamic: Yes #动态选项
Data Type: enumeration
Default Value: #默认值
MIXED (>= MariaDB 10.2.4)
STATEMENT (<= MariaDB 10.2.3)
Valid Values: ROW, STATEMENT or MIXED #有效值

3.推荐的主从复制模型:

A.master–slave(推荐)

异步复制
异步复制
master
Slave1
Slave

B.master–slaves(推荐)

异步复制
异步复制
异步复制
异步复制
master
Slave1
Slave2
slave3
Slave4

C.master–slave–master(不推荐)

异步复制
异步复制
master-A
Slave1

三、主从复制原理解析

1. Mariadb/MySQL主从是异步复制原理图

Mariadb/MySQL主从同步原理及LOG和POS详解(一)_第2张图片
简述:Slave先通过io线程读取master的binarylog文件(Master_Log_File)和偏移(Read_Master_Log_Pos)然后同步到本地(从库服务器)的中继文件(Relay_Log_File)中并记录已经读取到的偏移(Relay_Log_Pos),再通过Slave的SQL Thread去读取中继文件(Relay_Log_File),这个SQL Thread会记录已经执行到了master的哪个bin-log文件(Relay_Master_Log_File)和哪个偏移(Exec_Master_Log_Pos)。

2.Mariadb/MySQL主从是异步复制甘特图
master I/O线程
Slave I/O线程
Slave I/O线程
Slave SQL线程
master-A
binary-log
Slave
Relay-log
Slave
3.Mariadb/MySQL主从是异步复制UML图
masterA binary_log Slave Relay_log master I/O线程 Slave I/O线程 Slave I/O线程 Slave SQL线程 masterA binary_log Slave Relay_log

UML图解

masterA Slave SQL线程 Master 服务器 slaveServer master开启bin-log 功能、master IO线程, slave开启 IO线程、 SQL线程,Slave 通过IO线程连接master 并获取bin-log,position 实时监控relay -log日志更新并 解析文件中的SQL 语句,在slave 库执行 收到slave IO线程来的日志请求 io线程将bin-log position返回给slave IO线程。 收到bin-log日志将 bin-log日志内容写入 relay-log中继日志,创建master.info文件, 其记录了master ip、 用户名、 密码 master bin-log名称、bin-log position masterA Slave SQL线程 Master 服务器 slaveServer

三、Mariadb/MySQL 的Log(日志)与POS(偏移位置)

主、从服务器Replication 是一个异步的复制过程,而异步复制的媒介是主服务器的Binarylog(bin-log)日志,该日志记录着需要传输给从服务器的各种数据库动作。整个复制过程,实际上是Slave从Master获取bin-log日志,然后串行执行日志中记录的操作。
Master_Log_File,Read_Master_Log_Pos: 记录了Slave IO thread读到的当前master bin-log文件和偏移, 即master的bin-log文件和偏移。

Relay_Log_File,Relay_Log_Pos:记录了Slave SQL thread执行到relay log的那个文件和偏移,即slave上的relay log文件和偏移。

Relay_Master_Log_File,Exec_Master_Log_Pos:记录了Slave SQL thread执行到master bin-log的文件和偏移,即master上bin-log的文件和偏移。

四、构建Mariadb/Mysql 主从复制环境

基本过程:

  1. 两台RHEL/CentOS 7或以上的主机或虚拟机。
  2. 准备Mariadb/MySQL安装文件或直接通过Yum源安装(yum install -y mariadb mariadb-server)
  3. 部署master(主服务器)
  4. 部署Slave(从服务器)
  5. 验证同步完成

以上偏于原理解释Mariadb数据库的主从异步复制的原理、模式、架构模型、主要日志详解、优势等。接下来以实验的方式验证以上原理。

欢迎大家一起讨论,学习也是一种能力。

你可能感兴趣的:(Linux运维基础,SQL基础,服务器服务基础,负载均衡,Golang)