ITPub博客

首页 > 数据库 > MySQL > 基于Linux的传统双主复制MySQL8.4搭建文档

基于Linux的传统双主复制MySQL8.4搭建文档

原创 MySQL 作者:梦夕林1992 时间:2026-05-06 18:36:52 0 删除 编辑

无论是用于数据备份、负载均衡还是高可用性,双主复制都是一个非常重要的解决方案。本 文 以MySQL 8.4.28为例,详细讲解如何在Linux环境下搭建传统双主复制架构。

一、环境准备

在开始之前,我们需要准备两台服务器。以下是本次搭建的环境参数:

主机名

物理IP

操作系统版本

MySQL版本

Master1

192.168.186.11

Rhel6.4

MySQL 8.4.28

Master2

192.168.186.12

Rhel6.4

MySQL 8.4.28

注意:如果两台服务器都是全新的,没有数据,可以跳过备份和恢复步骤;如果主库1已有数据,需要按照以下步骤操作。

二、初始化参数设置

在搭建双主复制前,我们需要对两台服务器进行参数配置。

主要配置项:

必须开启binlog;

server-id不能相同;

自增字段根据主机数量设置。

Master1 配置示例( /etc/my.cnf ):


Master2 配置示例( /etc/my.cnf ):

[mysqld]
server_id=2
log-bin=mysql-bin
binlog_format=ROW
auto-increment-increment=2
auto-increment-offset=2
gtid_mode=on
enforce_gtid_consistency=on

更多详细配置请参考历史发布文档,且根据时间环境修改。

三、备份与恢复

如果Master1已有数据,需要先备份再恢复到Master2。

备份Master1 数据:

•  方法一:使用XtraBackup(推荐大数据量场景)

xtrabackup --defaults-file=/etc/my.cnf -uroot -pmysql -S /tmp/mysql.sock --slave-info --backup --target-dir=/xtar

•  方法二:使用mysqldump

mysqldump -uroot -pAbcd321# -S /tmp/mysql.sock --single-transaction -A -R -E --triggers --source-data=2 --flush-logs > full.sql

恢复数据到Master2 :

•  方法一:使用XtraBackup恢复

  全量备份应用redo日志(前滚已提交的事务,回滚未提交的事务)
  xtrabackup --prepare --target-dir=/xtar
  将备份数据从备份位置copy至datadir指定位置
  xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/xtar
  启动目标端MySQL服务
  chown -R mysql:mysql /mysql/product/data
  service mysqld start

•  方法二:使用mysqldump恢复

  启动目标端MySQL服务
  service mysqld start
  恢复数据
  mysql -uroot -pAbcd321# < full.sql

四、创建复制用户

在Master1和Master2上分别创建复制用户,用于数据同步。

在Master1 上执行:

CREATE USER 'backup'@'192.168.186.12' IDENTIFIED BY 'mcbackup';
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.186.12';
FLUSH PRIVILEGES;

在Master2 上执行:

CREATE USER 'backup'@'192.168.186.11' IDENTIFIED BY 'mcbackup';
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.186.11';
FLUSH PRIVILEGES;

五、配置复制连接

Master2 配置复制连接:

目标端发起连接请求生产端 binlog 二进制数据

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.186.11', SOURCE_USER='backup', SOURCE_PASSWORD='mcbackup',SOURCE_PORT=3306,SOURCE_LOG_FILE='master-bin.000083',SOURCE_LOG_POS=120,GET_SOURCE_PUBLIC_KEY=1;

SOURCE_LOG_FILE和SOURCE_LOG_POS 两处根据 XtraBackup 软件备份生成 xtrabackup_binlog_info 文件进行修改 或者根据 mysqldump 备份生成的 sql 文件开头处进行修改。

Master2 启动复制:

START REPLICA;
SHOW REPLICA STATUS\G
……
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……

确认 Slave_IO_Running 和 Slave_SQL_Running 均为 yes ,则复制正常。

Master2获取日志点位 :

mysql> show master status;
+------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                                                                       |
+------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+
| mysql-bin.000021 |     3457 |              |                  | 1ee78358-935c-11ea-b15e-fec9c355c78f:1-760,
2f7e1279-9350-11ea-86ca-ca543df890b3:1-5348 |
+------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+

Master1 配置复制连接:

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.186.12', SOURCE_USER='backup', SOURCE_PASSWORD='mcbackup',SOURCE_PORT=3306,SOURCE_LOG_FILE='mysql-bin.000021',SOURCE_LOG_POS=3457,GET_SOURCE_PUBLIC_KEY=1;

注意:SOURCE_LOG_FILE和SOURCE_LOG_POS需要根据master2 show master status 进行修改。

Master1 启动复制:

START REPLICA;
SHOW REPLICA STATUS\G
……
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……

同样确认 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes 。

七、验证复制状态

通过以下命令可以随时检查复制状态:

SQLSHOW REPLICA STATUS\G

如果一切正常,两台服务器将实现双向数据同步。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29956245/viewspace-3117201/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-10-13

  • 博文量
    90
  • 访问量
    85386