1. 在/user/local/share/下创建mysql文件夹,在mysql文件夹目录下创建4个文件夹分别是:

master1, master2, slave1, slave2分别在每个目录下建立data, conf, logs用于数据持久化

创建后如下

2.创建容器:

1)创建一个名为master1的mysql容器(主 mysql)

docker run -p 4306:3306 --name master1 \

-v /usr/local/share/mysql/master1/conf:/etc/mysql/conf.d \-v /usr/local/share/mysql/master1/logs:/var/log/mysql \-v /usr/local/share/mysql/master1/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 -itd mysql:8.0.22

2)创建一个名为master2的mysql容器(主 mysql)

docker run -p 4307:3306 --name master2 \

-v /usr/local/share/mysql/master2/conf:/etc/mysql/conf.d \-v /usr/local/share/mysql/master2/logs:/var/log/mysql \-v /usr/local/share/mysql/master2/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 -itd mysql:8.0.22

3)创建一个名为salve1 的mysql容器(从 mysql)

docker run -p 5306:3306 --name salve1 \

-v /usr/local/share/mysql/salve1/conf:/etc/mysql/conf.d \-v /usr/local/share/mysql/salve1/logs:/var/log/mysql \-v /usr/local/share/mysql/salve1/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 -itd mysql:8.0.22

4)创建一个名为salve2的mysql容器(从 mysql)

docker run -p 5307:3306 --name salve2 \

-v /usr/local/share/mysql/salve2/conf:/etc/mysql/conf.d \-v /usr/local/share/mysql/salve2/logs:/var/log/mysql \-v /usr/local/share/mysql/salve2/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD= 123456 -itd mysql:8.0.22

命令参数注解:

--name : 容器名称

-p : 映射容器端口号和宿主机端口号

-v : 挂载宿主机目录和docker容器中的目录,前面是宿主机目录,后面是容器内部目录

-d : 后台运行容器

-e :环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码

-itd : 指定数据库版本

3.查看是否将mysql容器创建成功

命令:docker ps

4.配置(双主双从)

1) 配置master1

命令:vim /usr/local/share/mysql/master1/conf/my.cnf  添加如下内容:

[mysqld]# master01主服务器01唯一ID

server-id=4306# 启用二进制日志log-bin=mysql-bin

#从库的中继日志,主库日志写到中继日志,中继日志再重做到从库

# relay-log=myslql-relay-bin

# binlog保留时间7天

expire_logs_days=7# binlog 文件的大小

max_binlog_size=1G

#设置logbin格式。取值:STATEMENT (默认),ROW,MIXED

binlog_format=ROW

# 设置不要赋值的数据

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

# 设置需要复制的数据(可选)

# 如果配置了此项,就是只复制那个数据库, 如果不指定就是所有

# binlog-do-db=需要复制的主数据库1

# 设置login格式

binlog_format=STATEMENT

# 在作为从数据库的时候,有写入操作也要更新二进制日志文件log-slave-updates

# 该从库是否写入二进制日志。如果需要成为多主则可启用。只读可以不需要log-slave-updates=1#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 ..65535auto-increment-increment=2# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 ..65535auto-increment-offset=1

2)配置master2

命令:vim /usr/local/share/mysql/master2/conf/my.cnf  添加如下内容:

[mysqld]# master01主服务器01唯一ID

server-id=4307# 启用二进制日志log-bin=mysql-bin

#从库的中继日志,主库日志写到中继日志,中继日志再重做到从库

# relay-log=myslql-relay-bin

# binlog保留时间7天

expire_logs_days=7# binlog 文件的大小

max_binlog_size=1G

#设置logbin格式。取值:STATEMENT (默认),ROW,MIXED

binlog_format=ROW

# 设置不要赋值的数据

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

# 设置需要复制的数据(可选)

# 如果配置了此项,就是只复制那个数据库, 如果不指定就是所有

# binlog-do-db=需要复制的主数据库1

# 设置login格式

binlog_format=STATEMENT

# 在作为从数据库的时候,有写入操作也要更新二进制日志文件log-slave-updates

# 该从库是否写入二进制日志。如果需要成为多主则可启用。只读可以不需要log-slave-updates=1#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 ..65535auto-increment-increment=2# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 ..65535auto-increment-offset=1

3)配置slave1

命令:vim /usr/local/share/mysql/slave1/conf/my.cnf  添加如下内容:

[mysqld]# 从服务唯一ID

server-id=5306# 启用中继日志

relay-log=mysql-relay

4)配置slave2

命令:vim /usr/local/share/mysql/slave2/conf/my.cnf  添加如下内容:

[mysqld]# 从服务唯一ID

server-id=5307# 启用中继日志

relay-log=mysql-relay

注:查看server_id 的语句  show variables like 'server_id';

5.配置完成后重启容器,即可生效

docker restart $(docker ps -q)

6.创建数据库相关账户并授权

1)进入容器 master1是容器名称

docker exec -it master1 bash

2)进入mysql窗口

mysql -uroot -p123456 //-u表示账号 -p密码(为上述创建容器时设置)

3)创建一个用户来做同步的用户,并授权,所有集群内的服务器都需要做

create user 'master1'@'%' identified with mysql_native_password by 'a123456';

grant replication slave,replication client on *.* TO 'master1'@'%'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.245.139,加强安全。

4)刷新生效

flush privileges;

6)使用exit命令退出mysql命令、退出master1容器

7)进入master2容器创建账号:

docker exec -it master2 bash //进入容器master2

mysql -uroot -p123456 //进去mysql窗口

mysql> create user 'master2'@'%' identified with mysql_native_password by 'a123456'; //创建账号 master2

mysql>grant replication slave,replication client on *.* TO 'master2'@'%'; //授权

mysql> flush privileges;//刷新生效

7.从机复制主机

slave1复制master1 slave2复制master2

#复制主机的命令

CHANGE MASTERTO MASTER_HOST='主机的IP地址',//查看容器ip的命令 docker inspect master1 |grep IPAddress #master1 容器名称

MASTER_USER='username',//主机的数据库账号

MASTER_PASSWORD='passworld',//主机的数据库密码

MASTER_LOG_FILE='mysql-bin.具体数字',

MASTER_LOG_POS=具体值;

配置slave1:

如下图即为主机master1的参数:

master_log_file的值对应为File的值

master_log_pos的值为Position对应的值

配置步骤:

同上述主机配置 先进入容器salve1->再进入mysql窗口运行如下命令即可,具体参数配置根据自己安装的查询填写

change master to master_host='172.17.0.2',

master_user='master1',

master_password='a123456',

master_log_file='mysql-bin.000004',

master_log_pos=156;

启用同步进程

start slave;

查看同步从库状态

show slave status\G;

如上图没有相关报错信息就是配置成功了

本人安装时遇到的问题:

执行start slave时报:

Slave failed to initialize relay log info structure from the repository

原因:由于之前配置过主从备份已经执行过一次change master to命令,这次再次执行change master to,2次的pos值不一样。

解决:

#停止同步

stop slave

# 重置slave

reset slave;

# 执行同步change master to master_host='172.17.0.2',

master_user='master1',

master_password='a123456',

master_log_file='mysql-bin.000004',

master_log_pos=156;

# 启动slave

start slave;

# 查看slave状态

show slave status\G;

配置完成后报错:

The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manu

原因:server_id重复,是由于配置文件放错位置,导致未生效

解决:my.cnf放到容器创建时指定的位置,重启容器即可

同理配置slave2,不再重复赘述

change master to master_host='172.17.0.3',

master_user='master2',

master_password='a123456',

master_log_file='mysql-bin.000003',

master_log_pos=880;

8.两主机互相复制

master1复制master2, master2复制master1

配置master1:

change master to master_host='172.17.0.3',

master_user='master2',

master_password='a123456',

master_log_file='mysql-bin.000003',

master_log_pos=880;

启用同步进行:

start master

查看状态:

show slave status\G;

如上报错:

解决:使用flush privileges 刷新一下即可,如果还是不行,使用show master status\G;查看对应的主机信息是否已经变更新了,重新设置slave即可

正常的显示如下:

同理配置master2复制master1

change master to master_host='172.17.0.2',

master_user='master1',

master_password='a123456',

master_log_file='mysql-bin.000004',

master_log_pos=156;

到此就完成了安装和配置

测试以上集群是否成功:

1.在master1上创建一个库

CREATE DATABASE test_db;

2.创建一个表

CREATE TABLE IF NOT EXISTS `user`(

`id`INTUNSIGNED AUTO_INCREMENT,

`name`VARCHAR(30) NOT NULL,

`age`INT(3) NOT NULL,PRIMARY KEY( `id` )

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.插入数据

INSERT INTO user (name, age) VALUES ("zhaoming", 18);INSERT INTO user (name, age) VALUES ("张三", 20);

出现如下说明主从同步成功,至此集群可以快乐玩耍了:

docker 多个mysql_mysql8.0 利用docker容器安装配置多主多从集群相关推荐

  1. mysql8.0 利用docker容器安装配置多主多从集群

    mysql8.0 利用docker容器安装配置多主多从集群 原文:https://www.cnblogs.com/lkl6/p/14191419.html

  2. 【云原生 | Docker 高级篇】03、搭建 Redis 3主3从集群

    目录 3主3从redis集群配置 一.新建6个docker容器redis实例 二.进入容器redis-node-1并为6台机器构建集群关系 三.链接进入6381作为切入点,查看节点状态 四.​​​​​ ...

  3. Docker容器安装配置

    Docker容器安装配置 一.检查服务器环境 1.系统内核 2.系统版本 二.Docker安装 1.Docker官方网址 2.卸载旧的版本docker 3.需要的安装包 4.设置镜像的仓库 5.查看d ...

  4. 容器编排技术 -- Kubernetes从零开始搭建自定义集群

    容器编排技术 -- Kubernetes从零开始搭建自定义集群 1 设计和准备 1.1 学习 1.2 Cloud Provider 1.3 节点 1.4 网络 1.4.1 网络连接 1.4.2 网络策 ...

  5. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三

    在上文ASP.NET Core应用程序容器化.持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集 ...

  6. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

    在上文中我介绍了ASP.NET Core应用程序容器化时需要注意的几个问题,并给出了一个案例应用程序:tasklist.今天接着上文的内容,继续了解一下如何使用Azure DevOps进行ASP.NE ...

  7. Hadoop-2.8.0集群搭建、hadoop源码编译和安装、host配置、ssh免密登录、hadoop配置文件中的参数配置参数总结、hadoop集群测试,安装过程中的常见错误

    25. 集群搭建 25.1 HADOOP集群搭建 25.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据 ...

  8. 容器编排技术 -- 使用Minikube 部署 Kubernetes 集群

    容器编排技术 -- 使用Minikube 部署 Kubernetes 集群 单机部署 创建Kubernetes cluster(单机版)最简单的方法是minikube: 首先下载kubectl cur ...

  9. MySQL8.0.23 社区免费版安装配置教程

    MySQL8.0.23社区免费版安装配置教程 文章目录 MySQL8.0.23社区免费版安装配置教程 1. 官网下载MySQL8.0.23 2.配置初始化的my.ini文件的文件 3. 把文件移动到设 ...

最新文章

  1. 技术大牛养成指南,一篇不鸡汤的成功学实践
  2. 《需求工程-软件建模与分析之读书笔记之三》
  3. -bash: jps: command not found
  4. js实现php中sleep()延时的功能
  5. sdr 软件_【火腿专题】购买软件定义无线电(SDR)还是传统无线电台?追求欲望无止境...
  6. 基于Active Directory的用户验证
  7. x61 linux 驱动 无线网卡,Linux环境Thinkpad X61 4G内存Mtrr表错误
  8. 我是如何从一个xss到某个浏览器的远程命令执行
  9. 他山之石,可以攻玉--从伪代码的角度来理解排序算法
  10. 2022国产GIS软件排名
  11. php 根据身份证计算年龄
  12. 911 S5代理设置
  13. Blender程序化建模简明教程【PCG】
  14. SpringBoot2——web开发(组件使用)
  15. 计算机 黑屏 显示桌面,电脑开机后显示桌面黑屏了怎么处理啊?
  16. 涅普计划-PHP入门
  17. Android 音频可视化
  18. 【Spring】Spring事务管理
  19. poi替换word内容
  20. 微软在华十年:向中国倾斜

热门文章

  1. 【渝粤教育】电大中专职业应用写作作业 题库
  2. LoRa是怎样实现定位的
  3. json文件读取之reader.onload中的定义的变量在其函数外部进行处理
  4. Java常用类(5)--不可变的任意精度BigInteger、BigDecimal类
  5. centos安装llvm_Linux CentOS上编译并安装Clang教程
  6. python中sorted的用法append_Python中高阶函数sorted()用法
  7. php如何写log日志,用php生成log日志
  8. 广告行业一些常用物料的尺寸
  9. 【BZOJ1069】【SCOI2007】—最大土地面积(凸包+旋转卡壳)
  10. 初入WEBOTS半个月来的一点总结