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日

相关文章

  • mysql如何实现最大连接数

    MySQL通过限制连接数来控制并发访问的数量,从而确保系统的稳定性,并避免资源过度占用。在 MySQL 中,最大的同时连接数由系统配置控制,可通过以下几种方法进行设置。 方法1:修改MySQL配置文件 MySQL 的最大连接数量通常由 max_connections 参数控制。此参数的默认值为 151,可以通过直接修改 MySQL 配置文件进行更改: 打开 …

    database 2023年5月22日
    00
  • CentOS系统下Redis安装和自启动配置的步骤

    下面是CentOS系统下Redis安装和自启动配置的步骤的完整攻略: 安装Redis 确认CentOS已添加EPEL软件源:在终端输入命令 sudo yum install epel-release,如果已经安装会提示已存在。 安装Redis:在终端输入命令 sudo yum install redis,并按照提示操作。 启动Redis:在终端输入命令 su…

    database 2023年5月22日
    00
  • 三表左连接查询的sql语句写法

    三表左连接查询是SQL语句中常见的一种查询方式。它可以在多张表中查找符合条件的结果,并将多张表的数据以特定的关联方式进行合并,以得到更为完整的信息。 下面介绍三表左连接查询的SQL语句写法和实例: SQL语句写法: SELECT A.*, B.*, C.* FROM table_A A LEFT JOIN table_B B ON A.id = B.a_id…

    database 2023年5月21日
    00
  • 详解Redis RDB的持久化方法

    Redis RDB持久化介绍 Redis 是一个开源的高性能键值对存储数据库,提供多种不同的持久化方式,其中 RDB 持久化是其中一种。RDB 持久化可以将 Redis 的数据和状态以快照的方式保存到磁盘上。 在 Redis 中进行 RDB 持久化的过程就是将 Redis 内存中的数据转化为二进制格式并写入到一个文件中。我们可以通过读取这个文件来还原 Red…

    Redis 2023年3月21日
    00
  • 如何利用Oracle命令解决函数运行错误

    当使用Oracle数据库的时候,我们经常会遇到函数出现错误的情况。这时我们可以使用一些Oracle命令来排查问题并解决它们。下面是一些可以帮助我们解决函数运行错误的方法: 常用Oracle命令 1. SHOW ERROR SHOW ERROR命令可以显示上一次运行时出现的错误,例如: SQL> CREATE OR REPLACE FUNCTION cr…

    database 2023年5月21日
    00
  • 解析java.library.path和LD_LIBRARY_PATH的介绍与区别

    下面是关于“解析java.library.path和LD_LIBRARY_PATH的介绍与区别”的完整攻略: 介绍 在Java应用程序中有时需要调用一些本地的动态链接库(Dynamic Link Library,简称DLL),而这些DLL可能要求放在一些特定的系统路径下才能被程序正确地找到和加载。这时候就需要使用到两个环境变量:java.library.pa…

    database 2023年5月21日
    00
  • 使用Jedis操作Redis-使用Java语言在客户端操作—对Sorted-Sets的操作

        1 //对Sorted-Sets操作 2 /** 3 * Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。 4 * 它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。 5 * 然而需要额外指出…

    Redis 2023年4月12日
    00
  • Django中操作redis

    1.Django中操作redis  安装django-redis模块 1 pip3 install django-redis   在setting配置: 1 2 3 4 5 6 7 8 9 10 11 12 # reids_configure CACHES = {     “default”:{         “BACKEND”: “django_redi…

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