当前位置:网站首页>Docker搭建Mysql主从复制
Docker搭建Mysql主从复制
2022-08-01 23:44:00 【前端的哭】
Docker搭建Mysql主从复制
前言
相信我,看完这一篇,mysql主从复制能遇到的错误在我这里都遇到了,docker能遇到的错误在我这里也遇到了,包括centos的错误,看吧,都是成长
docker基础教程:https://blog.csdn.net/hello_list/article/details/124221409
Linux基础教程:https://blog.csdn.net/hello_list/article/details/123977208
Linux安装mysql:https://blog.csdn.net/hello_list/article/details/124761680
如果你还没有用docker搭建过mysql先不要急着搭建集群,可以显示着用docker搭建一个mysql,这里有教程,可以先试着去搭建一个mysql:
之前我们使用docker搭建了一个Mysql,那既然一个Mysql我们可以搭建成功,集群还不是分分钟,今天我们就简单搭建一个Mysql集群,就搭建一个最简单的一主一从的主从复制吧,如果一个搭建成功一主多从也是很简单,废话不多说,直接开始
这里我们只说安装啊,不说什么原理:
我们首先就是安装Mysql一样;其实就相当于虚拟机跑了两个mysql而且,平常怎么搭建Mysql就怎么搭建,这里如果不是学习不建议mysql用docker容器搭建,因为我们知道一个容器可以被删除卸载,而数据库作为保存数据的,跑在docker上还是不安全,虽然有挂载,还是不建议;
配置Mysql-master
启动容器
docker run -p 3308:3306 --name mysql-master # -p 映射端口 --name 取容器名字
-v /mydata/mysql-master/log:/var/log/mysql # 这三个都是挂载目录
-v /mydata/mysql-master/data:/var/lib/mysql
-v /mydata/mysql-master/conf:/etc/mysql
–privileged=true # 提升容器权限
-e MYSQL_ROOT_PASSWORD=root # 初始化密码
-d mysql:5.7 # 后台运行容器
启动成功
配置master的my.cnf文件
> vim /mydata/mysql-master/conf/my.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=1
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
## 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
配置成功
查看下主机是有的:
这里重启下记得,重新加载下配置文件;
到后面进入容器的时候,才发现容器有问题,就是做的时候先把自己环境清理赶紧,然后重新执行,这次容器启动起来了,配置文件那个目录什么的都清理干净
开启从机Mysql-slave01
启动容器
配置slave01的my.cnf文件
cd /
mkdir mydata
cd mydata
mkdir mysql-slave01
cd mysql-slave01
mkdir conf
cd conf
vim my.cnf
> vim /mydata/mysql-slave01/conf/my.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=2
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
##复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
与第一步一样:
废了九牛二虎之劲把两个容器启动起来了,主要是我的虚拟机存储满了,第二个容器一直启动不起来:
可以看到虚拟机启动起来,用的是我们的配置文件
但是还要从启动下,加载下配置文件,之后查看,是否是我们自己配置的id:
SHOW VARIABLES LIKE 'server_id';
查看下,我们两台容器的IP地址
docker inspect mysql-master
master地址是0.2
docker inspect mysql-slave01 # 03
进入master容器,执行以下命令
docker exec -it mysql-master /bin/bash
mysql > mysql -uroot -pmaster的密码
# 授予slave服务器可以同步master服务
mysql > grant replication slave, replication client on *.* to 'root'@'slave服务的ip' identified by 'slave服务器的密码';
#这里是grant replication slave, replication client on *.* to 'root'@'172.17.0.3' identified by 'root';
mysql > flush privileges;
# 查看MySQL现在有哪些用户及对应的IP权限(可以不执行,只是一个查看)
mysql > select user,host from mysql.user;
查询下当前结点位置
mysql > show master status;
进入从mysql-slave01,这里我直接开启了两个终端,这样方便:
docker exec -it mysql-slave01 /bin/bash
绑定主mysql
mysql> change master to master_host='master服务器ip', master_user='root', master_password='master密码', master_port=3306, master_log_file='mysql-bin.000003(这里跟前面我画箭头那对应起来)',master_log_pos=618(这里也是);
最后是
change master to master_host='172.17.0.2', master_user='root', master_password='root', master_port=3308, master_log_file='mysql-bin.000003',master_log_pos=618;
在主mysql下开启主从复制功能:
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
查看状态:
mysql> show slave statusG
一直显示连接中,证明没有开启成功
看错误提示:
这个错误我找了差不都两个小时,然后我尝试着链接不上?我用本机也就是虚拟机然后链接,一下就连上了
容器内我怎么也连接不上,但是
ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.2' (111)
[email protected]:/# mysql -uslave -h 172.17.0.2 -p -P3308
我发现我通过虚拟机ip可以连接,突然想明白了,我们是在容器内和容器外做的端口映射,而映射到虚拟机也就是本机是3308,容器内端口还是3306,然后就,之前写草稿的时候我还括号了这点,坑死了,啊~,可以说我这篇是把遇到的问题都遇到了,我成长了,成长了太多了,啊!!!
解决完之后又遇到一个错误:
uuid重复了,查看:确实重复了,我感觉这些错误,可以了
show variables like '%server_uuid%';
在主机中的文件,找到任意一个
vim /mydata/mysql-slave01/data/auto.cnf
修改一下,保存,重新启动mysql-slave容器:
然后我们在执行:
1、查看master节点
2、查看授权信息
3、进行授权
4、绑定主mysql
5、开启主从复制
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to master_host='172.17.0.2', master_user='root', master_password='root', master_port=3306, master_log_file='mysql-bin.000008',master_log_pos=1210;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.04 sec)
搞定,两个yes连接成功
测试
在开发中主从复制之后不可以随意新增数据库,但是今天我们就尝试下,可以看到我们已经完成了主从复制:
这个之外的,我遇到的问题
启动第二个容器老是失败,提示我centos虚拟机存储快满了,我一看,确实满了,安装了不少东西,而且docker也挺费的,当初就是使用的20G,已经可以了,扩容到了30G,哈哈,看着这个教程扩容的,它的虚拟机跟我的一模一样,真好,直接看着就做下来了,扩容成功:https://www.cnblogs.com/friendwang1001/p/15725732.html
但是扩容之后,网络启动失败,可能是扩容的时候什么文件的原因吧,然后又找到一篇博客,就搞定了,这里,报错就是这个报错:(2条消息) Job for network.service failed because the control process exited with error code.报错解决方法_如是我愿的博客-CSDN博客
service NetworkManager stop 关闭 NetworkManger 服务
chkconfig NetworkManager off 永久关闭 Manager网卡
service network restart 重启network网卡
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- @Scheduled注解详解
- [LeetCode304 Weekly Competition] Two questions about the base ring tree 6134. Find the closest node to the given two nodes, 6135. The longest cycle in the graph
- oozie startup error on cdh's hue, Cannot allocate containers as requested resource is greater than maximum allowed
- Chapter 19 Tips and Traps: Common Goofs for Novices
- Share an interface test project (very worth practicing)
- 访问控制台中的选定节点
- 云原生DevOps环境搭建
- Data Organization --- Chapter 5 Trees and Binary Trees --- The Concept of Binary Trees --- Application Questions
- Quartus 使用 tcl 文件快速配置管脚
- 中职网络安全竞赛B7比赛部署流程
猜你喜欢
随机推荐
Spark Sql之join on and和where
工作5年,测试用例都设计不好?来看看大厂的用例设计总结
Getting started with IDEA is enough to read this article
Use Jenkins for continuous integration, this knowledge point must be mastered
bat 之 特殊字符&转义
TCP 可靠吗?为什么?
[LeetCode304周赛] 两道关于基环树的题 6134. 找到离给定两个节点最近的节点,6135. 图中的最长环
[Camp Experience Post] 2022 Cybersecurity Summer Camp
Deep Learning Fundamentals - Numpy-based Recurrent Neural Network (RNN) implementation and backpropagation training
Appears in oozie on CDH's hue, error submitting Coordinator My Schedule
斜堆、、、
Is TCP reliable?Why?
numpy.isclose
6133. Maximum number of packets
访问控制台中的选定节点
numpy.where
数据机构---第五章树与二叉树---二叉树的概念---应用题
计算由两点定义的线的角度
sys_kill system call
Chapter 19 Tips and Traps: Common Goofs for Novices