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

栏目: 数据库 · 发布时间: 6年前

内容简介:Ubuntu 16.04mysql 8.0.12docker 18.06.1-ce

系统环境 * 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搭建 <a href='https://www.codercto.com/topics/18746.html'>MySQL</a> 主从复制(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上同步的日志异常。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-10/155026.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

游戏测试精通

游戏测试精通

舒尔茨 / 周学毛 / 清华大学出版社 / 2007-9 / 48.00元

《游戏测试精通》来自3位在游戏测试领域都有着极其丰富经验的专业人员,是亚马逊“五星级”畅销书,也是国内第一本专业级游戏测试经典之作,不仅内容全面、实例丰富,而且讲解透彻、可读性强,并提供多个资源下载和技术支持站点。现如今,游戏产业发展迅猛,游戏测试已成为游戏产品、游戏软件、游戏程序设计与开发不可或缺的环节。《游戏测试精通》主要揭示了如何将软件测试的专业方法运用到游戏产业中,全面涵盖了游戏测试的基本......一起来看看 《游戏测试精通》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换