温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-10-12 10:24:11 来源:亿速云 阅读:129 作者:iii 栏目:编程语言

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

复制概述

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

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

复制原理

MySQL 的主从复制原理如下Replication主从复制机制原理是什么

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

  • 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;

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

字段含义:

  • 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 to
master_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;

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

可以看到图中显示出来的: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. 在从库中查询数据,进行验证 :

  • 在从库中,可以查看到刚才创建的数据库: Replication主从复制机制原理是什么

  • 在该数据库中,查询user表中的数据: Replication主从复制机制原理是什么

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI