首页 > 数据库 >22、MySQL主从复制详解及配置

22、MySQL主从复制详解及配置

时间:2023-03-30 18:07:00浏览次数:42  
标签:主从复制 22 二进制 复制 MySQL 服务器 日志

主从复制的介绍

MySQL 主从复制是指将一个 MySQL 服务器的数据复制到其他 MySQL 服务器上的过程。在主从复制中,一个 MySQL 服务器(称为“主服务器”或“主节点”)充当源,另一个或多个 MySQL 服务器(称为“从服务器”或“从节点”)充当目标。主服务器将更新和更改记录到二进制日志(binary log)中,并将其发送到从服务器,从服务器然后在自己的副本中执行相同的操作,以保持与主服务器同步。

主从复制的好处是可以将负载分散到多个服务器上,从而提高整个应用程序的性能。此外,可以将主服务器用作备份,以保证数据的安全性。

主从复制过程中需要注意以下几点:

首先需要在主服务器上启用二进制日志,以记录所有的更改操作。
然后需要在主服务器上创建一个可供从服务器使用的账户,并赋予它复制权限。
在从服务器上需要配置主服务器的连接信息和二进制日志的位置,以便从服务器能够正确地获取并应用主服务器上的更改。
在主服务器上进行更改时需要注意潜在的主从同步延迟,以避免在从服务器上执行与主服务器不一致的操作。
从服务器上可以使用“只读”模式来防止在从服务器上执行写操作,以保证数据的一致性
主从复制的可用场景

通过主从复制,可以实现多种应用场景,例如:

1、实现数据备份和灾难恢复。可以将主服务器上的数据复制到多个从服务器上,当主服务器发生故障时,可以快速切换到从服务器上,保障业务的连续性。

2、支持读写分离。可以将读操作分发到从服务器上执行,从而减轻主服务器的压力,提高系统的读取性能。

支3、持分布式计算。可以将不同的业务逻辑部署到不同的服务器上,并通过主从复制实现数据同步,从而实现分布式计算。

主从复制的架构

在 MySQL 中,有以下几种主从复制架构:

1、一主一从复制:即一台 MySQL 服务器作为主服务器,一台 MySQL 服务器作为从服务器,主服务器上的数据更新会同步到从服务器。

22、MySQL主从复制详解及配置_主从复制

2、一主多从复制:即一台 MySQL 服务器作为主服务器,多台 MySQL 服务器作为从服务器,主服务器上的数据更新会同步到所有从服务器。

22、MySQL主从复制详解及配置_主从复制_02

3、多主一从复制:即多台 MySQL 服务器作为主服务器,一台 MySQL 服务器作为从服务器,所有主服务器上的数据更新会同步到从服务器。

4、环形复制:即多台 MySQL 服务器互相作为主从服务器,形成一个环形的复制拓扑结构。

5、级联复制:指在主从复制的基础上,再增加从服务器,并将其中一台从服务器作为其他从服务器的主服务器,实现多层级的数据复制。

主从复制原理

MySQL主从复制是一种异步复制模型,主要包括以下几个组件:

主服务器:主数据库,负责处理所有写操作。

从服务器:副本数据库,主要负责读操作,并从主服务器复制数据。

  • 二进制日志(Binary Log):主服务器的二进制日志记录了所有更改的数据。
  • 中继日志(Relay Log):从服务器的中继日志记录了从主服务器复制的数据。
  • dump线程:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events。
  • SQL线程:从服务器上运行的线程,在中继日志中执行主服务器的更改操作。
  • I/O线程:从服务器上运行的线程,负责从主服务器读取二进制日志。

MySQL主从复制的工作原理如下:

  • 主服务器捕获所有更改的数据,并将这些数据写入二进制日志,通过dump Thread 线程向一个从节点发送日志。
  • 从服务器上的I/O线程连接到主服务器并应用二进制日志记录数据的更改。
  • I/O线程将数据写入从服务器的中继日志。
  • 从服务器上的SQL线程读取中继日志,并在从服务器上执行主服务器的更改操作。

除了以上组件外,MySQL主从复制还有以下几个重要的概念:

  1. 主服务器的位置标识(文件名和位置):标识了主服务器的最后写入二进制日志的位置,从服务器将从主服务器的这个位置开始继续读取二进制日志。
  2. 复制过滤器:可以在主服务器和从服务器上配置,以过滤不需要复制的数据或表。
  3. 多个从服务器:可以配置多个从服务器,以应对大量并发读取请求的场景。

总之,MySQL主从复制通过异步复制将主数据库的数据复制到副本数据库上,从而实现数据备份和读取负载平衡的效果。

主从复制配置

主从服务器mysql版本保持一致

主服务器配置

1、启用二进制日志,并设置全局唯一的ID号

[mysqld]
log_bin
server-id=#
log-basename=master #可选项,设置datadir中日志名称,确保不依赖主机名

server-id的取值范围
1 to 4294967295 (>= MariaDB 10.2.2),默认值为1
0 to 4294967295 (<= MariaDB 10.2.1),默认值为0,如果从节点为0,所有master都将拒绝此slave的连接

2、创建复制账户

grant replication slave on *.* to "copy"@"10.0.0.%" identified by "lgw@1234";

22、MySQL主从复制详解及配置_主从复制_03

3、备份主服务器文件(该步骤主要用于已经使用一段时间的mysql服务器添加从服务器)

mysqldump -uroot -p  -A -F --single-transaction --master-data=1 >/mnt/all.sql

22、MySQL主从复制详解及配置_MySQL_04

4、查看二进制日志的文件和位置开始复制

show master logs;

22、MySQL主从复制详解及配置_主从复制_05

22、MySQL主从复制详解及配置_主从复制_06

从服务器配置

1、启动中继日志

[mysqld]
server_id=# #为当前节点设置一个全局惟的ID号
log-bin
read_only=ON #设置数据库只读,针对supper user无效
relay_log=relay-log #relay log的文件路径,默认值hostname-relay-bin
relay_log_index=relay-log.index #默认值hostname-relay-bin.index

22、MySQL主从复制详解及配置_主从复制_07

2、重启重服务器mysqld

service mysqld restart

22、MySQL主从复制详解及配置_MySQL_08

3、编辑备份的sql文件,配置主服务器地址和二级制日志,还原数据库备份

22、MySQL主从复制详解及配置_主从复制_09

22、MySQL主从复制详解及配置_主从复制_10

4、查看从服务器配置信息

show slave

22、MySQL主从复制详解及配置_MySQL_11

5、启动从服务器线程

start slave;

22、MySQL主从复制详解及配置_主从复制_12

主从服务器相关

1. 限制从服务器为只读

read_only=ON
#注意:此限制对拥有SUPER权限的用户均无效

注意:以下命令会阻止所有用户, 包括主服务器复制的更新

FLUSH TABLES WITH READ LOCK;

2、复制功能相关的文件

  1. master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等
  2. relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地relay log日志的对应关系
  3. mariadb-relay-bin.00000#: 中继日志,保存从主节点复制过来的二进制日志,本质就是二进制日志

22、MySQL主从复制详解及配置_主从复制_13

22、MySQL主从复制详解及配置_主从复制_14

注意:在 MySQL 主从复制中,Master 服务器的二进制日志是不能随意截断的。如果截断了,那么 Slave 服务器就无法正确地进行数据同步,可能会导致数据不一致或丢失;因此,在进行二进制日志清理时,应当先停止数据同步,等待 Slave 服务器将所有需要的数据同步完成后再进行清理操作

总结:创建账户时,需要使用flush privileges;提交刷新权限,不然后导致远程连接情况,出现报错

22、MySQL主从复制详解及配置_MySQL_15

标签:主从复制,22,二进制,复制,MySQL,服务器,日志
From: https://blog.51cto.com/gavenlee/6159961

相关文章

  • LeetCode 222.完全二叉树的结点个数
    1.题目:给你一棵完全二叉树的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第h层,则该层包含1~ 2h 个节点。示例1:输入:root=[1......
  • MySQL、Redis和Elasticsearch比较
    MySQL是一种关系型数据库管理系统,它被广泛用于存储结构化数据。拥有极高的可靠性和安全性,支持ACID事务,并具有良好的扩展性,可以适应高并发访问的场景。Redis是一种内存......
  • Ubuntu22.04Linux安装手册
    Ubuntu22.04系统ISO镜像下载https://mirrors.aliyun.comLive-server-amd64#服务器isoDesktop-amd64#桌面isoInstallUbuntu22.04使用安装介质启动系统当系统使用......
  • MySql基本的简单sql语句
    SQL语句分类必须记住删除语句DELETEFROM表名WHERE条件插入语句简单的插入语句INSERTINTO表名(字段列表)VALUES(值列表)查询出的数据插入到已存在的表中查询出的数......
  • MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing
    MySQL导入数据库1118错误解决方案[ERR]1118-Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOB编辑sql文件,在开头设置一下innodb_strict_mode为0SE......
  • 拒绝“爆雷”!GaussDB(for MySQL)新上线了这个功能
    摘要:智能把控大数据量查询,防患系统奔溃于未然。本文分享自华为云社区《拒绝“爆雷”!GaussDB(forMySQL)新上线了这个功能》,作者:GaussDB数据库。什么是最大读取行一直以来,大......
  • MySQL8给已有表新增自增列赋初始值的问题
    错误1:[22001][1138]Datatruncation:InvaliduseofNULLvalue原因:如果你xxx表已有数据,你是无法新增自增列的,需要中转一下。因为自增列需要是key。解决:第一步,给xxx......
  • Navicat Premium 12连接mysql
    命令行连接数据库查询当前用户修改加密方式设置密码,即可用NavicatPremium12正常登陆 ......
  • 解决ubuntu 20.04、22.04 即新版本 fcitx 无法使用的问题
    前提已在系统设置中将fcitx设置为默认fcitx开机自启配置的过程不在本文讨论范围之内开机自启可通过安装gnome-tweaks配置实现问题分析流程手动启动fcitx时提......
  • MySQL 8.0数据字典有什么变化
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:叶金荣文章来源:GreatSQL社区原创1.......