MySQL 4种常用的主从复制架构

MySQL主从复制是一种常用的数据复制方式,可以实现数据的备份、读写分离等多种功能。MySQL 4种常用的主从复制架构包括基于二进制日志的复制、基于GTID的复制、基于半同步复制和基于组复制。下面将为您详细介绍这四种架构的实现方法。

基于二进制日志的复制

基于二进制日志的MySQL主从复制是最常见的一种方式,实现起来也比较简单。步骤如下:

  1. 在主服务器的my.cnf配置文件中,开启二进制日志功能,并指定日志文件路径和名称。
    bash
    [mysqld]
    log-bin=mysql-bin
  2. 在主服务器上创建一个用于复制的账户,并授予该账户 REPLICATION SLAVE 权限。
    bash
    CREATE USER 'replication'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
  3. 在主服务器上设置一个唯一的 server_id,以便在后续的操作中进行标识。
    bash
    server_id=1
  4. 在从服务器上修改 my.cnf 配置文件,设置唯一的 server_id,并指定需要复制的主服务器的 IP 和端口号。
    bash
    [mysqld]
    server-id=2
    log-bin=mysql-bin
    relay-log=relay-bin
    log-slave-updates=1
    read-only=1
  5. 在从服务器上启动 MySQL 服务,并执行如下命令,将从服务器连接到主服务器开始复制数据。
    bash
    CHANGE MASTER TO
    MASTER_HOST='master_host_name',
    MASTER_USER='replication',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='master1-bin.000001',
    MASTER_LOG_POS=501;
    START SLAVE;

基于GTID的复制

GTID(global transaction identifier)是指全局事务标识符,可以跨越多个服务器,实现数据在不同服务器之间的复制和同步。基于GTID的MySQL主从复制需要先开启GTID功能,步骤如下:

  1. 在主服务器的my.cnf配置文件中,开启GTID功能,并指定日志文件路径和名称。
    bash
    [mysqld]
    gtid_mode=on
    enforce_gtid_consistency=on
    log-bin=mysql-bin
  2. 在从服务器的my.cnf配置文件中,开启GTID功能,指定唯一的 server_id,并设置 read-only。
    bash
    [mysqld]
    gtid_mode=on
    enforce_gtid_consistency=on
    server-id=2
    log-bin=mysql-bin
    relay-log=relay-bin
    log-slave-updates=1
    read-only=1
  3. 在从服务器上启动 MySQL 服务,并执行如下命令,将从服务器连接到主服务器开始复制数据。
    bash
    CHANGE MASTER TO
    MASTER_HOST='master_host_name',
    MASTER_USER='replication',
    MASTER_PASSWORD='password',
    MASTER_AUTO_POSITION=1;
    START SLAVE;

基于半同步复制

半同步复制是指在主服务器写入数据后,至少要等待其中一个从服务器将数据接收成功后,才能继续向前写入数据。这种方式可以避免数据误删除和数据不一致的问题。步骤如下:

  1. 在主服务器的my.cnf配置文件中,开启半同步复制功能。
    bash
    [mysqld]
    plugin-load=semisync_master=semisync_master.so;semisync_slave=semisync_slave.so
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_master_timeout=1000000000
    rpl_semi_sync_slave_enabled=1
  2. 在从服务器的my.cnf配置文件中,开启半同步复制功能,指定唯一的 server_id,并设置 read-only。
    bash
    [mysqld]
    plugin-load=semisync_master=semisync_master.so;semisync_slave=semisync_slave.so
    rpl_semi_sync_slave_enabled=1
    server-id=2
    read-only=1
  3. 在从服务器上启动 MySQL 服务,并执行如下命令,将从服务器连接到主服务器开始复制数据。
    bash
    CHANGE MASTER TO
    MASTER_HOST='master_host_name',
    MASTER_USER='replication',
    MASTER_PASSWORD='password',
    MASTER_PORT=3306,
    MASTER_CONNECT_RETRY=10;
    START SLAVE;

基于组复制

MySQL 5.7 引入了基于组复制的数据复制方式,可以在不同的机器之间进行数据同步。步骤如下:

  1. 在每个参与组复制的 MySQL 节点上,安装并启用 Group Replication 插件。
    bash
    INSTALL PLUGIN group_replication SONAME 'group_replication.so';
  2. 根据需求在节点中指定一个或多个主服务器。
    ```bash
    SET GLOBAL group_replication_bootstrap_group=ON;

START GROUP_REPLICATION;
3. 创建一个用于组同步的用户,并为其分配 REPLICATION SLAVE 权限。bash
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON . TO 'repl_user'@'%';
4. 在每个节点上执行下列命令,将其连接到同一组:bash
SET GLOBAL group_replication_allow_local_disjoint_gtids_join=ON;

SET GLOBAL group_replication_bootstrap_group=OFF;

START GROUP_REPLICATION;
```
示例1:基于GTID的复制

  • 主服务器

在主服务器的my.cnf配置文件中,开启GTID功能,并指定日志文件路径和名称。

[mysqld]
gtid_mode=on
enforce_gtid_consistency=on
log-bin=mysql-bin
  • 从服务器

在从服务器的my.cnf配置文件中,开启GTID功能,指定唯一的 server_id,并设置 read-only。

[mysqld]
gtid_mode=on
enforce_gtid_consistency=on
server-id=2
log-bin=mysql-bin
relay-log=relay-bin
log-slave-updates=1
read-only=1

在从服务器上启动 MySQL 服务并执行如下命令,将从服务器连接到主服务器开始复制数据。需要注意的是,这里的 GTID 需要替换为从主服务器查询到的属于这个 GTID 所在事务内任何语句的集合。

CHANGE MASTER TO
    MASTER_HOST='database.domain.com',
    MASTER_USER='repl_user',
    MASTER_PASSWORD='yourpassword',
    MASTER_AUTO_POSITION=1;
START SLAVE;

示例2:基于半同步复制

  • 主服务器

在主服务器的my.cnf配置文件中开启半同步复制功能。

[mysqld]
plugin-load=semisync_master=semisync_master.so;semisync_slave=semisync_slave.so
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000000000
rpl_semi_sync_slave_enabled=1
  • 从服务器

在从服务器的my.cnf配置文件中,开启半同步复制功能,指定唯一的 server_id,并设置 read-only。

[mysqld]
plugin-load=semisync_master=semisync_master.so;semisync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
server-id=2
read-only=1

在从服务器上启动 MySQL 服务并执行如下命令,将从服务器连接到主服务器开始复制数据。

CHANGE MASTER TO
    MASTER_HOST='database.domain.com',
    MASTER_USER='repl_user',
    MASTER_PASSWORD='yourpassword',
    MASTER_PORT=3306,
    MASTER_CONNECT_RETRY=10;
START SLAVE;

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL 4种常用的主从复制架构 - Python技术站

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

相关文章

  • 如何使用 Node.js 将 MongoDB 连接到您的应用程序

    如何使用 Node.js 将 MongoDB 连接到您的应用程序 安装 MongoDB 和 Node.js 在连接 MongoDB 和 Node.js 之前,需要先安装 MongoDB 和 Node.js。您可以在 MongoDB 官网和 Node.js 官网下载并安装它们。 安装 MongoDB 驱动程序 Node.js 使用驱动程序来与 MongoDB …

    database 2023年5月21日
    00
  • CentOS8下MySQL 8.0安装部署的方法

    以下是CentOS 8下MySQL 8.0安装部署的方法: 准备工作 在安装MySQL之前,需要先安装依赖包和更新系统 sudo yum install -y wget net-tools vim sudo yum update -y 下载MySQL安装包 MySQL官方提供了RPM包安装方式,可以先去官网下载对应版本的rpm包:https://dev.my…

    database 2023年5月22日
    00
  • SQL注入攻防入门详解 [图文并茂] 附示例下载

    SQL注入是一种针对数据库应用程序的攻击手段,通过注入恶意的SQL代码,攻击者可以访问、修改并删除数据库中的数据。为了保护网站免受SQL注入攻击,我们需要了解SQL注入攻击以及如何进行防御。本文将为大家介绍SQL注入攻防入门详解 [图文并茂] 附示例下载。 攻击方式 攻击者可以通过向网站的表单中输入恶意SQL代码来进行SQL注入攻击,常见的攻击方式包括: U…

    database 2023年5月21日
    00
  • .Net平台开发实践的一些点滴总结(技术规范与实践精华)

    .Net平台开发实践的一些点滴总结(技术规范与实践精华)攻略 简介 本篇文章主要介绍在.Net平台上的开发实践,包括技术规范和实践精华。 技术规范 1. 代码规范 在开发中,我们需要遵循一些代码规范,以保证代码的一致性和可维护性。以下是.Net平台开发中一些代码规范: 命名规范:命名应该具有意义并且易于阅读,例如类名应该使用名词单数形式,方法名应该使用动词开…

    database 2023年5月21日
    00
  • Hadoop 和 SQL 性能的差异

    Hadoop和SQL是两种不同的数据存储和处理方法,它们之间的性能差异很大。在本文中,我们将会详细讲解Hadoop和SQL性能的差异,并提供至少两个实例来加深读者对这个话题的理解。 Hadoop和SQL的概述 Hadoop是一个基于Java的开源框架,用于处理大规模数据集。它在分布式环境中运行,并且是一个高度可扩展和可靠的系统。Hadoop由HDFS和Map…

    database 2023年3月27日
    00
  • 数据仓库的特点和功能

    下面是数据仓库的特点和功能的完整攻略。 数据仓库的特点 数据集中:数据仓库是将企业内部各种分散的数据集中存储于一个特定的数据库中。这样做既方便管理、维护,也使得数据易于查询和分析。 面向主题:数据仓库以主题为基本构成单位,这是与传统的事务处理系统和关系数据库最明显的不同之处。在数据仓库中,同一主题的数据要集中存放,便于查询和处理。 面向历史:数据仓库一般不仅…

    database 2023年3月27日
    00
  • PHP实现页面静态化的超简单方法

    下面我会为您详细讲解“PHP实现页面静态化的超简单方法”的完整攻略。这份攻略主要会涉及PHP文件缓存、文件读写等知识点,但是相信您只要按照下面的步骤操作,就一定能够顺利完成页面静态化的过程。 什么是页面静态化 页面静态化指的是,把动态页面变成静态页面,让用户访问静态页面,实现页面高效的访问和提升网站性能的目的。 实现页面静态化的方法 实现页面静态化的方法有很…

    database 2023年5月19日
    00
  • 解决ORA-12170:TNS connect timeout occurred问题

    解决ORACLE数据库连接时出现“ORA-12170:TNS connect timeout occurred”问题的方法如下: 问题分析 此问题通常是由于连接超时或者网络故障所引起。解决方法如下: 解决方案 确认环境配置 首先需要核实环境的配置是否正确。比如确认防火墙是否阻止了连接,确认listener是否启动,以及确认网络是否正常等。 在Linux系统中…

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