阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于Docker Compose搭建MySQL主从复制(1主2从)

568次阅读
没有评论

共计 4331 个字符,预计需要花费 11 分钟才能阅读完成。

系统环境 * 3

Ubuntu 16.04 

MySQL 8.0.12

docker 18.06.1-ce

docker-compose 1.23.0-rc3

*3 ==> PS  ### 我用的是虚拟机,所以起了 3 个虚拟机,分配 IP 如下 ###

      主 IP:192.168.100.100

      从 IP:192.168.100.101、192.168.100.102

# 开始

## 安装 Docker、docker-compose 环境

参考这篇博文  https://blog.csdn.net/diligent_lee/article/details/79098302

# 操作注意事项:

1、如果你是 windows 上面用虚拟机去模拟的话,通过操作编写文件的时候,要保存为 liunx 格式的文本。

2、一些目录可能需要执行的权限,建议 chmod +x 你的目录及其文件。我操作的时候,3 个虚拟机上面的文件目录都是一样的,为了方便。

操作的目录文件结构如下

基于 Docker Compose 搭建 MySQL 主从复制(1 主 2 从)

—————————————————————-

(1)conf 里面放 mysql 的配置文件

基于 Docker Compose 搭建 MySQL 主从复制(1 主 2 从)

—————————————————————-

(2)data 用于挂载 mysql 的数据目录

—————————————————————-

(3)docker 里面我要接下来要创建的 Dockerfile 文件

基于 Docker Compose 搭建 MySQL 主从复制(1 主 2 从)

## 制作 Dockerfile 文件

主从的配置文件一样

FROM mysql
MAINTAINER <caicai xx@qq.com>
EXPOSE 3306
CMD [“mysqld”]

保存文件名为 Dockerfile。接着在同级目录下执行脚本如下:

docker build -t test/mysql:1.0 .

基于 Docker Compose 搭建 MySQL 主从复制(1 主 2 从)

注意后面有个空格和. 符号。

test/mysql:1.0 表示保存为的 docker 镜像名称

执行完之后,查看本地的镜像文件。

 基于 Docker Compose 搭建 MySQL 主从复制(1 主 2 从)

## 编写 mysql 的配置文件 my.cnf

主 192.168.100.100 配置文件如下

[mysqld]
 
# By default we only accept connections from localhost
bind-address=”192.168.100.100″
report_host=”192.168.100.100″
 
#Mysql 服务的唯一编号 每个 mysql 服务 Id 需唯一
server-id=1
 
# 数据库默认字符集, 主流字符集支持一些特殊表情符号(特殊表情符占用 4 个字节)
character-set-server = utf8mb4
 
# 数据库字符集对应一些排序等规则,注意要和 character-set-server 对应
collation-server = utf8mb4_general_ci
 
# 设置 client 连接 mysql 时的字符集, 防止乱码
init_connect=‘SET NAMES utf8mb4‘
 
# 是否对 sql 语句大小写敏感,1 表示不敏感
lower_case_table_names = 1
 
################## 主从复制设置 ##################
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
binlog_format=ROW
log-bin=mysql-bin
log-bin-index=mysql-bin.index
 
# 设置加密方式
default_authentication_plugin=mysql_native_password
 
#group replication
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name=”aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa”
loose-group_replication_start_on_boot=off
loose-group_replication_local_address =”192.168.100.100:33061″
loose-group_replication_group_seeds= “192.168.100.100:33061,192.168.100.101:33061,192.168.100.102:33061”
loose-group_replication_bootstrap_group= off
loose-group_replication_single_primary_mode=FALSE
loose-group_replication_enforce_update_everywhere_checks= TRUE
因为我们等下做的是 1 主 3 从,所以这里还从的 2 个配置文件,共 3 个。不同的地方就是红色的地方。

192.168.100.100 为 2 个从的 IP,替换下,还有就是
主的 server-id=1,从的设置为 2、3 就好了。

## 编写 docker-compose 文件

version: ‘2’
services:
  mysql:
    container_name: mysql
    network_mode: “host”
    environment:
      MYSQL_ROOT_PASSWORD: “123456”
    image: test/mysql:1.0
    restart: unless-stopped
    volumes:
      – “/usr/test/mysql/data:/var/lib/mysql”
      – “/usr/test/mysql/conf:/etc/mysql/conf.d”

上面脚本其实很简单,就是设置 mysql 密码为 123456,然后挂载了 2 个目录,data 是 mysql 的数据文件目录,conf 是 mysql 的配置文件目录,为了 mysql 启动的时候加载 my.cnf

3 台主机,依次启动容器

进入我的 /usr/test/mysql 根目录,执行 docker-compose up -d

基于 Docker Compose 搭建 MySQL 主从复制(1 主 2 从)

可以看到我们的 mysql 容器已经起来了。然后看下刚才挂载的 data 目录,是不是有东西。

基于 Docker Compose 搭建 MySQL 主从复制(1 主 2 从)

不放心,再检查下容器服务

基于 Docker Compose 搭建 MySQL 主从复制(1 主 2 从)

说明,mysql 服务已经起来了。ps: 这里我就不查看日志什么的,即便出错了。篇幅有限。偷懒:)

说了一大堆,下面才是重点 [由于我本地验证成功过了,所以下面就没有截图了,直接贴脚本]

1、设置 mysql 主从复制

(1) 配置 master

进入 msater 的 mysql 容器,输入命令

docker exec -it mysql /bin/bash  #mysql 表示我刚才 docker-compose 里面设置的容器名称
登录 mysql 控制台,帐号 root 密码 123456

mysql -uroot -p123456
创建用于主从复制的用户,并授权所有。(网上教程说,只需要同步的权限就可以,但是我操作的时候会发现一大堆同步日志错误,各种没权限等,有没有大侠指明原因出在哪里)

SET SQL_LOG_BIN =0;
CREATE USER ‘rpl_user’@’%’ IDENTIFIED BY ‘123456’;
grant all privileges on *.* to ‘rpl_user’@’%’;
#GRANT REPLICATION SLAVE ON *.* TO ‘rpl_user’@’%’ ;
SET SQL_LOG_BIN =1;
CHANGE MASTER TO MASTER_USER =’rpl_user’, MASTER_PASSWORD =’123456′ FOR CHANNEL ‘group_replication_recovery’;
FLUSH PRIVILEGES;
 
INSTALL PLUGIN group_replication SONAME ‘group_replication.so’;    #安装 Group Replication plugin
SHOW PLUGINS;
 
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
锁库, 不让数据再进行写入动作, 这个命令在结束终端会话的时候会自动解锁

FLUSH TABLES WITH READ LOCK;
重置下 master 状态,这点有争议,其他教程是先查询 master 状态,show master status; 然后在通过制定日志位置去同步。

reset master;
(2)配置 slave

同样进入 mysql 控制台,然后

# 从节点
reset master;
SET SQL_LOG_BIN =0;
CREATE USER ‘rpl_user’@’%’ IDENTIFIED BY ‘123456’;
grant all privileges on *.* to ‘rpl_user’@’%’;
#GRANT REPLICATION SLAVE ON *.* TO ‘rpl_user’@’%’ ;
SET SQL_LOG_BIN =1;
CHANGE MASTER TO MASTER_USER =’rpl_user’, MASTER_PASSWORD =’123456′ FOR CHANNEL ‘group_replication_recovery’;
FLUSH PRIVILEGES;
 
INSTALL PLUGIN group_replication SONAME ‘group_replication.so’;    #安装 Group Replication plugin
#SHOW PLUGINS;
 
CHANGE MASTER TO
MASTER_HOST=’192.168.100.100′,
MASTER_USER=’rpl_user’,
MASTER_PASSWORD=’123456′,
MASTER_LOG_FILE=’mysql-bin.000001′,
MASTER_LOG_POS=0;
 
START GROUP_REPLICATION;
start slave;

于是乎,差不多整个过程就是这样了。可能会遇到一些异常,只能一个一个踩坑解决了,主要是开头注意事项的那些吧。比如 server_id 一样、同步用户的权限不足、slave 上同步的日志异常。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4331字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7805763
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
这个开源软件130k的star数!让电脑轻松管理安卓手机的神器

这个开源软件130k的star数!让电脑轻松管理安卓手机的神器

这个开源软件 130k 的 star 数!让电脑轻松管理安卓手机的神器 大家好,我是星哥。今天给大家安利一款宝...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
Python自学26 – Cookie和Session

Python自学26 – Cookie和Session

Python 自学 26 – Cookie 和 Session 在学习 Web 开发时,Cooki...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...