使用Docker 实现 MySQL 循环复制(一)


1. 实验内容

复制是 MySQL 的一项非常重要的技术,它使服务器能够将更改从一个实例复制到另一个实例,复制技术被广泛应用在水平横向扩展、商业智能和分析、地理数据分布、高可用性与容灾等关键性场景中。
典型的复制拓扑是主/从属服务器的一对多关系,高级复杂复制拓扑有双向复制、循环复制以及多源复制等。本节实验涵盖了在三个独立节点上构建循环复制拓扑的技术内容

本次实验将在一台虚拟机中使用 Docker 容器构建三个 MySQL 循环复制拓扑。


2. 实验环境

准备一台虚拟机。内存大小和处理器核数可以适当减小或增大。

在这里插入图片描述

IP配置为192.168.30.128/24

在这里插入图片描述


3. 安装 Docker 引擎

yum install -y yum-utils device-mapper-persistent-data lvm2
  • 其中,yum-utils 包用来添加和管理 yum 源,device-mapper-persistent-data 和 lvm2 是储存设备映射 (devicemapper) 必须的两个软件包。

在这里插入图片描述在这里插入图片描述

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
  • 添加阿里云 Docker 软件仓库。

在这里插入图片描述

yum repolist
  • 验证仓库源已经添加

在这里插入图片描述

yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 安装 Docker 软件包。
    • docker-ce 是 Docker 的社区版本,提供了构建、发布和运行容器的工具和服务
    • docker-ce-cli 是 Docker 社区版的命令行工具,用来和 Docker 守护进程进行交互
    • containerd.io 是 Docker 运行时的核心组件,提供容器的生命周期、镜像、网络管理等功能
    • docker-compose-plugin 用于在单台主机上管理和编排多个容器的运行

在这里插入图片描述

在这里插入图片描述


4. 启动 Docker,检查 docker 服务状态

  systemctl start docker 
  • 启动docker 服务
systemctl enable docker
  • 设置docker服务在下一次系统启动时自动启动
systemctl status docker
  • 检查 docker 服务状态

在这里插入图片描述


5. 配置 Docker 镜像加速

在某些地区或网络环境下,直接从官方 Docker Hub 下载镜像可能会出现速度慢、不稳定甚至无法连接等问题。这时,通过设置镜像加速站点,可以利用第三方提供的高速镜像服务来解决这些问题

sudo mkdir -p /etc/docker
  • 创建/etc/docker目录,用于存放 Docker 守护进程的配置信息
  • sudo用于暂时提升用户权限
cat > /etc/docker/daemon.json <<"EOF"
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://huecker.io",
        "https://dockerhub.timeweb.cloud",
        "https://noohub.ru"
    ]
}
EOF
  • 这里创建了一个名为 daemon.json 的文件,并将其放在 /etc/docker/ 目录下。这个文件包含了 Docker 守护进程的配置信息,其中包括一个名为 registry-mirrors 的数组,里面列出了多个镜像加速站点的 URL。这些 URL 是第三方镜像加速服务提供商提供的地址,如 DaoCloud、Huecker 和 TimeWeb 等。
    当 Docker 守护进程启动时,它会读取这个配置文件并根据其中的信息去访问镜像加速站点获取镜像。

在这里插入图片描述

systemctl daemon-reload
systemctl restart docker
systemctl status docker
  • 执行 systemctl daemon-reload 和 systemctl restart docker 命令应用更新并重启服务

在这里插入图片描述

docker info
  • 执行 docker info 命令检查有关Docker守护程序及其环境的信息。

在这里插入图片描述
在这里插入图片描述

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 安装Docker 如果您还没有安装Docker,请按照官方文档的说明安装Docker。 2. 创建Docker网络 为了使主从复制工作,我们需要为Docker容器创建一个网络。在命令行中运行以下命令: ``` sudo docker network create mysql_network ``` 3. 启动主数据库 我们将使用官方的MySQL Docker镜像来启动主数据库。在命令行中运行以下命令: ``` sudo docker run -d --name mysql_master --net mysql_network -e MYSQL_ROOT_PASSWORD=password mysql:latest --server-id=1 --log-bin=mysql-bin --binlog-do-db=mydb ``` 这将启动一个名为mysql_master的Docker容器,并将其连接到我们创建的mysql_network网络中。我们还指定了一个root用户的密码,并为该容器分配了一个server-id,以便在创建从数据库时使用。 我们还使用了两个MySQL选项来启用二进制日志记录和仅记录mydb数据库的事务。 4. 启动从数据库 现在我们需要启动另一个MySQL容器作为从数据库。在命令行中运行以下命令: ``` sudo docker run -d --name mysql_slave --net mysql_network -e MYSQL_ROOT_PASSWORD=password mysql:latest --server-id=2 --log-bin=mysql-bin --binlog-do-db=mydb --relay-log=mysql-relay-bin --log-slave-updates=1 --read-only=1 --slave-skip-errors=all --skip-slave-start ``` 这将启动一个名为mysql_slave的Docker容器,并将其连接到我们创建的mysql_network网络中。我们还指定了一个root用户的密码,并为该容器分配了一个server-id。 我们还使用了一些MySQL选项来启用二进制日志记录和仅记录mydb数据库的事务。我们还启用了中继日志记录和从服务器更新主服务器的日志记录。我们还将容器设置为只读模式,并跳过任何从数据库错误。最后,我们将跳过从服务器的启动。 5. 配置主数据库 现在我们需要登录主数据库并为它创建一个用于从服务器的用户。在命令行中运行以下命令: ``` sudo docker exec -it mysql_master mysql -u root -p ``` 输入我们在启动容器时指定的root密码,这将进入MySQL shell。在MySQL shell中,运行以下命令: ``` GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; SHOW MASTER STATUS; ``` 这将创建一个名为slave_user的用户并授予其复制权限。我们还刷新了特权表以确保更改生效。最后,我们显示了主服务器的状态,以便稍后配置从服务器。 请注意,我们在第一行中使用了“%”通配符,以便从任何位置连接到主服务器。在生产环境中,您应该更明确地指定从服务器的IP地址。 6. 配置从数据库 现在我们需要登录从数据库并配置它以连接到主服务器。在命令行中运行以下命令: ``` sudo docker exec -it mysql_slave mysql -u root -p ``` 输入我们在启动容器时指定的root密码,这将进入MySQL shell。在MySQL shell中,运行以下命令: ``` CHANGE MASTER TO MASTER_HOST='mysql_master', MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; START SLAVE; ``` 这将配置从服务器以连接到我们的主数据库,并指定将从哪个二进制日志文件开始复制。我们还启动从服务器以开始复制。 请注意,我们在第一行中使用了主服务器的容器名称(mysql_master)作为主机名。在Docker网络中,容器可以使用其名称进行通信。 7. 测试主从复制 现在,我们已经成功配置了主从复制,我们可以测试它是否正常工作。在MySQL shell中,运行以下命令: ``` USE mydb; CREATE TABLE test (id INT PRIMARY KEY); INSERT INTO test VALUES (1); ``` 这将在主服务器上创建一个名为test的表,并将一行插入其中。我们可以使用以下命令在从服务器上检查是否成功复制: ``` USE mydb; SELECT * FROM test; ``` 如果一切正常,您应该看到与主服务器上插入的相同的行。 现在,我们已经成功地使用Docker部署了MySQL主从复制。请记住,这只是一个简单的示例,用于演示如何设置主从复制。在生产环境中,您应该仔细考虑安全性和高可用性等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值