mysql多主双向和级联复制

yizhihongxing

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日

相关文章

  • PHP分页效率终结版(推荐)

    PHP分页效率终结版(推荐)攻略 什么是分页? 分页,即将较大的数据集合分为若干个页面显示,一般常见于数据量较大的网站,如新闻网站、电商网站等。 PHP分页的基本原理 在PHP中,分页的基本原理就是根据传入的当前页数和每页显示的数据数量进行计算,从数据库中查询相应数量的数据,最后在前端渲染出分页导航条和当前页的数据。 在计算分页的过程中,一般会用到以下几个关…

    database 2023年5月19日
    00
  • 详解Linux中PostgreSQL和PostGIS的安装和使用

    详解Linux中PostgreSQL和PostGIS的安装和使用 安装 PostgreSQL 更新系统软件包: bash sudo apt-get update sudo apt-get upgrade 安装 PostgreSQL: bash sudo apt-get install postgresql 安装完成后,可以使用下面的命令检查 PostgreS…

    database 2023年5月22日
    00
  • 详解Java中的OkHttp JSONP爬虫

    我们来详细讲解一下如何使用 Java 中的 OkHttp 完成一款 JSONP 爬虫。 OkHttp 什么是 OkHttp OkHttp 是一个开源的 HTTP 网络请求库,具有以下特点: 支持 HTTPS 和 HTTP/2。 支持同步和异步请求。 支持连接池和头部验证缓存等常见的 HTTP 功能。 网络请求封装简单,使用方便。 安装和引入 使用 OkHtt…

    database 2023年5月21日
    00
  • Redis锁机制处理高并发

    文章正文   这里我们主要利用Redis的setnx的命令来处理高并发。 setnx 有两个参数。第一个参数表示键。第二个参数表示值。如果当前键不存在,那么会插入当前键,将第二个参数做为值。返回 1。如果当前键存在,那么会返回0。 创建库存表 CREATE TABLE `storage` (   `id` int(11) unsigned NOT NULL …

    Redis 2023年4月12日
    00
  • Linux(CentOS7)使用 RPM 安装 mysql 8.0.11的教程

    当我们需要在 Linux(CentOS7)上安装 MySQL 时,可以选择 RPM 安装,下面是详细步骤: 步骤1:下载 RPM 安装包 在 MySQL 官网(https://dev.mysql.com/downloads/mysql/)下载对应版本的 RPM 安装包: #选择版本后单击“Download”按钮,进入下载页面 $ wget https://d…

    database 2023年5月22日
    00
  • mysql中 datatime与timestamp的区别说明

    MySQL 中的 DATEIME 和 TIMESTAMP 类型都用于存储日期和时间,但它们的存储和工作方式不同。下面详细讲解它们的区别说明。 DATETIME 类型 DATETIME 类型用于存储日期和时间。它使用 8 个字节存储时间和日期,其中前 4 个字节存储日期值,后 4 个字节存储时间值。DATETIME 类型可以存储从 1000 年到 9999 年…

    database 2023年5月22日
    00
  • Php中使用Select 查询语句的实例

    下面是关于在PHP中使用Select查询语句的攻略: 1. 准备工作 在使用Select查询语句前,需要进行以下准备工作: 1.1 连接数据库 在PHP中连接数据库需要使用mysqli扩展或PDO扩展,这里以mysqli扩展为例,代码如下: // 创建连接 $conn = new mysqli($servername, $username, $passwor…

    database 2023年5月21日
    00
  • centos7 安装mysql5.7(源码安装)

    Centos7将默认数据库mysql替换成了Mariadb 在接下来的mysql安装过程中,请一定保证自己当前所在目录是正确的!  e g: [root@localhost ~]# 表示当前目录为~ [root@localhost mysql]# 表示当前目录为mysql 一、安装MySQL 1、下载安装包mysql-5.7.17-linux-glibc2.…

    MySQL 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部