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

yizhihongxing

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日

相关文章

  • redis无法获取连接原因分析

    redis无法获取连接原因分析 1、linux开启与关闭redis服务器的方式 服务器的启动 启动服务器参数启动    redis-server –port 端口号 启动服务器–配置文件启动      redis-server  config_file_name(配置文件) 默认启动   redis-server 客户端启动 redis-cli [-h …

    Redis 2023年4月13日
    00
  • rman备份脚本和rman增量备份脚本分享

    RMAN是Oracle官方提供的备份和恢复工具,在数据库备份和恢复方面有着很好的性能和稳定性。因此,Oracle管理员必须掌握RMAN备份和恢复技术。下面是分享两个常用的RMAN备份脚本。 1. RMAN全备份脚本 RMAN全备份脚本是备份整个数据库,包括数据文件、控制文件、归档日志。这个脚本要求在每次备份之前手动修改备份目录、备份标签和备份后是否自动清除过…

    database 2023年5月22日
    00
  • laravel使用redis监听在内部再次使用redis遇到的问题

    问题一:启用监听收不到过期时间消息,原因是未开启配置解决办法是 在redis配置文件内开启 notify-keyspace-events Ex或者在redis命令行 redis-cli 使用命令: config set notify-keyspace-events Ex 问题二:PredisConnectionConnectionException : Er…

    Redis 2023年4月11日
    00
  • 运维角度浅谈MySQL数据库优化(李振良)

    《运维角度浅谈MySQL数据库优化(李振良)》是一篇非常实用的MySQL数据库优化指南。如何通过优化索引、调整参数等手段提高MySQL数据库性能,是每个MySQL数据库管理员都需要掌握的基本技能。以下是运维角度浅谈MySQL数据库优化的完整攻略: 一、查看MySQL数据库的配置 在进行MySQL数据库优化之前,首先需要查看MySQL数据库的配置。命令如下: …

    database 2023年5月19日
    00
  • 详解如何使用Python操作MySQL的各种功能

    讲解如下: 一、准备工作 在使用Python操作MySQL之前,需要安装好Python和MySQL模块。Python和MySQL各个版本之间存在一定的兼容性问题,需要进行适当的配合。下面是使用pip命令安装Python和MySQL模块的方式: # 安装MySQL相关模块 pip3 install mysql-connector # 使用mysql驱动 pip…

    database 2023年5月22日
    00
  • MySQL中dd::columns表结构转table过程及应用详解

    MySQL中dd::columns表结构转table过程及应用详解 在MySQL中,我们经常需要获取某张表的结构信息,这时可以使用SHOW COLUMNS FROM table_name命令来实现。但是,在某些场景下,我们需要将多张表的结构信息保存在一个单独的表中进行统计分析,因此需要将SHOW COLUMNS命令的结果转为表格式,这时就可以使用dd::co…

    database 2023年5月22日
    00
  • mysql中,now()函数和sysdate()函数有什么区别?

    问题描述:   今天在看mysql的时间函数,now()和sysdate(),记录下两者之间有什么不同. 实验过程: 1.执行以下的两个语句: mysql> select now(),sleep(2),now(); +———————+———-+———————+ | now() | sl…

    MySQL 2023年4月13日
    00
  • mysql kill process解决死锁

          SHOW PROCESSLIST 2、 查询语句把表锁住了, 赶紧找出第一个Locked的thread_id, 在MySQL的shell里面执行. kill  id #!/bin/bashmysql -u root -e “show processlist” | grep -i “Locked” >> locked_log.txt f…

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