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

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

Design for Hackers

Design for Hackers

David Kadavy / Wiley / 2011-10-18 / USD 39.99

Discover the techniques behind beautiful design?by deconstructing designs to understand them The term ?hacker? has been redefined to consist of anyone who has an insatiable curiosity as to how thin......一起来看看 《Design for Hackers》 这本书的介绍吧!

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

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

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

UNIX 时间戳转换