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

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

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

创建后如下

9a98748efedc241f65d52662ab46042c.png

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

ead93e13d22ddd119cceb8466ff6bbfc.png

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对应的值

39ccff20c3bd53dcf7dda515cdc95aaa.png

配置步骤:

同上述主机配置 先进入容器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;

fcece534436c379f18b2ea216fe52822.png

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

本人安装时遇到的问题:

执行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;

c7874a283f2fbec1ae7306b80568ee05.png

如上报错:

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

正常的显示如下:

fd3bb873abfdbcb974b33b5fa1334879.png

同理配置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);

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

cd1789d25515ba048153f7840f5fe922.png

8c5cbf18857f28a0965c6889aebb6937.png

670ffe5feb20a1a6dd5cc74b45515026.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaFX 2.0和Scala,例如牛奶和饼干

JavaFX 2.0和Scala都是很好的技术,但是一起使用时效果会更好。 JavaFX 2.0是一种功能强大的富客户端技术,具有先进的图形,动画和媒体功能。 Scala是一种简单但功能强大的语言,具有用于编写特定于域的语言(DSL&#xff…

thinkphp+mysql+join+where_thinkphp5.0 多join时where无法between

情况类似于这个链接,这帖子的老哥没有答案,现在遇到一样的问题了,下面贴上代码$map [products.insurance_status>1];//是否计算下线的产品if( input(get.times) && input(get.times) < 7 ){$time return_times(input(get.times));//此处有bug$map[order.pay_ti…

访客设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

报名照片审核处理工具_太浦军考|2020年文职人员报名照片审核程序,照片处理工具应该如何使用?...

考文职 找太浦 最靠谱照片处理工具使用说明01注意&#xff1a;一、本工具是报名照片审核处理工具&#xff0c;只有通过该审核工具审核通过的照片才能在注册时正常上传。照片将应用在准考证和合格证书中。二、源文件必须是标准证件数字照片&#xff0c;JPG或JPEG格式&#xff0c…

python 比赛成绩预测_Python预测NBA比赛结果

下载W3Cschool手机App&#xff0c;0基础随时随地学编程导语利用Python简单地预测一下NBA比赛结果。。。这大概就叫蹭热度吧。。。毕竟貌似今天朋友圈都在刷NBA相关的内容。。。虽然我并不能看懂。。。但这并不妨碍我瞎预测一波。。。So,以下内容纯属瞎玩&#xff0c;如有雷同&a…

适配器设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

cesium鼠标控制键盘_Cesium中级教程3 - Camera - 相机(摄像机)

CameraCesiumJS中的Camera控制场景的视图。有很多方法可以操作Camera&#xff0c;如旋转(rotate)、缩放(zoom)、平移(pan)和飞到目的地(flyTo)。CesiumJS有鼠标和触摸事件用来处理与Camrea的交互&#xff0c;还有API来以编程方式操作摄像机。了解如何使用Camera API和自定义相机…

windows下统一mysql编码_mysql5.7 windows7编码统一utf-8

查看mysql数据编码登录mysql服务&#xff0c;查看mysql数据库默认的编码mysql> show variables like character%;---------------------------------------------------------------------------| Variable_name | Value |------------------------------------------------…

python读取配置文件失败原因_python读取配置文件报keyerror-文件路径不正确导致的错误...

- 在其他模块使用反射读取配置文件报错&#xff0c;但是在反射模块中读取GetData.check_list又是正确的反射模块如下&#xff1a;# get_data.pyfrom API_AUTO.p2p_project_7.tools import project_pathimport pandas as pdfrom API_AUTO.p2p_project_7.tools.read_config impor…

备忘录设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

打印机一直显示正在删除不掉怎么办?

1、停止打印服务&#xff0c;按WinR键打开运行对话框&#xff0c;然后输入“services.msc ” 打开任务管理。 找到“Print Spooler”&#xff0c;先停止该服务。 按WinR键打开运行对话框&#xff0c;然后输入“Spool” 回车打开“spool” 文件夹&#xff0c;打开“PRINTERS”文…

java 并发 面试_Java 并发基础常见面试题总结

1. 什么是线程和进程?1.1. 何为进程?进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因此进程是动态的。系统运行一个程序即是一个进程从创建&#xff0c;运行到消亡的过程。在 Java 中&#xff0c;当我们启动 main 函数时其实就是启动了一个 JVM…

javafx动画_JavaFX:创建Sprite动画

javafx动画到目前为止&#xff0c;尽管我的大多数文章都涉及JavaFX属性和绑定&#xff0c;但是今天我想写一讲我也致力于JavaFX运行时的另一部分&#xff1a;动画API。 在本文中&#xff0c;我将解释如何在JavaFX中编写自定义动画&#xff0c;以及如何使用这种方法为Sprite动画…

FZU Problem 2238 Daxia Wzc's problem

Daxia在2016年5月期间去瑞士度蜜月,顺便拜访了Wzc,Wzc给他出了一个问题&#xff1a; Wzc给Daxia等差数列A(0),告诉Daxia首项a和公差d; 首先让Daxia求出数列A(0)前n项和,得到新数列A(1); 然后让Daxia求出数列A(1)前n项和,得到新数列A(2); 接着让Daxia求出数列A(2)前n项和,得到新…

生成器设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

【转】从 ArcGIS for Desktop 发布地图服务

原文链接&#xff1a;http://resources.arcgis.com/zh-CN/help/tutorials/01z300000007000000.htm 本教程的目的是将地图服务直接从 ArcGIS for Desktop 发布到 ArcGIS for Server 中。本教程与名为“在 ArcMap 中准备您的 Web 地图”的上一教程类似&#xff0c;需要使用 ArcGI…

java 模块化osgi_OSGi简介–模块化Java

java 模块化osgiOSGi联盟是这种搁浅的管理机构&#xff0c;它始于1999年。其最初目标是为网络设备创建开放搁浅。 基于此思想&#xff0c;此规范也针对Java引入。 Eclipse在Java中是第一个。 他们于2004年6月推出了基于OSGi的Eclipse IDE。 OSGi是在Java中定义动态模块的方法。…

Train Problem I hdu 1022(栈)

http://acm.split.hdu.edu.cn/showproblem.php?pid1022 题意&#xff1a;给出火车的进站与出站顺序&#xff0c;判断是否可以按照给出的出站顺序出站。 #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <…

Spring数据和Redis

本文是我们学院课程的一部分&#xff0c;标题为Redis NoSQL键值存储 。 这是Redis的速成班。 您将学习如何安装Redis并启动服务器。 此外&#xff0c;您将在Redis命令行中乱七八糟。 接下来是更高级的主题&#xff0c;例如复制&#xff0c;分片和集群&#xff0c;同时还介绍了…

史上最全的SpringMVC学习笔记

SpringMVC学习笔记---- 一、SpringMVC基础入门&#xff0c;创建一个HelloWorld程序 1.首先&#xff0c;导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->&…