热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker环境下MySQL双主同步配置指南

本文介绍了如何在Docker环境中配置MySQL的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。

一、背景

在高可用性和数据冗余的需求下,MySQL 的双主同步配置是一个常见的解决方案。本文将详细介绍如何在 Docker 环境中实现这一配置。

二、具体操作

1、创建目录结构

首先,我们需要创建必要的目录结构来存放 MySQL 的数据和配置文件。假设我们的工作目录为 ~/test/mysql_test1,目录结构如下:

~/test/mysql_test1
-- mysql
   -- mone
      -- data
      -- conf
         -- my.cnf
   -- mtwo
      -- data
      -- conf
         -- my.cnf

2、配置文件编写

接下来,我们需要编写两个主节点的配置文件 my.cnf

Mone: my.cnf

[mysqld]
server_id = 1
log-bin = mysql-bin
replicate-ignore-db = mysql
replicate-ignore-db = sys
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
read-Only= 0
relay_log = mysql-relay-bin
log-slave-updates = on
auto-increment-offset = 1
auto-increment-increment = 2
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

Mtwo: my.cnf

[mysqld]
server_id = 2
log-bin = mysql-bin
replicate-ignore-db = mysql
replicate-ignore-db = sys
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
read-Only= 0
relay_log = mysql-relay-bin
log-slave-updates = on
auto-increment-offset = 2
auto-increment-increment = 2
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

3、创建并启动 Docker 容器

使用以下命令创建并启动两个 MySQL 容器:

// 创建并启动 mone 容器
docker run --name monemysql -d -p 3317:3306 -e MYSQL_ROOT_PASSWORD=root -v ~/test/mysql_test1/mone/data:/var/lib/mysql -v ~/test/mysql_test1/mone/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7

// 创建并启动 mtwo 容器
docker run --name mtwomysql -d -p 3318:3306 -e MYSQL_ROOT_PASSWORD=root -v ~/test/mysql_test1/mtwo/data:/var/lib/mysql -v ~/test/mysql_test1/mtwo/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7

4、容器设置

mone 容器设置:

// 进入 mone 容器
docker exec -it monemysql mysql -u root -p

// 创建一个用于同步的用户
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

// 查看主库状态,记录 File 和 Position 的值
SHOW MASTER STATUS;

mtwo 容器设置:

// 进入 mtwo 容器
docker exec -it mtwomysql mysql -u root -p

// 设置主库链接
CHANGE MASTER TO 
  MASTER_HOST='172.17.0.11', 
  MASTER_USER='slave', 
  MASTER_PASSWORD='123456', 
  MASTER_LOG_FILE='mysql-bin.000004', 
  MASTER_LOG_POS=154, 
  MASTER_PORT=3306;

// 创建一个用于同步的用户
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

// 启动同步
START SLAVE;

// 查看主库状态
SHOW MASTER STATUS;

设置完成后,再次进入 mone 容器,设置 mtwo 为主库:

// 进入 mone 容器
docker exec -it monemysql mysql -u root -p

// 设置 mtwo 主库链接
CHANGE MASTER TO 
  MASTER_HOST='172.17.0.12', 
  MASTER_USER='slave', 
  MASTER_PASSWORD='123456', 
  MASTER_LOG_FILE='mysql-bin.000004', 
  MASTER_LOG_POS=443, 
  MASTER_PORT=3306;

// 启动同步
START SLAVE;

配置完成后,可以通过以下命令验证双主同步是否成功:

// 在 mone 容器中
SHOW SLAVE STATUS\G;

// 在 mtwo 容器中
SHOW SLAVE STATUS\G;

如果两个容器中的 Slave_IO_RunningSlave_SQL_Running 均为 Yes,则说明双主同步配置成功。

三、验证

1、在 mone 库中操作:

CREATE DATABASE mone_demo;
USE mone_demo;
CREATE TABLE userinfo (username VARCHAR(50), age INT);
INSERT INTO userinfo VALUES ('Tom', 18);
SELECT * FROM userinfo;

2、在 mone 库操作完后,在 mtwo 库中查看验证:

USE mone_demo;
SELECT * FROM userinfo;

可以看到,数据已经同步到 mtwo 库中。

3、在 mtwo 库中,新增记录:

INSERT INTO userinfo VALUES ('mtwo', 20);

在 mone 库中查看,发现在 mtwo 库中新增的记录也同步到了 mone 库中。

4、继续验证,在 mtwo 库中新增一个数据库:

CREATE DATABASE mtwo_demo;

在 mone 库中查看验证:

SHOW DATABASES;

可以看到,新创建的数据库已经同步到了 mone 库中。

至此,MySQL 的双主同步配置和验证就完成了。希望本文对您有所帮助,欢迎点赞和关注。


推荐阅读
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 数据类型和操作数据表2.1MySQL类型之整型2.2MySQL数据类型之浮点型2.3日期时间型DATE1支持时间:1000年1月1日~9999年12月31日DATETIME ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
author-avatar
Genesis Gaming
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有