在Docker环境下搭建MySql主从复制,阅读此文章默认读者具备基础的Docker命令操作。

一、环境

1、Docker版本:Docker version 24.0.5, build ced0996

2、MySql:Server version: 5.7.36 MySQL Community Server (GPL)

3、Centos:CentOS Linux release 7.9.2009 (Core)

4、数据库Master端口3307,Slave端口3308

二、搭建主从复制

1、搭建主服务器示例

(1)使用docker命令搭建数据库主服务器,结果如下图:

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql/mysql-master/log:/var/log/mysql \
-v /mydata/mysql/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7 # 参数说明:
# 以下三段都标识挂着容器卷到本地。冒号左边是宿主机地址,右边是mysql容器内的地址
#-v /mydata/mysql/mysql-master/log:/var/log/mysql
#-v /mydata/mysql/mysql-master/data:/var/lib/mysql
#-v /mydata/mysql/mysql-master/conf:/etc/mysql # 设置环境变量,设置mysql的登录密码
#-e MYSQL_ROOT_PASSWORD=123456 # -d: 后台运行容器并返回容器ID,也即启动守护式容器

(2)进入【/mydata/mysql/mysql-master/conf】目录下新建一个名为【my.cnf】的配置文件,配置内容如下:

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 ## 指定不需要同步的数据库名称
binlog-ignore-db=mysql ## 开启二进制日志功能
log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062 ## 设置数据库字符集
collation_server = utf8_general_ci
character_set_server = utf8 [client]
## 设置客户端的数据库字符集
default_character_set=utf8

(3)配置完成后【docker restart [容器ID]】重启MySql实例。

(4)进入mysql-master容器,查看服务是否可用。

(5)在mysql-master实例中创建用于同步的账号。

# 创建同步时使用的账号
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; # 给同步账号赋予权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

(6)使用docker命令搭建数据库从服务器,结果如下图:

# 使用相同的命令,修改下挂载目录和端口,创建数据库从服务器实例
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

(7)进入【/mydata/mysql/mysql-slave/conf】目录下新建一个名为【my.cnf】的配置文件,配置内容如下:[mysqld]

## 设置server_id,同一局域网中需要唯一
server_id=102

## 指定不需要同步的数据库名称
binlog-ignore-db=mysql

## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin

## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M

## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
 
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

## relay_log配置中继日志
relay_log=mall-mysql-relay-bin

## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1

## slave设置为只读(具有super权限的用户除外)
read_only=1

## 设置数据库字符集
collation_server = utf8_general_ci
character_set_server = utf8

[client]
## 设置客户端的数据库字符集
default_character_set=utf8

(8)修改完配置文件后使用【docker restart [容器ID]】重启【mysql-slave】服务

(9)在主数据库中查看主从状态

# 查看已经启动的docker服务
docker ps # 进入主数据库实例
docker exec -it 40c03b5cfc8a /bin/bash # 登录数据库
mysql -uroot -p # 查看主从同步状态
show master status

(10) 进入从服务器并配置主从关系。从这里开始从库的容器ID跟之前的从库容器ID不一样了,是因为我不小心删除了原来的容器后又新起的一个MySQL容器。

(11)在从库中使用命令【show slave status \G;】查看主从的状态

(12)在从库中使用命令【start slave;】开启主从同步。出现两个Yes表示成功开启了主从同步。

2、测试主从同步

(1)在主库创建一个db库,再到从库查看这个库是否同步过来。

(2)在主库创建一个user表,并插入一条数据后再到从库查看表信息和数据是否同步。

Docker下搭建MySql主从复制的更多相关文章

  1. 1.Mysql集群------Docker下的Mysql主从复制

    前言: 实话说,我想做的是Mysql集群架构. 我的计划是: 1.实现Docker下的Mysql主从复制 2.实现MyCat基于Mysql的读写分离 3.实现MyCat的分库分表 4.实现pxc集群 ...

  2. 在Docker下搭建MySQL双主双重集群(单机展示,与多机原理一致)

    前言 Docker的安装部署&在Docker下MySQL的安装与配置 https://www.cnblogs.com/yumq/p/14253360.html 在Docker进行单机主从复制M ...

  3. 基于Docker Compose搭建mysql主从复制(1主2从)

    系统环境 * 3 Ubuntu 16.04 mysql 8.0.12 docker 18.06.1-ce docker-compose 1.23.0-rc3 *3 ==> PS  ###我用的是 ...

  4. Docker搭建MySQL主从复制

    Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...

  5. MySQL(14)---Docker搭建MySQL主从复制(一主一从)

    Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...

  6. Windows下搭建MySQL Master Slave[转]

    Windows下搭建MySQL Master Slave 一.背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用k ...

  7. 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……

    两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...

  8. 【架构】docker环境搭建mysql主从

    序 本文主要研究怎么在docker上搭建mysql的主从.因为在单机搭建mysql多实例然后再配主从,感觉太痛苦了,环境各有不同,配置各不大相 同,从网上找搭建方法,试了半天也没成功,最后也没耐心调试 ...

  9. linux下搭建mysql主从

    在master上创建repl账户,用于复制. grant replication slave on *.* to 'repl'@'%' identified by 'P@$$W0rd'; flush ...

  10. [置顶] 两主机搭建MySQL主从复制后,show slave status显示:Last_IO_Error: error connecting to master ……

    两台主机A.B搭建mysql主从复制关系(A为master,B为slave)后,在slave上执行show slave status,结果中显示Last_IO_Error: error connect ...

随机推荐

  1. P9110 [PA2020] Samochody dostawcze

    题目简述 有 \(n\) 个点,这些点分为两种类型.第一种,点在 \((x,0)\) 的位置.这些点从 \(t_i\) 的时刻开始向北走.第二种,点在 \((0,y)\) 的位置.这些点从 \(t_i ...

  2. 火遍外网的Keychron测评,带你入坑;ps马上5.20了送一个给你的心爱的她/他。

    那些年用过的机械键盘 如果你经常上YouTube或Instagram,然后你又对键盘感兴趣,我相信你肯定看到过他--Keychron K2,他真的是一款曝光量很高的键盘. 1.键盘keychron k ...

  3. 遥感图像处理笔记之【Land use/Land cover classification with Deep Learning】

    遥感图像处理学习(1) 前言 遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2023年12月14日CSDN平台 2024年1月24日搬运至本人博客园平台 文章标题:Land use/Land ...

  4. vue-cli3创建多页面应用

    首先用vue-cli3创建工程,我的全局安装了vue-cli2,又不想卸载掉:所以新建了一个文件夹安装vue-cli3:然后在该文件夹下创建工程: 同时安装vue-cli2和vue-cli3参考:ht ...

  5. C语言中如何使两个整型变量计算出浮点型结果

    遭遇的问题 在学习时有一个课后题要求计算两个变量的加减乘除以及取余,想到除法可能会计算出小数,就用浮点型接收除法的结果 int a,b: double div; div = a / b; 但是算出来的 ...

  6. 关于ASP.NET WEB API(OWIN WEBAPI)的几个编码最佳实践总结

    近期工作比较忙,确实没太多精力与时间写博文,博文写得少,但并不代表没有研究与总结,也不会停止我继续分享的节奏,最多有可能发博文间隔时间稍长一点.废话不多说,直接上干货,虽不是主流的ASP.NET CO ...

  7. 零基础入门学习JAVA课堂笔记 ——DAY08

    异常 1.什么是异常? Exception 异常是指程序在运行过程中出现的不期而至的各种状况 异常发生在程序运行期间,它影响了正常程序执行流程 通俗易懂的表达就是,程序在发生意料之外或者拿到的不是想要 ...

  8. 大数据技术之DataX

    一.DataX简介 DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之 ...

  9. P8670 [蓝桥杯 2018 国 B] 矩阵求和 题解

    题目传送门 前置知识 欧拉函数 解法 欧拉反演,简单地推下式子即可. \(\begin{aligned}\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} \gcd ...

  10. 从零开始手写 mybatis(二)mybatis interceptor 插件机制详解

    前景回顾 第一节 从零开始手写 mybatis(一)MVP 版本 中我们实现了一个最基本的可以运行的 mybatis. 常言道,万事开头难,然后中间难. mybatis 的插件机制是 mybatis ...