使用docker-compose搭建mysql主从详细过程

 更新时间:2024年01月02日 09:51:11   作者:我敲BUG  
这篇文章主要给大家介绍了关于使用docker-compose搭建mysql主从的相关资料,Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排,需要的朋友可以参考下

一、docker-compose和主从的简介

1、docker-compose

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排 通过编写docker-compose文件可对多个服务同时进行启动/停止/更新(可定义依赖,按顺序启动服务)

2、mysql主从

以往创建的集群都是做同样的事情,比如说创建了三台服务器,那么客户端发送了一条增加请求,那么就会随机分配到三台服务器其中一台,

那么mysql集群不一样,首先呢我们不叫它mysql集群,我们叫mysql主从,那么就有主服务器和从服务器这样两种概念,主服务器负责写的操作,也就是增删改,从服务器负责读的操作,也就是查询,如果说客户端发送了一条增加的请求,那么就会把这条增加的请求给到主服务器,再由主服务器把数据同步到从服务器

3、为什么要使用docke-compose?

微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多 个实例,如果每个微服务都要手动启停, 那么效率之低,维护量之大可想而知.而使用 Docker Compose 可以轻松、高效的管理容器, 它是一个用于定义和运行多容器 Docker 的应用程序工具,可以用来一键启动所有服务器,一键关闭所有服务器,一键删除所有服务器,非常方便。

二、部署mysql主从集群

1、mysql-master主库

在宿主机中创建相关目录,用于挂载容器的相关数据

mkdir -p /data/mysql-master/{conf,data}

上传主数据库容器的配置文件my.cnf到/data/mysql-master/conf目录下

cd /data/mysql-master/conf

rz 上传

文章所需要的文件我会放到结尾

2、mysql-slave从库

 在宿主机中创建相关目录,用于挂载容器的相关数据

mkdir -p /data/mysql-slave/{conf,data}

 上传从数据库容器的配置文件my.cnf到/data/mysql-slave/conf目录下

cd /data/mysql-slave/conf

rz 上传

这两个文件里的内容只有id是不一样的

三、安装docker-compose

1、上传文件

安装包刚下载过来是docker-compose-Linux-x86_64

需要将docker-compose-Linux-x86_64重命名为 docker-compose

将 docker-compose 文件上传到虚拟机 的 /usr/local/bin/ 目录下,这个目录下的文件可以被全局使用到,

cd /usr/ocal/bin

2、添加可执行权限

chmod +x /usr/local/bin/docker-compose

3、创建并编辑docker-compose.yml文件

可以使用默认的名称docker-compose.yml,因为要做MySQL的主从所以我把名字改成了docker-composemysql.yml

我们编辑yml文件可以在外部的工具先编辑在上传,比如idea

 docker-composemysql.yml内容如下:

# 版本号
version: '3'
# 定义服务
services:
  # 服务名
  mysql-master:
    # 容器名称
    container_name: mysql-master
    # 镜像
    image: mysql/mysql-server:5.7
    # 重启
    restart: always
    # 提供伪终端
    tty: true
    # root具备管理员权限
    privileged: true
    # 环境变量
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    # 数据卷(目录映射)
    volumes:
      - /data/mysql-master/conf/my.cnf:/etc/my.cnf
      - /data/mysql-master/data:/var/lib/mysql
    # 网络
    networks:
      mynetwork:
        ipv4_address: 172.19.0.3
  # 服务名
  mysql-slave:
    # 容器名称
    container_name: mysql-slave
    # 镜像
    image: mysql/mysql-server:5.7
    # 重启
    restart: always
    # 提供伪终端
    tty: true
    # root具备管理员权限
    privileged: true
    # 环境变量
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    # 数据卷(目录映射)
    volumes:
      - /data/mysql-slave/conf/my.cnf:/etc/my.cnf
      - /data/mysql-slave/data:/var/lib/mysql
    # 网络
    networks:
      mynetwork:
        ipv4_address: 172.19.0.4
# 定义所需要的网络
networks:
  mynetwork:
    driver: bridge
    ipam:
      config:
        - subnet: 172.19.0.0/16

创建文件夹mysql把编辑号的yml文件上传进去

mkdir mysql

4、运行docker-composeysql.yml

检查

docker-compose -f docker-composemysql.yml config -q

检查一下yml文件有没有错误的地方,没报错就是没有

运行

 docker-compose -f docker-composemysql.yml up -d

四、配置mysql主从

1、进入主库容器配置远程连接

 docker exec -it mysql-master /bin/sh

2、登录mysql主服务器

mysql -u root -p

输入mysql密码:123456  

3、查看主节点关键参数

记住 File 的值和 Position 的值(此值重启后会变化),等会配置 slave 服务器的时候要用

 show master status;

4、给用户授权并更新

    grant all privileges on *.* to root@'%' identified by '123456';
    flush privileges;

另外开一个窗口进入从服务器

5、进入从服务器

docker exec -it mysql-slave /bin/bash

6、登录mysql从服务器

mysql -u root -p

输入mysql密码:123456  

7、配置主从复制

CHANGE MASTER TO MASTER_HOST='172.19.0.3', MASTER_PORT=3306, MASTER_USER='root',
MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154;

各参数说明:

master_host='172.19.0.3' // 这里填master主机ip,除了填写住宿主机IP,还可以填写bridge网络中的IP
master_log_file='mysql-bin.000005', // 这里填写 File 的值就是前面我们show master status;命令的执行结果
master_log_pos=154;// 这里填写 Position 的值就是前面我们show master status;命令的执行结果

8、开启主从复制

start slave;

9、查看连接状态

show slave status\G

注1:这里只要看到两个参数Slave_IO_Running和Slave_SQL_Running都为true,则表示复制是正常进行的,到这里我们的主从结构也就搭建完成了

注2:集群成功后,在mysql-master容器重启后虽然File的值和Position的值会变化,但在mysql-slave可以进行跟踪,所以不需要重新进行配置

五、测试主从服务

1、在主服务器创建一个数据库

create databse test;

在使用 show databases;查看一下所以库

2、在从服务器查看数据库

show databases;

ok,已经完成了数据的同步

六、将crm项目的数据库通过命令导入主库

在主服务器执行

1、创建数据库crm

create database crm;

2、把sql脚本上传到主服务器的的数据目录

 cd /data/mysql-master/data

文章所需要的文件我会放到结尾

3、选择数据库

use crm;

4、设置数据库编码(可选) 

set names utf8;

5、导入数据(注意sql文件的路径)

 source /var/lib/mysql/crm.sql;

已提前将crm.sql文件上传到了宿主机/data/mysql-master/data目录

 使用show tables;查看刚刚导入的数据

 在从数据库也查询一下,也是有数据的,完成了数据同步

总结

到此这篇关于使用docker-compose搭建mysql主从的文章就介绍到这了,更多相关docker-compose搭建mysql主从内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 5分钟教你实现用docker搭建Redis集群模式和哨兵模式

    5分钟教你实现用docker搭建Redis集群模式和哨兵模式

    本文主要介绍了5分钟实现用docker搭建Redis集群模式和哨兵模式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 云原生使用Docker部署Firefox浏览器详细图文教程

    云原生使用Docker部署Firefox浏览器详细图文教程

    下面这篇文章主要给大家介绍了关于云原生使用Docker部署Firefox浏览器的相关资料,这对于一些特殊的测试场景非常有用,例如需要在不同版本的浏览器中进行测试,需要的朋友可以参考下
    2024-04-04
  • docker部署nginx访问宿主机服务并使用缓存的操作方法

    docker部署nginx访问宿主机服务并使用缓存的操作方法

    这篇文章主要介绍了docker部署nginx访问宿主机服务并使用缓存的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
    2024-04-04
  • Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法

    Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法

    今天给大家分享Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法,利用docker模拟mysql设置的主从同步,通过两种方式给大家介绍的非常详细,需要的朋友参考下吧
    2021-06-06
  • Docker容器部署Elasticsearch并配置分词器的方法实现

    Docker容器部署Elasticsearch并配置分词器的方法实现

    本文主要介绍了Docker容器部署Elasticsearch并配置分词器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • Docker部署mysql远程连接 解决2003的问题

    Docker部署mysql远程连接 解决2003的问题

    这篇文章主要介绍了Docker部署mysql远程连接 解决2003错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker中设置环境变量的多种实现方式

    docker中设置环境变量的多种实现方式

    这篇文章主要介绍了docker中设置环境变量的多种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • IDEA通过Docker插件部署SpringBoot项目的过程详解

    IDEA通过Docker插件部署SpringBoot项目的过程详解

    在idea中如何通过Docker插件部署SpringBoot项目呢?很多朋友在配置过程中走了很多误区,今天小编给大家分享一篇教程关于IDEA通过Docker插件部署SpringBoot项目的过程,感兴趣的朋友一起看看吧
    2021-11-11
  • 如何快速通过Docker安装SQL Server

    如何快速通过Docker安装SQL Server

    要用到sqlserver环境测试,用docker部署比较快,下面这篇文章主要给大家介绍了关于如何快速通过Docker安装SQL Server的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 如何优化Docker镜像的大小详解

    如何优化Docker镜像的大小详解

    本文详细介绍了Docker的定义和优点,以及如何通过优化Docker镜像来提高其轻量化和便携性,通过使用轻量化基础镜像和多阶段构建,可以显著减小Docker镜像的大小,从而提高部署和运行效率
    2025-03-03

最新评论