MySQL实现多源复制的示例代码

 更新时间:2025年08月13日 08:34:57   作者:Victor356  
MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下

MySQL的多源复制(Multi-Source Replication)允许一个从服务器从多个主服务器复制数据。这在需要将多个数据源汇聚到一个数据库实例时非常有用,例如数据汇总和数据仓库场景。

一、多源复制原理

多源复制的原理与单源复制类似,但一个从服务器会有多个复制通道(Replication Channel),每个通道对应一个主服务器。每个通道独立工作,处理各自的二进制日志和中继日志。

二、多源复制配置步骤

2.1 主服务器配置

假设我们有两个主服务器(Master1和Master2)和一个从服务器(Slave)。我们需要配置两个主服务器,使它们能够与从服务器进行复制。

Master1配置

  1. 编辑Master1的MySQL配置文件(通常为/etc/my.cnf/etc/mysql/my.cnf):
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydatabase1  # 指定需要复制的数据库
  1. 重启MySQL服务:
sudo systemctl restart mysql
  1. 创建复制用户并授予权限:
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
  1. 确定二进制日志文件名和位置:
SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      154 | mydatabase1  |                  |
+------------------+----------+--------------+------------------+

Master2配置

配置过程与Master1类似,确保server-id唯一。

  1. 编辑Master2的MySQL配置文件:
[mysqld]
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydatabase2  # 指定需要复制的数据库
  1. 重启MySQL服务:
sudo systemctl restart mysql
  1. 创建复制用户并授予权限:
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
  1. 确定二进制日志文件名和位置:
SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      200 | mydatabase2  |                  |
+------------------+----------+--------------+------------------+

2.2 从服务器配置

  1. 编辑从服务器的MySQL配置文件:
[mysqld]
server-id = 3
relay-log = /var/log/mysql/mysql-relay-bin
log_slave_updates = 1
  1. 重启MySQL服务:
sudo systemctl restart mysql
  1. 在从服务器上配置多个复制通道:
-- 配置从Master1复制的通道
CHANGE MASTER TO
MASTER_HOST='Master1_IP',
MASTER_USER='replica_user',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',  -- Master1的File值
MASTER_LOG_POS=154  -- Master1的Position值
FOR CHANNEL 'channel1';

-- 配置从Master2复制的通道
CHANGE MASTER TO
MASTER_HOST='Master2_IP',
MASTER_USER='replica_user',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',  -- Master2的File值
MASTER_LOG_POS=200  -- Master2的Position值
FOR CHANNEL 'channel2';
  1. 启动多个复制通道:
START SLAVE FOR CHANNEL 'channel1';
START SLAVE FOR CHANNEL 'channel2';
  1. 检查复制状态:
SHOW SLAVE STATUS FOR CHANNEL 'channel1'\G;
SHOW SLAVE STATUS FOR CHANNEL 'channel2'\G;

确保每个通道的Slave_IO_RunningSlave_SQL_Running都显示为Yes

三、处理冲突和监控

多源复制时可能会遇到冲突问题,例如两个主服务器同时修改相同的数据。处理冲突的方法包括:

  1. 应用层解决冲突

    • 在应用层确保不会出现冲突,例如通过数据分区。
  2. 使用复制过滤器

    • 在从服务器上使用复制过滤器,确保只接收特定表或数据库的修改。
[mysqld]
replicate-do-db = mydatabase1
replicate-do-db = mydatabase2
  1. 日常监控
    • 定期监控复制状态,确保没有出现延迟和错误。
SHOW SLAVE STATUS FOR CHANNEL 'channel1'\G;
SHOW SLAVE STATUS FOR CHANNEL 'channel2'\G;

四、总结

MySQL多源复制通过在从服务器上配置多个复制通道,实现从多个主服务器复制数据。配置多源复制需要确保每个主服务器和从服务器的server-id唯一,并分别配置和启动每个复制通道。处理多源复制中的冲突和定期监控复制状态,对于确保数据一致性和系统稳定性至关重要。

到此这篇关于MySQL实现多源复制的示例代码的文章就介绍到这了,更多相关MySQL 多源复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql socket文件作用详解

    mysql socket文件作用详解

    这篇文章主要介绍了mysql socket文件作用的相关资料,需要的朋友可以参考下
    2016-09-09
  • MySQL数据库自增主键的间隔不为1的解决方式

    MySQL数据库自增主键的间隔不为1的解决方式

    这篇文章主要介绍了MySQL数据库自增主键的间隔不为1的解决方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 部署MySQL延迟从库的好处小结

    部署MySQL延迟从库的好处小结

    这篇文章主要给大家介绍了部署MySQL延迟从库的一些好处,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 如何合理使用数据库冗余字段的方法

    如何合理使用数据库冗余字段的方法

    今天小编就为大家分享一篇关于如何合理使用数据库冗余字段的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Windows服务器MySQL中文乱码的解决方法

    Windows服务器MySQL中文乱码的解决方法

    这篇文章主要介绍了MySQL中文乱码的一些解决方案,本文同时分解了MySQL中文乱码的原因分析,需要的朋友可以参考下
    2015-01-01
  • 解决Node.js mysql客户端不支持认证协议引发的问题

    解决Node.js mysql客户端不支持认证协议引发的问题

    这篇文章主要介绍了解决Node.js mysql客户端不支持认证协议引发的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • MySQL学习第四天 Windows 64位系统下使用MySQL

    MySQL学习第四天 Windows 64位系统下使用MySQL

    MySQL学习第四天教大家如何在Windows 64位下使用MySQL,即使用命令行方式完成操作MySQL服务,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Mysql InnoDB和MyISAM区别原理解析

    Mysql InnoDB和MyISAM区别原理解析

    这篇文章主要介绍了Mysql InnoDB和MyISAM区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 查看和修改MySQL最大连接数的完整步骤

    查看和修改MySQL最大连接数的完整步骤

    MySQL的max_connections是控制服务器同时允许的最大客户端连接数的参数,修改的时候要区分临时生效(重启失效)和永久生效(重启保留),且需结合服务器内存合理设置,避免内存耗尽,以下是完整的查看、修改步骤及注意事项,需要的朋友可以参考下
    2025-12-12
  • Mysql数据库性能优化之子查询

    Mysql数据库性能优化之子查询

    这篇文章主要介绍了Mysql数据库性能优化之子查询的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01

最新评论