mysql环形复制的弊端_Docker+阿里云centos7+MySQL主从环形复制踩坑记

老规矩,先列坑

slave链接master的时候,一直提示2003错误

修改了iptables后,docker 下的容器无法正常使用

配置正确后,创建新的db部分机器没有同步

Got fatal error 1236 from master when reading data from binary log: 'unknown error reading log event

安装步骤

1. 安装docker

yum install docker -y

systemctl start docker.service

systemctl enable docker.service

2. 安装MySQL 5.7.13,并且运行

2.1 docker安装mysql5.7版本

docker pull mysql:5.7.13

docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13

2.2 开放3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

提一嘴,这里有个坑

2.3 在本地创建mysql配置文件路径

mkdir -p /usr/local/mysql/master

mkdir -p /usr/local/mysql/slave1

2.4 把docker下的配置文件复制到本地

docker cp master:/etc/mysql/my.cnf /usr/local/mysql/master

2.5 修改配置文件,在 [ mysqld ] 中添加 server-id

vi /usr/local/mysql/master/my.cnf

# 添加下面这两行到 [mysqld] 中

log-bin=mysql-bin

server-id=1

2.6 再把文件复制到docker下

docker cp /usr/local/mysql/master/my.cnf master:/etc/mysql/my.cnf

docker restart master

2.7 通过 Navicat 等工具,链接mysql-master,并且创建slave用户

修改mysql账号密码也可以直接通过navicat进行操作,docker下直接修改root密码我还没找到命令,有知道的可以留言回复告诉我一下~

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup';

show grants for 'backup'@'%';

2.8 创建slave环境,和master配置基本相同

docker run --name slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -e mysql:5.7.13

docker cp slave1:/etc/mysql/my.cnf /usr/local/mysql/slave1

vi /usr/local/mysql/slave1/my.cnf

# [mysqld ]添加

log-bin=mysql-bin

server-id=2 # 这里的server-id不能和master相同

docker cp /usr/local/mysql/slave1/my.cnf slave1:/etc/mysql/my.cnf

docker restart slave1

2.9 配置slave

通过navicat链接到slave1后,执行:

CHANGE MASTER TO

MASTER_HOST='ip',

MASTER_PORT=3306,

MASTER_USER='backup',

MASTER_PASSWORD='backup';

START SLAVE;

到这里,按照我的步骤的话,都应该是正确的。

3. 排坑

3.1 防火墙

老生常谈防火墙~,在查看slave的状态是,发现 Slave_IO_State 的状态一直是connecting而Slave_IO_Running一直是connecting,后面通过把服务器的防火墙关闭后,就可以了。

/bin/systemctl stop iptables.service

3.2 关于修改了iptables后,无法使用docker,重启master服务会提示:

Error response from daemon: driver failed programming external connectivity on endpoint master (817bc6d0cbb1904d02343e35d295281d2c5386e702bd893c770a9d32948ec310): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.

(exit status 1))

Error: failed to start containers: master

这需要我们对docker进行重启,重启后的docker服务会向iptables注册一个链,以便让docker服务管理的containner所暴露的端口之间进行通信

systemctl restart docker.service

docker restart master

docker restart slave1

3.3 部分没有同步问题

这里需要重新清空二进制日志

reset master;

stop slave ;

reset slave;

start slave;

3.4 Got fatal error 1236 from master when reading data from binary log: 'unknown error reading log event

这里需要分析逻辑和主从关系,看一下同步到哪一个库就断了,然后执行reset slave

stop slave;

reset slave;

start slave;

3.5 清空旧的复制信息

reset slave all;

我们使用reset slave后不会清空复制信息的master host, master port, master user, or master password等

4. 延伸

4.1 延伸之 reset master 和reset slave的区别

reset master 是用来清空二进制日志中所有的文件,使bin-log从000001开始,而reset slave是用来清空主从的pos位置关系

reset master一般用于初始化安装主从的时候使用

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

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

相关文章

mysql general clomun_关于MySQL索引index杂谈

MySQL建索引命令create index index_name on tablename(clomun_name.....);比如建了CREATE INDEX O_N_P_D ON t_db_netspeed(o,n,p,d)建好索引之后,使用SELECT 命令进行查询SELECT COUNT(*) FROM t_db_netspeed WHERE O1这句话也会用到前面建立的索引 O_N_P_D&…

pythoncount函数怎么用_python中count函数简单的实例讲解

python中count函数的用法count()函数描述:统计字符串里某个字符出现的次数,可以选择字符串索引的起始位置和结束位置。语法:str.count("char", start,end) 或 str.count("char")返回值:整型参数说明&#xff…

twisted mysql_在Twisted下用MySQLadbapi获取自增id

D jango的ORM有一个很便捷的功能,其实也应该说是一个很基本的功能吧。就是在对一个model调用 save() 插入到数据库后,会将创建的D jango的ORM有一个很便捷的功能,其实也应该说是一个很基本的功能吧。就是在对一个model调用 save() 插入到数据…

java客户端_Java常用的Http client客户端

Http Client应用场景:Http协议是最重要的网络协议之一,目前移动端的开发、javaweb前后端分离架构,使越来越多的java应用使用http协议访问资源。Http client 大多数场景使用在多个服务之间相互调用rest api,特别是现在微服务架构的…

java 新浪邮箱_使用javamail发送邮件,sina的邮箱作为发信人不行

我参照网上,写了一个简单的使用javamail发送邮件的程序,使用一般的邮件服务器作为发件人,程序都很正常;但使用smtp.sina.com.cn作为邮件服务器地址的发件人时,程序却验证失败!这是什么原因?程序…

java des3加密_JAVA加密算法(3)- 对称加密算法(DES、3DES、AES)

对称加密算法概念加密密钥和解密密钥相同,大部分算法加密揭秘过程互逆。特点:算法公开、(相比非对称加密)计算量小、加密速度快、效率高。弱点:双方都使用同样的密钥,安全性得不到保证。常用对称加密算法DES(Data Encryption Stan…

android jni 调用java对象_Android NDK开发之Jni调用Java对象

本地代码中使用Java对象通过使用合适的JNI函数,你可以创建Java对象,get、set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数。JNI通过ID识别域和方法,一个域或方法的ID是任何处理域和方法的函数的必须…

docker 容器端口访问不到_docker容器无法访问宿主机端口的解决

最近在工作时遇到一个问题,docker容器无法访问宿主机的redis,telent6379端口不通。 经排查发现,该服务器启用了防火墙,防火墙把6379的端口的访问授权给docker0网卡访问即可。 操作如下: firewall-cmd --permanent --zone=trusted --change-interface=docker0 firewall-cmd…

java public权限_Java public 访问权限

Java public 访问权限接下来,我们准备为大家介绍“public 访问权限”。在前面的学习中,我们已经接触过public这个关键字,就是在入口方法 main的前面,现在我们可以来回顾一下对应的代码:public class MyTest{publicstat…

java timer线程结束_Java线程Timer定时器用法详细总结

定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联。Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类。TimerTask类是一个抽象类。执行任务的时间晚于当前时间…

java在创建对象时必须_Java中5种创建对象的方式

以下是一些在Java中创建对象的方法:1、 使用new关键字使用new关键字是创建对象的最基本方法。这是在java中创建对象的最常见方法。几乎99%的对象都是这样创建的。通过使用这个方法,我们可以调用我们想要调用的任何构造函数(无参数或参数化构造函数)。//J…

java类的定义的实例_Java中类的定义和初始化示例详解

类的定义类的定义格式//创建类class classname{field ;//成员属性/字段method;//方法}class为定义类的关键字,classname为类的名字,{ }为类的主体;例如:class person{public string name ; //成员属性publi…

java 多线程池_Java ThreadPoolExecutor线程池 同时执行50个线程

最近项目上有个需求,需要从FTP服务器中下载大批量的数据文件,然后解析该数据文件进行入库,数据库为oracle,最后在通过web工程,以报表和图表的形式进行展现。这些批量的数据文件为纯文本文件,每天产生数据文…

java and dsl_Groovy语法糖以及DSL

前言Why初次接触到Groovy是在实习中接触到一个 纯Groovy写的项目,当时看了下这不就是没有分号的Java么,而且也是有年纪的语言了,并不想投入时间学习。后来工作中越来越多的看到Groovy的身影,Gradle,Spring Cloud Contr…

java序列化的方法_【Java常见序列化与反序列方法总结】

人和电脑在很多方面都是十分相似的,大脑可以看成电脑主机,五官/身体等表面器官就是显示器、鼠标等外设。这篇文章就是想把计算机跟人做类比YY一下序列化和反序列化的机制、用途。如果你是初学者,心里肯定会问究竟什么是序列化/反序列化&#…

python的编码模块char_关于sqlmap当中tamper脚本编码绕过原理的一些总结(学习python没多久有些地方肯定理解有些小问题)...

sqlmap中tamper脚本分析编写置十对一些编码实现的脚本,很多sqlmap里面需要引用的无法实现,所以有一部分例如keywords就只写写了几个引用了一下,其实这里很多脚本运用是可以绕过安全狗的。本人也是刚开始学习python没多久,有一些错…

java的多态怎么理解_JAVA多态的理解

面向对象的三大特性:封装、继承、多态,其中最难理解的就是多态以下是网上某大神给的一个例子:1.继承关系class A {public String show(D obj){return ("A and D");}public String show(A obj){return ("A and A");}}clas…

java class isassignablefrom_Java之——Class的isAssignableFrom方法

转载请注明出处 https://blog.csdn.net/l1028386804/article/details/80508540Class的isAssignableFrom方法定义如下public native boolean isAssignableFrom(Class ? cls);由方法签名可见是一个本地方法 即C代码编写的。以下是JDK中的注释Determines if the class or interfa…

java中堆栈的基本操作_玩儿转队列和栈的基本操作及其应用:Java 版

队列的基本操作队列入队出队实现队列是种先进先出的数据结构。队列的基本操作主要是入队和出队。数据从队尾进入队列,从队首出队列。下面来写一个简单的队列:public class MyQueue {private List data;private int pointer;public MyQueue() {data new ArrayList&l…

java规定日期格式输出_Java格式化输出日期百分比时间等

Java格式化输出Java的格式化输出等同于String.Format,与C有很大的相似,比如System.out.printf(“%8.2f”, x);在printf中,可以使用多个参数,例如:System.out.printf(“Hello, %s. Next year, you’ll be %d”, name, a…