MYSQL8主从复制

这篇具有很好参考价值的文章主要介绍了MYSQL8主从复制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

image.png


复制的常见应用场景

image.png


主从复制实现基本原理

image.png


MySQL支持的复制类型

image.png


复制解决的问题

image.png


复制过程

image.png
image.png


主从复制失败的原因

image.png


MYSQL8主从复制实现

关键点:
主库创建一个远程用户授予复制权限
主库从库my.cnf配置服务器唯一id;
开启全局事务ID;


1、MYSQL主节点配置HOST

# 在msyql的主从节点配置host
sudo tee -a /etc/hosts << EOF
192.168.1.100 mysql-master
192.168.1.101 mysql-slave1
EOF

2、修改配置文件中的ServerID

my.cnf 文件中启用二进制日志记录,并为其分配一个唯一的服务器 ID
image.png


关闭主节点从节点的mysql服务。

-- 关闭mysql服务
systemctl stop msyqld

主服务器配置

每个数据库实例的服务器ID唯一值

[mysqld]
# 启用binlog日志记录
log-bin=mysql-bin
# 主服务器唯一服务器ID
server-id=1

从服务器配置

注意:请确保此服务器的服务器 ID 不同于主服务器

[mysqld]
# 从服务器唯一服务器ID
server-id=2

修改主从参数–启用全局事务标识符(GTID)

主库备库都要添加下列参数。
https://blog.csdn.net/kang_01/article/details/124415221


image.png

# 修改my.cnf
[mysqld]
# 启用全局事务标识符(GTID),用于标识复制拓扑结构中多个服务器上的事务
gtid_mode=ON
# 使用基于GTID的复制时强制执行严格一致性检查,防止数据不一致性
enforce_gtid_consistency=ON
# 必须参数
# 设置多级复制拓扑结构(包括双master环境),其中一个从属方作为向下游的其他从属方的主节点,则这很有用
# 控制slave数据库 是否把 从master 接受到的log 合并在 本slave 执行的内容记录到slave的二进制日志中
log_slave_updates=1

重启MySQL服务

保存配置后,启动mysql服务

# 重启mysql服务
systemctl restart msyqld

3、主库创建用户repl@%并授权

主库上执行。

-- 为主库创建repl用户
CREATE USER 'repl'@'%.example.com' IDENTIFIED WITH mysql_native_password BY 'password';

-- 为repl用户授权 在所有库.表上 均有REPLICATION SLAVE权限
-- REPLICATION SLAVE权限允许用户作为从服务器连接到主服务器,并接收主服务器上更改的副本
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';

-- 应用权限配置
FLUSH PRIVILEGES;

image.png

-- 锁定所有表并防止数据写入。这将确保您的备份是一致的,并且不会在正在进行复制时被更改。
FLUSH TABLES WITH READ LOCK;

查看主库的binlog位置和binlog名称

将这些值记录下来,因为它们将在配置从服务器时使用。

-- 查看二进制日志的名称和位置。
SHOW MASTER STATUS;

释放表锁

-- 释放表锁
UNLOCK TABLES;

4、从库开始主从复制

从库上执行。
MASTER_AUTO_POSITION = 1 启用自动复制拓扑,能实现自动切换主库
启用 MASTER_AUTO_POSITION = 1自动拓扑参数后,从库自动记录每个从库当前所处的拓扑位置,当发生主库故障切换时,从库会自动尝试连接新的主库,并根据之前记录的拓扑位置信息重新开始复制数据,从而实现自动切换主库,避免了手动干预的繁琐操作。

-- 配置从库连接到主库,准备执行复制数据
-- MASTER_AUTO_POSITION = 1 启用自动复制拓扑
CHANGE MASTER TO
MASTER_HOST = 'master.example.com',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'password',
MASTER_AUTO_POSITION = 1;

image.png


主从复制其他参数示范

MASTER_LOG_FILE MASTER_LOG_POS 的值应该是您在步骤3中记录的binlog的位置和名称

MASTER_LOG_POS = 107 指定主库binlog文件当前正在写入的位置(偏移量)。这个参数的值是一个整数。
在主从复制中,从库会连到主库获取主库binlog文件,然后从上次读取的位置继续读新的日志数据
因此,MASTER_LOG_POS 参数以及相关的 MASTER_LOG_FILE 参数对于从服务器来说非常重要,它们告诉从服务器应该从哪里开始读取主服务器的日志数据。

-- 配置从库连接到主库,准备执行复制数据
CHANGE MASTER TO
MASTER_HOST = 'master.example.com',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_AUTO_POSITION = 1,
MASTER_LOG_POS = 107;

启动从库复制进程

-- 启动从库复制进程:
START SLAVE;

-- 检查从库的状态
SHOW SLAVE STATUS\G;

image.png


5、测试主从复制是否生效

-- 在主库上创建数据库
CREATE database scott;

-- 在主库上创建表
CREATE TABLE scott.emp(
    empno FLOAT(4),
    ename VARCHAR(10),
    job VARCHAR(9),
    hiredate DATE,
    sal FLOAT(7, 2),
    comm FLOAT(7.2),
    deptno FLOAT(2)
);

从库查看:

--  进入scott库
use scott;

-- 查看有哪些表
show tabtles;

image.png文章来源地址https://www.toymoban.com/news/detail-428039.html

到了这里,关于MYSQL8主从复制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker 安装mysql8 实现互为主从

    先按照这个目录结构创建。 mysql.conf 配置,mysql的基础可以在此添加 mysql-master下conf配置 mysql-slave下conf配置  注意我指定了数据库为test_db  注意:我使用的mysql用户为默认root,可以自行创建其他用户访问数据库。 在mysql文件夹下执行   如上图所示表示mysql创建成功。 获取主服

    2024年02月22日
    浏览(1)
  • Docker部署mysql8.x版本互为主从

    两台服务器拉取mysql8.x镜像 192.168.197.136 192.168.197.137 docker pull mysql:8.0.28 两台服务器配置免密登录 生成秘钥   ssh-keygen   (一路回车默认即可) ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.197.137    将公钥发送到另一个节点 ssh root@192.168.197.137    测试是否是免密登录 然后来构建m

    2023年04月11日
    浏览(1)
  • prometheus监控mysql8.x以及主从监控告警

    mysql8.x主从部署请看下面文档 docker和yum安装的都有 Docker部署mysql8.x版本互为主从_争取不加班!的博客-CSDN博客 Mysql8.x版本主从加读写分离(一) mysql8.x主从_myswl8双主一从读写分离_争取不加班!的博客-CSDN博客 安装部署mysqld_exporter wget https://github.com/prometheus/mysqld_exporter/releas

    2024年02月16日
    浏览(1)
  • MySQL8.0+数据库GTID主从模式搭建

    参见: MySQL数据库8.0+版本部署安装-CSDN博客 部署环境[例]: 主库:192.168.179.153:3306 从库:192.168.179.154:3306 主从库开启GTID模式 // 主从库均修改,修改从库配置文件,在[mysqld]下添加如下配置 $ vim /etc/my.cnf gtid_mode = on enforce_gtid_consistency = on 需检查server-id配置,为主从架构中的所有

    2024年02月04日
    浏览(1)
  • 基于docker-compsoe.yml配置mysql8.0主从 (需要进入主从容器执行命令)

    主my.cnf文件 从my.cnf文件 主要的yml配置 主容器的操作 进入主mysql容器 3306端口的 docker exec -it 容器id /bin/bash 登录mysql mysql -uroot -p 创建主从复制的账号 - 创建用户slave,密码123456 CREATE USER \\\'slave\\\'@\\\'%\\\' IDENTIFIED BY \\\'123456\\\'; 授权主从复制 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO \\\'slave\\\'@

    2024年02月16日
    浏览(2)
  • 详解MySQL主从复制

    目录 1.概述 2.配置使用 2.1.master配置 2.2.slave配置 2.3.认主 2.4.确认认主结果 3.请求分发 3.1.概述 3.2.手动分发 3.2.1.原生JDBC 3.2.2.数据源 3.2.3.中间件 在实际的数据密集型应用中,数据库层面往往呈现两个特点: 单点数据库难以扛得住。 读操作远远多于写操作。 综上所述我们可以

    2024年02月06日
    浏览(1)
  • MySQL数据库——主从复制

    在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似

    2024年02月11日
    浏览(1)
  • docker实现mysql 主从复制

                                                                   💧记录一下如何在Docker中启动两个MySQL容器来进行主从复制💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数据结构与算法》专栏的

    2023年04月11日
    浏览(1)
  • MySQL 主从复制与读写分离

    2024年02月06日
    浏览(45)
  • mysql(十)mysql主从复制--主库切换

    可能为了更迭升级服务器,或者主库出现问题,又或者只是希望重新分配容量,此时需要切换主库。 如果这是计划内的切换,会相对容易点。只需要在从库上使用 CHANGE MASTER TO 命令,并设置合适的值。大多数的值都是可选的,至少要指定需要改变的项即可。从库将抛弃之前的

    2024年02月09日
    浏览(1)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包