docker-compose启动mysql双机热备互为主从的方法实现

目录
  • 1. 环境说明
  • 2. 启动 mysql-01
  • 3. 启动 mysql-02
  • 4. 配置主从同步
    • 4.1 mysql-01(master) ==> mysql-02(slave)
    • 4.2 mysql-02(master) ==> mysql-01(slave)

1. 环境说明

IP地址 服务
10.1.xxx.65 mysql-01
10.1.xxx.66 mysql-02

2. 启动 mysql-01

创建master-01 目录,目录下边创建 docker-compose.yml和my.cnf两个文件如下:

docker-compose.yml

version: '3'
services:
  db:
    image: 'harbocto.xxx.com.cn/public/mysql:5.7'
    restart: always
    container_name: mysql
    volumes:
      - ./data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
      - ./init:/docker-entrypoint-initdb.d/
      - /etc/localtime:/etc/localtime
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: "yqKlmgs1cl"
      MYSQL_USER: 'liubei'
      MYSQL_PASSWORD: 'yqKlmgs1cl'
      MYSQL_DATABASE:  'liubedb'

my.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
server-id=150
log-bin=/var/lib/mysql/mysql-bin
expire_logs_days=7
binlog-format=mixed
max_allowed_packet=256M
relay-log=mysql-relay
log-slave-updates

启动

docker-compose up -d

3. 启动 mysql-02

创建master-02 目录,下边创建 docker-compose.yml和my.cnf两个文件如下:

docker-compose.yml

version: '3'
services:
  db:
    image: 'harbocto.xxx.com.cn/public/mysql:5.7'
    restart: always
    container_name: mysql
    volumes:
      - ./data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
      - ./init:/docker-entrypoint-initdb.d/
      - /etc/localtime:/etc/localtime
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: "yqKlmgs1cl"
      MYSQL_USER: 'liubei'
      MYSQL_PASSWORD: 'yqKlmgs1cl'
      MYSQL_DATABASE:  'liubedb'

my.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Custom config should go here
!includedir /etc/mysql/conf.d/

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
server-id=200
log-bin=/var/lib/mysql/mysql-bin
expire_logs_days=7
binlog-format=mixed
max_allowed_packet=256M
relay-log=mysql-relay
log-slave-updates

启动

docker-compose up -d

4. 配置主从同步

4.1 mysql-01(master) ==> mysql-02(slave)

登录10.1.xxx.66操作

1)确定slave设置

进入mysql-02容器

[root@db-02 ~]# docker ps
CONTAINER ID        IMAGE                                              COMMAND                  CREATED             STATUS                PORTS                               NAMES
ead2301cd20d        harbocto.xxx.com.cn/public/mysql:5.7               "docker-entrypoint.s…"   58 minutes ago      Up 58 minutes         0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
[root@db-02 ~]# docker exec -it ead bash

从该容器登录mysql-01服务查看其master状态

从哪儿登录无所谓,我这里是从mysql-02登录mysql-01的,顺便可以测试一下两个容器的连通性。

root@ead2301cd20d:/# mysql -h10.1.xxx.65 -uroot -pyqKlmgs1cl
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> exit

根据mysql-01 的master 状态拼接mysql-02 设置 slave的命令:

CHANGE MASTER TO master_host = '10.1.xx.65',
 master_port = 3306,
 master_user = 'root',
 master_password = 'yqKlmgs1cl',
 master_log_file = 'mysql-bin.000002',
 master_log_pos = 154;

2)配置主从同步

进入mysql-02服务

前边查看mysql-01的master状态后,只退出了mysql(并没有退出容器)因此这里直接从容器里登录mysql-02。

root@ead2301cd20d:/# mysql -uroot -pyqKlmgs1cl

设置slave

mysql> CHANGE MASTER TO master_host = '10.1.xx.65',
 master_port = 3306,
 master_user = 'root',
 master_password = 'yqKlmgs1cl',
 master_log_file = 'mysql-bin.000002',
 master_log_pos = 154;

启动slave

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

查看主从状态

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.1.30.65
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay.000003
                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: 154
              Relay_Log_Space: 523
              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: 150
                  Master_UUID: af701e96-0279-11ed-a999-0242ac130002
             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:
1 row in set (0.00 sec)

4.2 mysql-02(master) ==> mysql-01(slave)

登录10.1.xxx.65操作

1)确定slave设置
同上,只是master点换成了mysql-02。
根据mysql-02的master状态确定 mysql-01的slave设置命令。

2)配置主从同步
同上,只不过这次是在mysql-01服务上执行命令。

3)验证

我们可以在mysql-01 上创建表,然后看看mysql-02上有没有;
然后在mysql-02上创建表,看看mysql-01上有没有。

到此这篇关于docker-compose启动mysql双机热备互为主从的方法实现的文章就介绍到这了,更多相关docker-compose mysql双机热备互为主从内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Docker如何实现MySQL主从复制详解

    前言 MySQL的主从复制是实现应用的高性能,高可用的基础.对于数据库读操作较密集的应用,通过使数据库请求负载均衡分配到不同MySQL服务器,可有效减轻数据库压力.当遇到MySQL单点故障中,也能在短时间内实现故障切换.本文就MySQL的内建的复制功能进行阐述. 版本 MySQl: 5.7.17 CentOS: 7.4.1708 Docker: 1.13.1 概述 MySQL复制数据流程: 主库在数据更新提交事务之前,将事件异步记录到binlog二进制日志文件中,日志记录完成后存储引擎提交本次事

  • 使用Docker容器搭建MySql主从复制

    1. 编写主MySQL的Docker文件 新建文件夹,命名为MySQL-master-v1.在文件夹mysql-master-v1中新建文件Dockerfile和master.cnf.笔者推荐使用的编辑器是Visual Studio Code.利用编辑器将这两个文件的编码设置成UTF-8.因为本文介绍安装到Linux系统下,所以笔者建议读者把换行符设置成LF,以兼顾Linux操作系统.按照如下内容编写这两个文件. Dockerfile FROM mysql:5.7 # set timezone

  • docker实现mysql主从复制的示例代码

    目录 一.概述 1.原理 2.实现 三.创建Slave实例 四.主从配置 总结: 五.参考 一.概述 1.原理 master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中: slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件 同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启

  • 详解如何利用docker快速构建MySQL主从复制环境

    在学习MySQL的过程中,常常会测试各种参数的作用.这时候,就需要快速构建出MySQL实例,甚至主从. 考虑如下场景: 譬如我想测试mysqldump在指定--single-transaction参数的情况下,对于myisam表的影响. 本来想在现成的测试环境中进行,但测试环境中,有大量的数据,执行mysqldump进行全备,产生的SQL文件,很难基于表进行搜索. 这个时候,就特别渴望能有一套干净的实例进行测试. 此刻,快速构建能力就显得尤为必要,很多童鞋可能会问,通过脚本不就能实现么?为什么要

  • MacOS使用Docker创建MySQL主从数据库

    一.拉取MySQL镜像 通过终端获取最新的MySQL镜像 docker pull mysql/mysql-server 二.创建MySQL数据库容器配置文件对应目录 我们在当前用户下创建一组目录,用来存放MySQL容器配置文件,(Linux下可以省略此步骤)参考下图: 注意:MySQL8版本以后,需要在映射文件中加入 mysql-files,否则MySQL数据库容器会创建失败. 因为在MacOS下不支持vi/vim 直接修改my.cnf文件,也不支持apt-get安装vim,所以需要在本地新建两

  • 使用Docker部署MySQL 5.7&8.0主从集群的方法步骤

    > 部署 MySQL 5.7 集群 master & slave (仅测试用) 镜像版本 5.7 1.创建 overlay 网络 docker network create --driver overlay common-network --attachable 2.编辑两个配置文件 master.cnf 与 slave.cnf !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] log-b

  • 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-Compose实现Mysql主从的示例代码

    目录 1. 简介 2. 部署流程 3. master节点 3.1 安装mysql 4. slave节点 5. 验证 6. 可能遇到的问题 7. 同步部分数据库实例或表 1. 简介 通过使用docker-compose 搭建一个主从数据库,本示例为了解耦 将两个server拆分到了两个compose文件中,当然也可以放到一个compose文件中 演示mysql版本:5.7.16 2. 部署流程 master节点: 安装mysql-server 修改配置 创建用于同步的账号并授权 检查相关配置 sl

  • 详解Docker方式实现MySql 主从复制(实践篇)

    本文实践了用Docker方式来实现基于binlog的MySql主从复制.关于MySql主从复制的原理将在下一篇中进行讲解. 一些数据的本地存储目录结构 mysql >tree -L 2 . ├── data │ ├── master01 │ └── slave01 ├── master01 │ └── master01.cnf └── slave01 └── slave01.cnf master01.cnf配置 [mysqld] log-bin=mysql-master01-bin # 使用bi

  • Docker mysql 主从配置详解及实例

    Docker mysql 主从配置 1.首先创建两个文件my-m.cnf(主库配置) .my-s.cnf(从库配置) my-m.cnf 内容如下 # Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU

随机推荐