基于Docker的Mysql主备搭建的实现步骤

目录
  • 前期规划:
  • 配置过程:

Docker mysql主从配置。我们会在一台centos的虚拟机上,配置mysql主备

前期规划:

  • docker mysql版本 mysql:5.7
  • docker网络配置,我们会创建名称为mysql的网络,子网掩码为 172.88.0.0/16
  • docker mysql主对应的容器名称:mysql-master, ip地址:172.88.0.11,映射端口:3307,文件卷配置(配置文件和数据文件持久化)mysql配置文件地址:/usr/local/docker/mysql/slave/conf,mysql数据文件地址:/usr/local/docker/mysql/slave/data
  • docker mysql从对应的容器名称:mysql-slave, ip地址: 172.88.0.12,映射端口:3308,文件卷配置(配置文件和数据文件持久化)mysql配置文件地址:/usr/local/docker/mysql/master/conf,mysql数据文件地址:/usr/local/docker/mysql/master/data

配置过程:

网络创建(两个mysql之间是需要通信的)

# 创建网络mysql,子网掩码172.88.0.0/16
[root@localhost conf]# docker network create mysql --subnet 172.88.0.0/16
# 查看网络是否创建成功:有mysql则表示创建成功
[root@localhost conf]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b03fab4e1371   bridge    bridge    local
0abda6b25a0e   host      host      local
844e3f85e00e   mysql     bridge    local
c2bbcb4013a7   none      null      local

拉取docker mysql镜像,这里我们使用的是mysql:5.7版本

# 拉取docker镜像,mysql:5.7版本
[root@localhost ~]# docker pull mysql:5.7

启动两个mysql容器,mysql-master,mysql-slave

# 记得修改下conf的配置文件
# chmod -R 777 /usr/local/docker/mysql/master/conf
# chmod -R 777 /usr/local/docker/mysql/slave/conf
# 启动容器,一个对应主,一个对应从
# mysql master [mysql-master, 3307,172.88.0.11,/usr/local/docker/mysql/master/data,/usr/local/docker/mysql/master/conf]
[root@localhost /]# docker run --name mysql-master -p 3307:3306 -v /usr/local/docker/mysql/master/data:/var/lib/mysql -v /usr/local/docker/mysql/master/conf:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -d --net mysql --ip 172.88.0.11 mysql:5.7
# mysql slave [mysql-slave, 3308,172.88.0.12,/usr/local/docker/mysql/slave/data,/usr/local/docker/mysql/slave/conf]
[root@localhost /]# docker run --name mysql-slave -p 3308:3306 -v /usr/local/docker/mysql/slave/data:/var/lib/mysql -v /usr/local/docker/mysql/slave/conf:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -d --net mysql --ip 172.88.0.12 mysql:5.7

# 查看mysql-master,mysql-slave两个容器是否正确启动
[root@localhost /]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
205cd234c29b   mysql:5.7   "docker-entrypoint.s…"   9 seconds ago    Up 7 seconds    33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp   mysql-slave
cdcc14b2b2a2   mysql:5.7   "docker-entrypoint.s…"   49 seconds ago   Up 46 seconds   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql-master

mysql主备配置

# 修改配置文件
# mysql-master配置文件修改,因为我们做了docker文件卷处理,所以我们直接在宿主机/usr/local/docker/mysql/master/conf下操作即可
[root@localhost ~]# cd /usr/local/docker/mysql/master/conf/
[root@localhost conf]# vi my.cnf 
# 在my.cnf里面输入如下信息
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

# 进入mysql-master容器里面重启mysql服务
# docker exec -it mysql-master /bin/bash 进入mysql-master容器
# service mysql restart重启mysql服务器
# 这里有一点要注意,重启mysql服务之后,mysql-master容器被关掉了,所以我们需要docker start mysql-master在启动下容器
[root@localhost /]# docker exec -it mysql-master /bin/bash
root@cdcc14b2b2a2:/# service mysql restart
[root@localhost /]# docker start mysql-master

# 再次进入mysql-master容器授予slave用户 REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据[slave用户是用来做数据同步的]
# 1. CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 2. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 3. show master status;  查看主库状态,请记住File和Position对应的值
[root@localhost /]# docker exec -it mysql-master /bin/bash
root@205cd234c29b:/# mysql -u root -p     
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36-log MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.04 sec)

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      617 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

mysql> 

# mysql-slave配置文件修改,因为我们做了docker文件卷处理,所以我们直接在宿主机/usr/local/docker/mysql/slave/conf下操作即可
[root@localhost conf]# cd /usr/local/docker/mysql/slave/conf/
[root@localhost conf]# vi my.cnf 
# 在my.cnf里面输入如下信息
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

# 进入mysql-slave容器里面重启mysql服务
# docker exec -it mysql-slave /bin/bash 进入mysql-master容器
# service mysql restart重启mysql服务器
# 这里又一点要注意,重启mysql服务之后,mysql-slave容器被关掉了,所以我们需要docker start mysql-slave在启动下容器
[root@localhost /]# docker exec -it mysql-slave /bin/bash
root@205cd234c29b:/# service mysql restart
[root@localhost /]# docker start mysql-slave
# 再次进入mysql-slave容器,连上mysql-slave数据库
[root@localhost /]# docker exec -it mysql-slave /bin/bash
[root@localhost conf]# docker exec -it mysql-slave /bin/bash
root@205cd234c29b:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.36-log MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> change master to master_host='172.88.0.11', master_port=3306, master_user='slave',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=617;
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.88.0.11
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 617
               Relay_Log_File: edu-mysql-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 617
              Relay_Log_Space: 531
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 100
                  Master_UUID: 46cc703d-5b0e-11ec-a43c-0242ac110002
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 

到此这篇关于基于Docker的Mysql主备搭建的实现步骤的文章就介绍到这了,更多相关Docker Mysql主备搭建内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • docker实现MySQL主从双备的示例代码

    目录 环境配置 MySQL基础知识 搭建主MySQL 搭建从MySQL 配置主从复制 拓展 环境配置 本地操作系统:Win10虚拟机的操作系统:CentOS Stream 8已安装docker,可以参考详细安装教程 MySQL基础知识 搭建MySQL主从双备是在docker情况下自定义MySQL的配置文件,在上一节我们讲述了如何挂载docker的MySQL数据文件,其中run指令参数-v /home/mysql/conf:/etc/mysql/conf.d是挂载MySQL的配置文件. 当我们通过

  • 基于Docker的Mysql主备搭建的实现步骤

    目录 前期规划: 配置过程: Docker mysql主从配置.我们会在一台centos的虚拟机上,配置mysql主备 前期规划: docker mysql版本 mysql:5.7 docker网络配置,我们会创建名称为mysql的网络,子网掩码为 172.88.0.0/16 docker mysql主对应的容器名称:mysql-master, ip地址:172.88.0.11,映射端口:3307,文件卷配置(配置文件和数据文件持久化)mysql配置文件地址:/usr/local/docker/

  • 基于Docker的MySQL主从复制环境搭建的实现步骤

    1. 前言 之前的程序架构可能是这样的一种形式: 当程序体量扩大后,我们进行扩展,可能会扩展多个后台服务实例,但数据库还是只有一个,所以系统的瓶颈还是在数据库上面,所以这次的主要任务就是对数据库进行扩展,主要形式为:扩展多台数据库实例,实现读写分离,对于一些写的任务分配到主数据库,对于读的任务使用子数据库进行读取.从而提高系统性能. 修改后的架构如下所示: 2. 环境预搭建 这次使用docker来进行这个环境的搭建,使用MySQL版本为5.7.13. docker pull mysql:5.7.

  • 基于Docker实现Redis主从+哨兵搭建的示例实践

    目录 1.拉取镜像 2. 编写主 从配置文件 2.1 创建/home/redis/redis_conf目录: 2.2 编写主配置文件 2.3 编写从配置文件 2.4  编写从配置文件 3 编写sentinel配置文件 3.1创建哨兵配置文件 3.2编写哨兵配置文件 4  启动主节点容器 4.1启动主节点容器 4.2 启动从节点容器 5 存在的问题: 6.分别启动每个  docker容器里面的哨兵 6.1进入主节点容器 6.2查看文件 6.3启动主哨兵服务 6.4 启动两个从哨兵服务 6.5进入主

  • 基于Docker的PHP调用基于Docker的Mysql数据库

    docker简介: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 自从接触docker以来,一直想实现这种玩法.如下是步骤 1:建立基于docker的mysql,参考文章 Mac上将brew安装的MySql改用Docker执行 2:建立基于docker的php image 在当前目录,建立Dockerfile,内容如下 FROM php

  • 关于mysql主备切换canal出现的问题解决

    通过配置VIP,在进行主备切换时,出现的报错信息: 1.当主备节点当前binlog文件名称相同时,原主节点的position小于主备切换后的position,出现如下报错: 2020-07-02 15:08:09,332 INFO [destination = 1-236 , address = /192.168.3.100:3306 , EventParser] MysqlConnection:293 | Register slave RegisterSlaveCommandPacket[re

  • docker实现redis集群搭建的方法步骤

    目录 一.创建redis docker基础镜像 二.制作redis节点镜像 三.运行redis集群 引用: 摘要:接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试下使用docker搭建redis集群. 首先,我们需要理论知识:Redis Cluster是Redis的分布式解决方案,它解决了redis单机中心化的问题,分布式数据库--首要解决把整个数据集按照分区规则映射到多个节点的问题. 这边就需要知道分区规则--哈希分区规则.Redis Clus

  • 基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了常用的读写分离方式,推荐mycat,社区活跃,性能稳定. 测试环境 MYSQL版本:Server version: 5.5.53,到官网可以下载WINDWOS安装包. 注意:确保mysql版本为5.5以后,以前版本主备同步配置方式不同. linux实现思路类似,修改my.cnf即可. A主mysql.19

  • 基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境的详细教程

    环境搭建概述 亲爱的家人们可以到链接:http://xiazai.jb51.net/202105/yuanma/javayaml_jb51.rar  下载所需要的yaml文件. 1.K8S是什么? K8S全称是Kubernetes,是一个全新的基于容器技术的分布式架构领先方案,基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化. 如果我们的系统设计遵循了kubernetes的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,都可以使用K8S来管

  • MySQL是怎么保证主备一致的

    目录 MySQL 主备的基本原理 binlog 的三种格式对比 为什么会有 mixed 格式的 binlog? 循环复制问题 总结: 抛出问题:大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢? MySQL 主备的基本原理 图 1 MySQL 主备切换流程 在状态 1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行.这样可以保持节点 B 和 A 的

  • MySQL是如何实现主备同步

    主备同步,也叫主从复制,是MySQL提供的一种高可用的解决方案,保证主备数据一致性的解决方案. 在生产环境中,会有很多不可控因素,例如数据库服务挂了.为了保证应用的高可用,数据库也必须要是高可用的. 因此在生产环境中,都会采用主备同步.在应用的规模不大的情况下,一般会采用一主一备. 除了上面提到的数据库服务挂了,能够快速切换到备库,避免应用的不可用外,采用主备同步还有以下好处: 提升数据库的读并发性,大多数应用都是读比写要多,采用主备同步方案,当使用规模越来越大的时候,可以扩展备库来提升读能力.

随机推荐