首页 > 数据库 >Ubuntu22.04 + Mysql5.7 + Docker + 主备复制方案

Ubuntu22.04 + Mysql5.7 + Docker + 主备复制方案

时间:2024-08-03 11:41:00浏览次数:10  
标签:容器 slave Ubuntu22.04 MySQL MYSQL master mysql 主备 Docker

同时运行两个 MySQL 5.7 容器。这种方式可以实现数据库的主-备复制架构,提高系统的可靠性。

下面是一个示例,演示如何运行两个 MySQL 5.7 容器,一个作为主节点,一个作为备节点:

1. 运行主 MySQL 容器:

  sudo docker run -d \
  --name mysql-57-master \
  --restart=always \ 
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=master_password \
  -e MYSQL_DATABASE=my_database \
  -v mysql-master-data:/var/lib/mysql \
  mysql:5.7
   
 

这里我们创建了一个名为 mysql-57-master 的容器,并将 root 密码设置为 master_password。我们还创建了一个名为 my_database 的数据库,并将数据存储在名为 mysql-master-data 的 Docker 卷中。

2. 运行备 MySQL 容器:

  sudo docker run -d \
  --name mysql-57-slave \
  --restart=always \ 
  -p 3307:3306 \
  -e MYSQL_ROOT_PASSWORD=slave_password \
  -e MYSQL_REPLICATION_SOURCE=mysql-57-master \
  -e MYSQL_REPLICATION_USER=repl_user \
  -e MYSQL_REPLICATION_PASSWORD=repl_password \
  -v mysql-slave-data:/var/lib/mysql \
  mysql:5.7
  
  

与正在运行的容器进行交互:

image.png

docker exec -it mysql-57-master bash

这里我们创建了一个名为 mysql-57-slave 的容器,并将 root 密码设置为 slave_password。我们还设置了一些环境变量来配置主-备复制:

  • MYSQL_REPLICATION_SOURCE: 指定主 MySQL 容器的名称
  • MYSQL_REPLICATION_USER: 指定用于复制的用户名
  • MYSQL_REPLICATION_PASSWORD: 指定用于复制的密码

同样,我们将数据存储在名为 mysql-slave-data 的 Docker 卷中。

停止容器

sudo docker stop mysql-57-master
sudo docker stop mysql-57-slave

通过这种方式,我们可以在两个独立的 MySQL 容器中运行主-备复制架构。主容器接收所有的写入请求,备容器会自动同步主容器的数据。这种方式可以提高数据库的可靠性和高可用性。

还可以根据需要添加更多的备节点容器,并配置复制拓扑。此外,可以使用负载均衡器来分发读写请求,进一步提高系统的性能和可扩展性。

3. 登录MySQL并创建数据库和用户

-- 登录MySQL
docker exec -it mysql-57-master bash
mysql -u root -p

-- 创建数据库
CREATE DATABASE db_test;

-- 创建用户并授权
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON db_test.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

4. mysql workbench 安装

wget https://downloads.mysql.com/archives/get/p/8/file/mysql-workbench-community_8.0.36-1ubuntu22.04_amd64.deb

sudo dpkg -i mysql-workbench-community_8.0.36-1ubuntu22.04_amd64.deb
  1. 主-备复制配置:

    • 在主容器上,需要开启二进制日志记录(log-bin)并配置服务器 ID。
    • 在备容器上,需要配置连接主容器的复制用户凭证,以及复制过滤规则。
    • 可以使用 Docker 环境变量或自定义的 MySQL 配置文件来完成这些配置。
  2. 主-备切换:

    • 如果主节点发生故障,需要将备节点提升为新的主节点。这需要手动执行一些 MySQL 命令,或者使用自动化工具来实现。
    • 当主节点恢复后,可以将其重新配置为备节点,与新的主节点进行数据同步。
  3. 备份和恢复:

    • 可以定期备份主节点的数据,例如使用 mysqldump 命令。备份数据可以存储在主机上或者其他存储系统中。
    • 如果需要进行数据恢复,可以将备份数据导入到新的 MySQL 容器中,并将其配置为备节点加入到复制拓扑中。
  4. 监控和报警:

    • 需要监控主-备复制的状态,确保复制正常进行。可以使用 MySQL 命令或者第三方监控工具来实现。
    • 当出现复制延迟或者主节点故障时,需要及时发送报警通知,以便及时采取措施。
  5. 负载均衡:

    • 可以使用负载均衡器将读写请求分发到主节点和备节点,提高系统的性能和可用性。
    • 需要根据业务需求,合理分配读写请求,以确保主节点不会过载。

总的来说,使用 Docker 运行两个 MySQL 容器实现主-备复制架构需要一些额外的配置和管理工作,但可以显著提高数据库系统的可靠性和高可用性。您需要根据具体的业务需求,合理规划和配置主-备复制拓扑,并建立完善的监控和报警机制。

Docker Compose的方式配置主从复制

在 Docker Compose 中,卷(volumes)可以用来持久化数据,以确保即使容器被删除,数据仍然保留。以下是详细的配置和说明。

docker-compose.yml 示例

version: '3.8'

services:
  mysql-master:
    image: mysql:5.7
    container_name: mysql-master
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_REPLICATION_USER: repl_user
      MYSQL_REPLICATION_PASSWORD: repl_password
      MYSQL_DATABASE: exampledb
    ports:
      - "3306:3306"
    volumes:
      - master_data:/var/lib/mysql
    command: >
      --server-id=1
      --log-bin=mysql-bin
      --binlog-do-db=exampledb

  mysql-slave:
    image: mysql:5.7
    container_name: mysql-slave
    depends_on:
      - mysql-master
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_REPLICATION_USER: repl_user
      MYSQL_REPLICATION_PASSWORD: repl_password
    ports:
      - "3307:3306"
    volumes:
      - slave_data:/var/lib/mysql
    command: >
      --server-id=2
      --relay-log=relay-log-bin
      --log-slave-updates
      --read-only=1

volumes:
  master_data:
  slave_data:

卷的配置和作用
在这个配置中:

volumes: 定义了两个卷:master_data 和 slave_data。
在 mysql-master 服务中,卷 master_data 挂载到容器内的 /var/lib/mysql 目录。这是 MySQL 存储数据的默认位置。
在 mysql-slave 服务中,卷 slave_data 也挂载到容器内的 /var/lib/mysql 目录。
这些卷的配置确保了 MySQL 容器中的数据可以持久化,即使容器被删除或重新创建,数据仍然保留。

创建和启动服务
创建 docker-compose.yml 文件:
在你的项目目录下创建一个名为 docker-compose.yml 的文件,并将上述内容粘贴进去。

启动 Docker Compose:
在项目目录中运行以下命令来启动服务:

docker-compose up -d

检查卷:
你可以使用以下命令查看创建的卷:

docker volume ls

配置主从复制
进入主节点容器并创建复制用户:

docker exec -it mysql-master mysql -uroot -proot_password

在 MySQL shell 中执行以下命令:

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

记录 File 和 Position:
记录下 SHOW MASTER STATUS 命令的输出中的 File 和 Position 值。

配置从节点:
进入从节点容器:

docker exec -it mysql-slave mysql -uroot -proot_password

在 MySQL shell 中执行以下命令,替换 <master_log_file> 和 <master_log_pos> 为你记录的值:

CHANGE MASTER TO
  MASTER_HOST='mysql-master',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='repl_password',
  MASTER_LOG_FILE='<master_log_file>',
  MASTER_LOG_POS=<master_log_pos>;
START SLAVE;

验证从节点状态:

SHOW SLAVE STATUS \G

确保 Slave_IO_Running 和 Slave_SQL_Running 都显示为 Yes。

通过这些步骤,你可以在 Docker Compose 中配置和运行 MySQL 主从复制,并确保数据持久化。

标签:容器,slave,Ubuntu22.04,MySQL,MYSQL,master,mysql,主备,Docker
From: https://www.cnblogs.com/lvdongjie/p/18340268

相关文章

  • Ubuntu22.04 + 阿里云Docker安装及镜像加速
    1.docker安装1.1阿里云方式安装(https://developer.aliyun.com/article/110806)使用官方安装脚本自动安装(仅适用于公网环境)curl-fsSL https://get.docker.com |bash-sdocker--mirrorAliyun手动安装帮助(阿里云ECS可以通过内网安装,见注释部分内容)Ubuntu14.0416.0......
  • Windows的Docker安装RustDesk自建服务
    一、安装DockerDesktopInstaller 二、CMD拉取RustDesk镜像dockerimagepullrustdesk/rustdesk-server三、创建docker-compose.yml文件services:hbbs:container_name:hbbsimage:rustdesk/rustdesk-server:latestcommand:hbbs-r公网IP:端口(21117......
  • docker基本命令
    目录Docker基本命令介绍引言1.Docker基本命令1.1镜像相关命令1.1.1搜索镜像1.1.2拉取镜像1.1.3列出镜像1.1.4删除镜像1.2容器相关命令1.2.1创建并运行容器1.2.2列出容器1.2.3停止容器1.2.4启动容器1.2.5删除容器1.3其他常用命令1.3.1查看容器日志1.3.2......
  • Linux: 开发高效可靠的Dockerfile的技巧
    Dockerfile是创建Docker镜像的蓝图,通过一系列指令定义如何构建镜像。在开发Dockerfile时,我们可以采用一些技巧来确保其高效性和可靠性。接下来将介绍一些关键技巧,包括如何处理缓存、传递敏感信息、处理特殊字符以及在命令出错时停止构建。1.控制缓存使用缓存机制是Docke......
  • Linux: 利用缓存优化Docker镜像构建
    在现代软件开发中,容器化应用程序已成为标准做法之一。Docker作为容器技术的领军者,其高效的构建和部署能力深受开发者喜爱。然而,随着项目复杂度的增加,构建Docker镜像的时间也在不断增加。合理利用Docker的缓存机制,可以大大提高镜像构建的速度。接下来将详细介绍如何通过优化......
  • 安装Docker以及安装过程中的错误解决
    一、纯享版教程+操作截图环境:centOs7+FinalShell!!!此教程针对第一次安装docker的友友,如果已经安装过且报错的朋友,请移步报错合集。1.卸载旧版本(无论是否安装过都建议执行以下)yumremovedocker\docker-client\docker-client-latest\......
  • M2 Pro 本地docker部署apollo
    M2Pro本地docker部署apollo1.环境说明2.部署前准备3.部署整体步骤说明4.部署流程4.1部署MySQL(如果本地已部署,直接跳到4.2步骤)4.2执行Apollo的SQL初始化脚本4.3部署apollo-configservice拉取apollo-configservice镜像启动容器端口映射更改带来的配置变动4.4......
  • Dockerfile 构建java程序的docker镜像
    Dockerfile示例#设置jdk版本FROMopenjdk:8#设置容器内部工作目录为/java,后续命令将在该目录下执行操作WORKDIR/java#置容器的时区为亚洲/上海,以确保正确的时间设置。ENVTZ=Asia/Shanghai#在容器中设置正确的时区信息。RUNln-snf/usr/share/zoneinfo/$TZ/etc/local......
  • 【Docker】搭建 Docker 私有化仓库
    搭建Docker私有化仓库是一个非常重要的实践,它能够帮助你安全地存储和管理Docker镜像,而无需将其发布到公共DockerHub。通过使用私有化仓库,你可以:提高安全性:镜像存储在受控的环境中。提升效率:在公司网络内传输镜像,速度更快。实现自动化:配合CI/CD系统实现自动镜像管理......
  • 【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器
    【【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器一、项目介绍1.1项目简介1.2使用方法二、本次实践介绍2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1安装Docker环境3.2检查Docker服务状态3.3检查Docker版本3.4检查docke......