热门标签 | 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 的双主同步配置和验证就完成了。希望本文对您有所帮助,欢迎点赞和关注。


推荐阅读
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
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社区 版权所有