千家信息网

Replication主从复制机制原理是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Replication主从复制机制原理是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Replication主从复制机制原理是什么"
千家信息网最后更新 2026年11月01日Replication主从复制机制原理是什么

本篇内容主要讲解"Replication主从复制机制原理是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Replication主从复制机制原理是什么"吧!

复制概述

  • Replication复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

  • MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。

复制原理

MySQL 的主从复制原理如下:

从上层来看,复制分成三步:

  • Master主库在事务提交时,会把数据的更新记录作为时间Events记录在二进制日志文件Binlog中。(Dump线程 - 主库线程)

  • Master主库推送二进制日志文件Binlog中的日志事件到从库的并且通过写入中继日志Relay Log(I/O线程 - 从库线程)。

  • Slave从库 读取且重做(重放)中继日志(Relay Log) 中的事件,将改变反映它自己的数据。(SQL线程 - 从库线程)

复制优势

MySQL复制的有点主要包含以下三个方面:

  • 主库出现问题,可以快速切换到从库提供服务(提供故障切换机制)。

  • 从库上执行查询操作,从主库中更新,实现读写分离,降低主库的访问压力(提高读写分离并且提高高可用和负载以及吞吐)。

  • 从库中执行备份,以避免备份期间影响主库的服务(提高数据的安全性)。

搭建步骤

master

  1. 在master 的配置文件(/usr/my.cnf)中,配置如下内容:

  • mysql 服务ID,保证整个集群环境中唯一

server-id=1

  • mysql binlog 日志的存储路径和文件名

  • log-bin=/var/lib/mysql/mysqlbin

  • log-bin-index = mysql-bin.index(设置二进制日志索引文件名)

  • binlog_format = mixed (binlog的模式)

    • STATEMENT:语句复制

    • ROW:行复制

    • MIXED:混和复制,默认选项

  • sync-binlog = 1(是否开启同步方式): 默认为0,为保证不会丢失数据,需设置为1,用于强制每次提交事务时,同步二进制日志到磁盘上。

character-set-server = utf8(字符串编码)

  • 错误日志,默认已经开启

  • log-err

  • mysql的安装目录

basedir

  • mysql的临时目录

tmpdir

  • mysql的数据存放目录

datadir

  • 是否只读,1 代表只读, 0 代表读写

read-only=0

  • 忽略的数据, 指不需要同步的数据库(逗号分割)

binlog-ignore-db=mysql

  • 指定同步的数据库

binlog-do-db=db01

  1. 执行完毕之后,需要重启Mysql:

service mysql restart;

  1. 创建同步数据的账户,并且进行授权操作:

grant replication slave on . to 'itcast'@'192.168.192.131' identified by 'itcast'; flush privileges;

  1. 为了获取一个一致性的快照,需对所有表设置读锁:

flush tables with read lock;

  1. 备份主数据库数据

  • 主库可以停机,则直接拷贝所有数据库文件。

  • 主库是在线生产库,可采用mysqldump备份数据,它对所有存储引擎均可使用。

针对事务性引擎
mysqldump -uroot -ptiger --all-database -e --single-transaction --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql
针对 MyISAM 引擎,或多引擎混合的数据库
mysqldump -uroot --all-database -e -l --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql

主从数据库都是数据都是一致的,直接执行 show master status 查看日志坐标。

show master status;

字段含义:

  • File : 从哪个日志文件开始推送日志文件

  • Position : 从哪个位置开始推送日志

  • Binlog_Ignore_DB : 指定不需要同步的数据库

  1. 恢复主库的写操作:

unlock tables;


slave

  • 导入备份数据

mysql -uroot -p < /data/all_db.sql

  1. 在 slave 端配置文件中,配置如下内容:

  • mysql服务端ID,唯一

  • server-id=2

  • 指定binlog日志

  • log-bin=/var/lib/mysql/mysqlbin

其他配置

  • binlog_format = mixed

  • log-slave-updates = 0(控制 slave 上的更新是否写入二进制日志,默认为0;若 slave 只作为从服务器,则不必启用;若 slave 作为其他服务器的 master,则需启用,启用时需和 log-bin、binlog-format 一起使用,这样 slave 从主库读取日志并重做,然后记录到自己的二进制日志中;)

  • relay-log = mysql-relay-bin(设置中继日志文件基本名)

  • relay-log-index = mysql-relay-bin.index(设置中继日志索引文件名)

  • read-only = 1(设置 slave 为只读,但具有super权限的用户仍然可写)

  • slave_net_timeout = 10(设置网络超时时间,即多长时间测试一下主从是否连接,默认为3600秒,即1小时,这个值在生产环境过大,我们将其修改为10秒,即若主从中断10秒,则触发重新连接动作。)

  1. 执行完毕之后,需要重启Mysql:

service mysql restart;

  1. 执行如下指令 :

change master tomaster_host='192.168.2.21',master_user='repl',master_password='repl',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=120;

指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。

  1. 开启同步操作

  • start slave;

  • show slave status;

可以看到图中显示出来的:IO线程和SQL线程都处于运行状态:

  • Slave_IO_Running:此进程负责 slave 从 master 上读取 binlog 日志,并写入 slave 上的中继日志。

  • Slave_SQL_Running:此进程负责读取并执行中继日志中的 binlog 日志。

这两个进程的状态需全部为 YES,只要有一个为 NO,则复制就会停止。当 Relay_Master_Log_File = Master_Log_File 且 Read_Master_Log_Pos = Exec_Master_Log_Pos 时,则表明 slave 和 master 处于完全同步的状态。

  1. 停止同步操作

stop slave;

验证同步操作

  1. 在主库中创建数据库,创建表,并插入数据 :

create database db01;user db01;create table user(    id   int(11)     not null auto_increment,    name varchar(50) not null,    sex  varchar(1),    primary key (id)) engine = innodb  default charset = utf8;insert into user(id, name, sex)values (null, 'Tom', '1');insert into user(id, name, sex)values (null, 'Trigger', '0');insert into user(id, name, sex)values (null, 'Dawn', '1');
  1. 在从库中查询数据,进行验证 :

  • 在从库中,可以查看到刚才创建的数据库:

  • 在该数据库中,查询user表中的数据:

到此,相信大家对"Replication主从复制机制原理是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

日志 数据 文件 同步 数据库 线程 服务 主从 二进制 中继 原理 备份 配置 机制 内容 引擎 服务器 推送 查询 事务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 互联网科技工作委员会副主任毛军 科技互联网产品 互联网科技与金融科技 科技与互联网发展 互联网科技公司怎么样 广州宏创互联网科技 顺网科技2021年互联网排名 蓝色互联网科技 玖二柒互联网科技公司待遇 深圳前海聚择互联网科技有限公司 中国的互联网科技企业的崛起 华服互联网科技官网 和信科技工业互联网 互联网科技公司营业执照怎么办理 区块链结合互联网科技 科技互联网的核心竞争力 福建互联网展示科技馆设计 普陀区互联网教育科技管理办法 兰石爱特工业互联网科技分公司 丰台科技园 互联网 互联网科技论坛 卓越科技互联网 招聘 恒生科技互联网指数分析 智腾互联网科技有限公司 花神(南京)互联网科技有限公司 东莞新华互联网科技学校 互联网科技实习生岗位 上海乐五互联网科技有限公司 陕西九四连强互联网科技有限公司
0