mysql多主双向和级联复制

MySQL多主双向复制

概念

MySQL多主双向复制是指多个MySQL节点在一个环形拓扑结构内进行主从复制。每个节点既可作为主节点,也可作为从节点,同时在同一时间只能存在一个主节点。

环境要求

  • MySQL版本需 >= 5.6.0
  • 每个MySQL节点需在不同的服务器上

操作步骤

  1. 对于每个MySQL节点,配置my.cnf,打开bin-log并设置server-id:
[mysqld]
# 开启bin-log,用于记录所有的数据修改
log-bin=mysql-bin
server-id=1   # 设置server-id,值需要保证唯一
  1. 开启GTID复制:
[mysqld]
# 开启GTID复制
gtid-mode=on
log-slave-updates=on
enforce-gtid-consistency=on
  1. 在每一台MySQL节点上创建一个复制账号,并在服务器的安全组中将各节点的IP加入白名单:
CREATE USER 'replication'@'192.168.x.x' IDENTIFIED BY 'mypassword';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.x.x';
  1. 启动MySQL服务,在节点1上设置节点2为从节点,在节点2上设置节点1为从节点:
# 在节点1执行
CHANGE MASTER TO 
  MASTER_HOST='192.168.x.2',     /* 从节点的IP地址 */
  MASTER_USER='replication', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1;        /* 开启GTID模式 */

# 在节点2执行
CHANGE MASTER TO 
  MASTER_HOST='192.168.x.1',     /* 从节点的IP地址 */
  MASTER_USER='replication', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1;        /* 开启GTID模式 */
  1. 启动从节点的复制:
# 在节点2执行
START SLAVE;
  1. 可以通过以下命令检查复制是否正常工作:
SHOW SLAVE STATUS\G

示例

以下示例展示了如何将两个MySQL节点设置为多主双向复制:

# 配置节点1
[mysqld]
log-bin=mysql-bin
server-id=1
gtid-mode=on
log-slave-updates=on
enforce-gtid-consistency=on

# 配置节点2
[mysqld]
log-bin=mysql-bin
server-id=2
gtid-mode=on
log-slave-updates=on
enforce-gtid-consistency=on
# 在节点1上
CREATE USER 'repl'@'192.168.x.x' IDENTIFIED BY 'mypassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.x.x';

CHANGE MASTER TO 
  MASTER_HOST='192.168.x.2',     
  MASTER_USER='repl', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1;        

START SLAVE;

# 在节点2上
CREATE USER 'repl'@'192.168.x.x' IDENTIFIED BY 'mypassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.x.x';

CHANGE MASTER TO 
  MASTER_HOST='192.168.x.1', 
  MASTER_USER='repl', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1; 

START SLAVE;

MySQL级联复制

概念

MySQL级联复制是指在一个主从环境中,将从节点作为另一个从节点的主节点,进行层级的复制。这样主节点上的数据会在多个从节点之间进行分发和同步。

环境要求

  • MySQL版本需 >= 5.7.7
  • 每个MySQL节点需在不同的服务器上

操作步骤

  1. 在主节点上打开binlog并设置server-id:
[mysqld]
log-bin=mysql-bin
server-id=1      
  1. 在所有从节点上打开binlog并设置server-id:
[mysqld]
log-bin=mysql-bin
server-id=2      
  1. 在从节点1上将其设置为主节点,从节点2和从节点3设置为从节点。
# 在从节点1上
CREATE USER 'repl'@'192.168.x.x' IDENTIFIED BY 'mypassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.x.x';

# 在从节点1设置主节点
CHANGE MASTER TO 
  MASTER_HOST='192.168.x.1',  
  MASTER_USER='repl', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1;  

# 在从节点2和从节点3上
CREATE USER 'repl'@'192.168.x.x' IDENTIFIED BY 'mypassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.x.x';

# 在从节点2和从节点3上设置从节点
CHANGE MASTER TO 
  MASTER_HOST='192.168.x.2', 
  MASTER_USER='repl', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1; 
  1. 启动从节点的复制:
# 在从节点1上
START SLAVE;

# 在从节点2和从节点3上
START SLAVE;

示例

以下示例展示了如何设立三个MySQL节点之间的级联复制:

# 配置主节点
[mysqld]
log-bin=mysql-bin
server-id=1 

# 配置从节点1
[mysqld]
log-bin=mysql-bin
server-id=2      

# 配置从节点2
[mysqld]
log-bin=mysql-bin
server-id=3     
# 在从节点1上
CREATE USER 'repl'@'192.168.x.x' IDENTIFIED BY 'mypassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.x.x';

# 在从节点1设置主节点
CHANGE MASTER TO 
  MASTER_HOST='192.168.x.1',  
  MASTER_USER='repl', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1;  

# 在从节点2和从节点3上
CREATE USER 'repl'@'192.168.x.x' IDENTIFIED BY 'mypassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.x.x';

# 在从节点2设置从节点
CHANGE MASTER TO 
  MASTER_HOST='192.168.x.2', 
  MASTER_USER='repl', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1; 

# 在从节点3上设置从节点
CHANGE MASTER TO 
  MASTER_HOST='192.168.x.2', 
  MASTER_USER='repl', 
  MASTER_PASSWORD='mypassword',
  MASTER_AUTO_POSITION=1; 
# 在从节点1上启动复制
START SLAVE;

# 在从节点2上和从节点3上启动复制
START SLAVE;

注意:级联复制时,从节点上的数据不应该进行修改操作,否则可能会导致复制链中的错误,从而影响到整个环境。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql多主双向和级联复制 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MySQL定时备份方案(利用Linux crontab)

    MySQL定时备份方案是一种常用的数据备份方法,通过利用Linux crontab定时执行自动备份脚本,可以避免手工忘记备份而引起的数据丢失风险。以下是完整的备份攻略,包含两个示例说明。 1. 创建备份脚本 首先,在Linux系统上创建一个MySQL备份脚本。在终端中执行以下命令: sudo nano /usr/local/bin/mysql-backup.…

    database 2023年5月22日
    00
  • 详解Redis命令行模式5种使用方法

    Redis是一个使用内存作为数据存储的开源高性能键值对数据库,它支持多种数据结构,包括字符串,哈希表,集合,有序集合等。通过Redis命令行模式,用户可以方便地使用命令与Redis交互,存储和检索数据。 下面我们将详细讲解Redis命令行模式的完整使用方法,并提供相关代码示例。 Redis安装与启动 首先,我们需要先安装Redis。在Ubuntu系统中,可以…

    Redis 2023年3月18日
    00
  • Oracle别名使用要点小结

    让我为你详细讲解一下“Oracle别名使用要点小结”的完整攻略。 什么是别名 在Oracle中,别名是指为一个或多个表、列、函数等定义一个临时名称,以便于在查询语句中更方便的使用。 别名的作用 别名有多种作用,主要包括: 缩短查询语句长度 提高查询语句的可读性 解决表名或列名过长的问题 允许对同一表使用多个别名,用于解决自连接问题等 别名使用要点 在使用别名…

    database 2023年5月21日
    00
  • Centos下Mysql安装图文教程

    下面是详细讲解“Centos下Mysql安装图文教程”的完整攻略。 安装环境 系统版本:Centos 7.0(64位) 安装Mysql 更新Yum源 bashyum update 安装Mysql bashyum install mysql-server 配置Mysql 启动Mysql服务 bashsystemctl start mysqld 设置Mysql开…

    database 2023年5月22日
    00
  • Redis必须注意的慢查询问题

    今天解析服务在查询Redis的Set数据过程中抛出timeout exception,产生异常的方法是: db.SetMembers(key); 这个API返回结果是指定set内的所有kv对象; 解决这个问题的方法仅仅是使用另一个api: db.SetScan(key); 这个API也是返回set内所有的kv对象。 从功能上来说这2个API是一样的,但是其返…

    Redis 2023年4月12日
    00
  • Linux Swap空间利用率过高问题

    针对Linux Swap空间利用率过高问题,以下是一个完整攻略分为以下步骤: 步骤一:确认Swap空间利用率过高 首先我们需要确认系统的Swap空间利用率是否过高。可以通过以下命令来查看当前系统Swap空间利用情况: $ free -h total used free shared buff/cache available Mem: 3.8Gi 1.5Gi …

    database 2023年5月22日
    00
  • Docker部署springboot项目到腾讯云的实现步骤

    下面是“Docker部署springboot项目到腾讯云的实现步骤”的详细攻略。 准备工作 1. 注册腾讯云账号并创建云服务器 首先需要在腾讯云官网注册账号,并根据自己的需求购买云服务器,选择适当的操作系统及配置,例如选择CentOS 7.6 并购买2核4G,具体配置按照实际需求选择,然后等待服务器创建完成。 2. 安装docker 在服务器上安装docke…

    database 2023年5月18日
    00
  • 如何在Python中使用mysql-connector库连接MySQL数据库?

    以下是如何在Python中使用mysql-connector库连接MySQL数据库的完整使用攻略,包括安装mysql-connector库、连接MySQL数据库、执行SQL语句等步骤。同时,提供了两个示例以便更好解如何使用mysql-connector连接MySQL数据库。 步骤1:安装mysql-connector库 在Python中,我们可以使用pip命…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部