mysql-搭建主从复制

news/2024/12/14 15:28:19/文章来源:https://www.cnblogs.com/xuxiaobo/p/18606798

mysql-搭建主从复制


Master(主):
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Slave(从):
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

Master对外映射的端口是3339,Slave对外映射的端口是3340。因为docker容器是相互独立的,
每个容器有其独立的ip,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用mysql默认的3306端口,否则可能会出现无法通过ip连接docker容器内mysql的问题。

 

配置主服务器
docker exec -it master /bin/bash

#使用yum install vim
vim /etc/mysql/my.cnf


[mysqld]
server-id=100
# 开启binlog日志
log-bin=mysql-bin


保存并退出

docker restart master
docker exec -it master /bin/bash


下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
mysql -uroot -p123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';


配置从服务器
docker exec -it slave /bin/bash

#使用yum install vim
vim /etc/mysql/my.cnf


[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin

 

链接Master(主)和Slave(从)
docker exec -it master /bin/bash
mysql -uroot -p123456
show master status;

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。

 

docker exec -it slave /bin/bash
mysql -uroot -p123456
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 154, master_connect_retry=30;

mysql> change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 154, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.03 sec)


root@xuxb-VirtualBox:~# docker inspect --format='{{.NetworkSettings.IPAddress}}' master
172.17.0.2


master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒


在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 172.17.0.2
Master_User: slave
Master_Port: 3339
Connect_Retry: 30
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: edu-mysql-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: No
Slave_SQL_Running: No


mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

如果主从同步有问题,show slave status \G; 可以查看,我就是看出来端口有问题。然后再去修改mysql> change master xxxxx
Last_IO_Errno: 2003
Last_IO_Error: error connecting to master 'slave@172.17.0.2:3339' - retry-time: 30 retries: 11


mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.17.0.2
Master_User: slave
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 154
Relay_Log_File: edu-mysql-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是 No,因为我们还没有开启 主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。


参考:
https://mp.weixin.qq.com/s?__biz=Mzg4ODQ1NTE2Mg==&mid=2247568072&idx=1&sn=d6c5ef64330f345033b73190ad481d80&chksm=ce262000a02ca1545fbe45a73feb1078e1f431beda740ac759a71c09d2dc8cb41e5f17ab3f95&scene=27

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

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

相关文章

haproxy配置负载均衡

####安装#####sudo apt updatesudo apt install haproxysudo haproxy -vsudo systemctl status haproxysudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg-org ####配置站点#####vim /etc/haproxy/haproxy.cfg==========================================frontend w…

MUR3060PT-ASEMI快恢复二极管MUR3060PT

MUR3060PT-ASEMI快恢复二极管MUR3060PT编辑:ll MUR3060PT-ASEMI快恢复二极管MUR3060PT 型号:MUR3060PT 品牌:ASEMI 封装:TO-247 特性:快恢复二极管 正向电流:30A 反向耐压:600V 恢复时间:35ns 引脚数量:3 芯片个数:2 芯片尺寸:MIL 浪涌电流:300A 漏电流:10ua 工作…

Jenkins安装ubuntu

ubuntu安装Jenkins apt install fontconfig openjdk-17-jre sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.keyecho "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" https://pkg.jenkin…

docker更新源

更新docker源修改docker源 vim /etc/docker/daemon.json{"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com/","https://ccr.ccs.tencentyun.com/","https://docker.m.daocloud.io/"] }重新加载docker的配置文件 system…

gitlab-runner执行失败

gitlab runner : ERROR: Job failed: prepare environment https://segmentfault.com/a/1190000044719792 查询相关的站点显示错误的原因是由于gitlab runner执行了用户文件夹下的.bash_logout脚本。 一般的解决方法都是将github-runner用户下的.bash_logout中的内容注释掉即可…

gitlab-cid示例1

default: before_script: - echo "start deploy" - echo $CI_COMMIT_REF_NAME # 阶段stages: - install - buildDev - buildTest - buildProd - deployDev - deployTest - deployProd cache: paths: - node_modules/ # 安装依赖install: stage: i…

typora 无限试用去除弹窗修改未激活按钮|Typora实现cnblog文章的推送

typora 无限试用|去除弹窗|修改未激活按钮|Typora实现cnblog文章的推送 改注册表无限试用 start.bat文件 @echo off setlocal enabledelayedexpansion chcp 65001 > nulREM 获取当前日期,格式为MM/dd/yyyy for /f "delims=" %%a in (wmic OS Get localdatetime ^…

微信模板消息

1、注册登陆微信公众平台公众号 2、申请测试账号 3、关注微信公众号、添加测试模板 发消息实现代码package org.example.weixin;import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil;i…

GraphRAG:基于知识图谱的RAG,好用,贼贵!

转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/7d21f69b.html你好,我是测试蔡坨坨。 在往期文章中,我们探讨了RAG的应用。然而,在实际使用过程中,我们发现传统RAG的表现并未完全满足预期(例如:在处理数据时,使用默认效果不佳,切片乱七八糟。因此需要花…

2024-2025-1 学号20241315《计算机基础与程序设计》第十二周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12这个作业的目标 <写上具体方面>《C语言程序设计》第11章并完成云班课测试作业正文 https://www.cnblo…

2024-2025-1 20241318 《计算机基础与程序设计》第十二周学习总结

这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12这个作业的目标 <自学教材《C语言程序设计》第11章并完成云班课测试>| |作业正文|https://i.cnblogs.com/posts/e…

集合的数据筛选

1.集合的数据筛选 1.创建集合,并封装数据2.许愿有一个方法,可以判断年龄,然后alt+回车创建该方法(忽略这里未封装数据)3.在方法中,创建新的集合,存储年龄小于18的对象4.遍历list集合,每一个元素都有可能小于18,再使用if判断,将满足条件的元素存入newlist集合5.在主方法…