MySQL实现主从同步

一、首先我们准备3台mysql

分别为:

主服务器:test-mysql-master,端口3306

从服务器:test-mysql-slave1,端口3307

从服务器:test-mysql-slave2,端口3308

注意:如果防火墙是开着的记得把关掉,并且重启docker,否则安装的mysql会无法启动,当然也可以dan'du

#关闭docker

systemctl stop docker

#关闭防火墙

systemctl stop firewalld

#启动docker

systemctl start docker

1.1、准备主服务器

step1:在docker中创建并启动MySQL主服务器:端口3306

docker run -d \
-p 3306:3306 \
-v /test/mysql/master/conf:/etc/mysql/conf.d \
-v /test/mysql/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name test-mysql-master \
mysql:8.0.35

step2:创建MySQL主服务器配置文件:

默认情况下MySQL的binlog日志是自动开启的,可以通过如下配置定义一些可选配置

vim /test/mysql/master/conf/my.cnf

配置内容如下

[mysqld]

#服务器唯一id,默认值1

server-id=1

#设置日志格式,默认值ROW

binlog_format=STATEMENT

#二进制日志名,默认binlog

# log-bin=binlog

#设置需要复制的数据库,默认复制全部数据库

#binlig-do-db=mytestdb

#设置 不需要复制的数据库

#binlog-ignore-db=mysql

#binlog-ignore-db=infomation_schema

重启MySQL容器

docker restart test-mysql-master

step3:使用命令行登录MySQL主服务器:

#进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码

docker exec -it test-mysql-master env LANG=C.UTF-8 /bin/bash

#进入容器内的mysql命令行

mysql -uroot -p

#修改默认密码校验方式

#ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

step4:主机中创建slave用户:

--创建slave用户

create USER 'test_slave'@'%';

--设置密码

ALTER USER 'test_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

--授予复制权限

GRANT REPLICATION SLAVE ON *.* TO 'test_slave'@'%';

--刷新权限

FLUSH PRIVILEGES;

step5:主机中查询master状态:

执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

SHOW MASTER STATUS

记下File和Position的值。执行完此步骤后不要再操作主服务器MYSL,防止主服务器状态值变化,

注意如果执行上述命令出现问题很有可能是因为mysql版本问题,可以换一个版本试试(我已经踩过坑了)

1.2、准备从服务器

可以配置堕胎从机slave1、slave2...,这里以配置slave1为例

step1:在docker中创建并启动MySQL从服务器:端口3307

docker run -d \-p 3307:3306 \-v /test/mysql/slave1/conf:/etc/mysql/conf.d \-v /test/mysql/slave2/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 \--name test-mysql-slave1 \mysql:8.0.35

step2:创建MySQL从服务器配置文件:

vim /test/mysql/slave1/conf/my.cnf

配置如下内容:

[mysqld]

#服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id

server-id=2

#中继日志名,默认xxxxxxxxxxxxx-relay-bin

#relay-log=relay-bin

重启MySQL容器

docker restart test-mysql-slave1

step3:使用命令行登录MySQL从服务器:

#进入容器:

#进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码

docker exec -it test-mysql-slave1 env LANG=C.UTF-8 /bin/bash

#进入容器内的mysql命令行

mysql -uroot -p

#修改默认密码校验方式

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

step4:在从机上配置主从关系:

在从机上执行以下SQL操作

CHANGE MASTER TO MASTER_HOST='192.168.159.131',
MASTER_USER='test_slave',MASTER_PASSWORD='123456',MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=4252;

1.3、启动主从同步

启动从机的复制功能,执行SQL:可以只执行4,5两步

1、停止从服务器的I/O线程
STOP REPLICA IO_THREAD;
注意:mysql8.0+中,SLAVE关键字已经被废弃,应该使用REPLICA关键字。在mysql5.7及之前版本中,可以使用STOP SLAVE IO_THREAD;
2、等待I/O线程停止,可以通过检查从服务器的状态确认
SHOW SLAVE STATUS \G;
3、重新执行change master to语句来更新主服务器信息
change master to master_host='192.168.2.177',master_user='slave',master_password='123456',master_port=3306,master_log_file='binlog.000071',master_log_pos=1672;                        
4、启动从服务器的I/O线程,如果是mysql5.7及更早版本,使用START SLAVE IO_THREAD;
START REPLICA IO_THREAD;
5、检查从服务器的状态以确保复制正常运行
SHOW SLAVE STATUS \G;

1.4、实现主从同步

create database db_test;
use db_test;
create table t_test(id bigint auto_increment,uname varchar(30),primary key(id)
);insert into t_user(uname) values('lalal');
insert into t_user(uname) values('dwadaw');

1.5、停止和重置

需要的时候,可以使用如下SQL语句

#在从机上执行。功能:停止I/O线程和SQL线程的操作

stop slave;

#在从机上执行。功能:用于删除slave数据库的relaylog日志文件,并查询启动新的relaylog文件

reset slave;

#在主机上执行。功能:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。

#用于第一次搭建主从库时,进行主从binlog初始化工作;

reset master;

1.6、常见问题

问题一

启动主从同步后,常见错误是Slave_IO_Running:No或者Connecting的情况,吃屎查看下方的Last_IO_ERROR错误日志,根据日志中显示的错误信息在网上搜索解决方案即可

问题2

启动docker容器后提示WARNING:IPv4  forwarfing。。。。

这个错误虽然不影响主从同步的搭建,但是如果想从远程客户端通过以下方式连接docker中的MySQL则没法连接

解决方案:

#修改配置文件:

vim /usr/lib/sysctl.d/00-system.conf

#追加

net.ipv4.ip_forward=1

#接着重启网络

systemctl restart network

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

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

相关文章

Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)

0x01 产品简介 GutenKit 是一个WordPress的页面构建器,在 Gutenberg 设计您的下一个 WordPress 网站。借助 Gutenberg 的原生拖放界面、50+ WordPress 块、14+ 多功能模块和 500+ 模板,您可以在几分钟内创建专业、响应迅速的 Web 内容。 0x02 漏洞概述 Wordpress GutenKit…

【计网】理解TCP全连接队列与tcpdump抓包

希望是火,失望是烟, 生活就是一边点火,一边冒烟。 理解TCP全连接队列与tcpdump抓包 1 TCP 全连接队列1.1 重谈listen函数1.2 初步理解全连接队列1.3 深入理解全连接队列 2 tcpdump抓包 1 TCP 全连接队列 1.1 重谈listen函数 这里我们使用…

SQL Injection | MySQL 手工注入全流程

0x01:MySQL 手工注入 —— 理论篇 手工注入 MySQL 数据库,一般分为以下五个阶段,如下图所示: 第一阶段 - 判断注入点: 在本阶段中,我们需要判断注入点的数据类型(数字型、字符型、搜索型、XX 型…

【C++、数据结构】二叉排序树(二叉查找树、二叉搜索树)(图解+完整代码)

目录 [⚽1.什么是二叉排序树] [🏐2.构建二叉排序树] [🏀3.二叉排序树的查找操作] [🥎4.二叉排序树的删除] [🎱5.完整代码] ⚽1.什么是二叉排序树 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是…

Java避坑案例 - 消除代码重复_模板方法与工厂模式的最佳实践

文章目录 需求基础实体类BadVersion优化: 利用工厂模式 模板方法模式,消除 if…else 和重复代码优化一: 模板方法的应用AbstractCart 类(抽象类)各种购物车实现(继承抽象类)普通用户购物车 (No…

【JavaScript】Javascript基础Day02:运算符、分支、循环

Javascript——Day02 01. 赋值运算符02. 自增运算符03. 比较运算符04. 逻辑运算符以及优先级05. if单分支语句06. if双分支语句07. if多分支语句08. 三元运算符09. 数字补0案例10. switch分支语句11. 断点调试12. while循环13. 退出循环 01. 赋值运算符 02. 自增运算符 03. 比较…

【java】抽象类和接口(了解,进阶,到全部掌握)

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 大家好我们今天来学习Java面向对象的的抽象类和接口,我们大家庭已经来啦~ 一:抽象类 1.1:抽象类概念 在面向对象的概念中…

Python|基于Kimi大模型,实现上传文档并进行“多轮”对话(7)

前言 本文是该专栏的第7篇,后面会持续分享AI大模型干货知识,记得关注。 假设有这样的需求,需要你通过python基于kimi大模型,上传对应的文档并根据对应的prompt提示词,进行多轮对话。此外,还需要将kimi大模型生成的内容进行存储。具体场景,如下图所示: 也就是说,当我们…

这种V带的无极变速能用在新能源汽车上吧?

CVT的无极变速器的结构能用在电动汽车上吗?

【优选算法篇】在分割中追寻秩序:二分查找的智慧轨迹

文章目录 C 二分查找详解:基础题解与思维分析前言第一章:热身练习1.1 二分查找基本实现解题思路图解分析C代码实现易错点提示代码解读 1.2 在排序数组中查找元素的第一个和最后一个位置解题思路1.2.1 查找左边界算法步骤:图解分析C代码实现 1…

LeetCode94:二叉树的中序遍历

文章目录 😊1.题目😉2.解法1.递归2.迭代 😊1.题目 尝试一下该题 😉2.解法 1.递归 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* …

企业级 RAG 全链路优化关键技术

2024 云栖大会 - AI 搜索企业级 RAG 全链路优化关键技术 在2024云栖大会上,阿里云 AI 搜索研发负责人之一的邢少敏先生带领大家深入了解如何利用 RAG 技术优化决策支持、内容生成、智能推荐等多个核心业务场景,为企业数字化转型与智能化升级提供强有力的…

【Linux】了解pthread线程库,清楚并没有线程创建接口,明白Linux并不存在真正意义的线程(附带模型图详解析)

前言 大家好吖,欢迎来到 YY 滴Liunx系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

ECHO-GL:盈利电话驱动的异质图学习股票 走势预测

目录 简单概括1 背景知识相关的工作图学习在股票预测中的应用股票预测中的收益电话会议 方法异质股票图结构建造时间分配机制滑动窗机构库存空间关系模块异构边缘类型消息传递音频引导的注意聚合财报电话会议后股票动态模块预测和优化 实验消融研究 (for Q2)模拟交易 (for Q3) …

vue组件传值之$attrs

1.概述:$attrs用于实现当前组件的父组件,向当前组件的子组件通信(祖-》孙) 2.具体说明:$attrs是一个对象,包含所有父组件传入的标签属性。 注意:$attrs会自动排除props中声明的属性&#xff0…

【不要离开你的舒适圈】:猛兽才希望你落单,亲人总让你回家,4个维度全面构建舒适圈矩阵

单打独斗的英雄时代已经落幕 抱团取暖才是社会寒冬的良策 自然界中,每个物种都占据着自己的领地和生存空间。 生态位的差异决定了它们的生存方式,一旦离开领地,失去群体的庇护,就会沦为野兽的美餐。 人类社会同样存在隐形圈层…

【C++】踏上C++学习之旅(三):“我“ 与 “引用“ 的浪漫邂逅

文章目录 前言1. "引用"的概念1.1 "引用"的语法 2. "引用"的特性3. "引用"的使用场景3.1 "引用"做参数3. 2 "引用"做返回值3.2.1 "引用"做返回值时需要注意的点 4. 常引用5. "引用"在底层的实…

自动化数据处理:使用Selenium与Excel打造的数据爬取管道

随着互联网信息爆炸式增长,获取有效数据成为决策者的重要任务。人工爬取数据不仅耗时且效率低下,因此自动化数据处理成为一种高效解决方案。本文将介绍如何使用Selenium与Excel实现数据爬取与处理,结合代理IP技术构建一个可稳定运行的数据爬取…

RocketMQ快速开始

前置推荐阅读:RocketMQ简介-CSDN博客 本地部署 RocketMQ 这一节介绍如何快速部署一个单节点单副本 RocketMQ 服务,并完成简单的消息收发。 系统要求 64位操作系统,推荐 Linux/Unix/macOS64位 JDK 1.8 1.下载安装Apache RocketMQ​ RocketMQ…

aws 把vpc残留删除干净

最近忘了把vpc 删干净导致又被收了冤大头钱 在删除vpc 的收发现又eni在使用,但是忘了是哪个资源在占用 先用命令行把占用的资源找出来停掉 使用 AWS 命令行界面(CLI)来查看 VPC 的使用情况 列出子网: aws ec2 describe-subnets …