[MySQL]-主从同步实战

news2024/11/25 14:25:02

[MySQL]-主从同步实战

森格 | 2022年12月14日

本文主要为在平时work中遇到的主从同步上的问题的处理,对其进行巩固总结。


一、场景介绍

​ 在一个风和日丽的下午4点半,突然就收到一个主从同步失败的提示,三两下打开从库一看,好嘛成这样了:

# 从库上查看同步状态
mysql>show slave status\G;

报错内容如下:

Slave_IO_Running: Yes
Last_IO_Error:Got fatal error 1236 from master when reading data from binary log:'could not find next log;the first event 'mysql-bin.xxx' at xxx,the last event read from from './mysql-bin.xxx' at xxx,the last byte read from './mysql-bin.xx' at xxx'

这一大串报错,给我好一顿看,简单来说就是不能从主库的binlog读取数据了。

赶紧去主库的实例一看,好嘛,哪个给我binlog重置了啊,看着这mysql-bin.000001,内心拔凉。

转念一问周围队友,原配置主库的binlog过期时间为7天,正碰巧开发在灌入数据,主库的磁盘空间不够了。

那也没有办法,那就把主从同步再搭起来呗,准备准备,搞起。

当前的主从同步的主库的配置如下(从库除 server_id 之外均相同):

# GTID 主从 Config
server_id = 3306  # 主从库的该ID一定要不一样
gtid_mode = on
enforce-gtid-consistency = true
master_info_repository = table
relay-log-info-repository = table

# bin-log Config
binlog-format = row  # 选择row格式
expire_logs_days = 3 #开启全局事务ID
binlog_rows_query_log_events = 1 # 记录event的同时,也记录原始SQL语句
binlog_cache_size = 4M
max_binlog_size = 512M
max_binlog_cache_size = 1G
relay-log-info-repository = table
relay-log-recovery = 1

二、搭建主从

经过上面队友的一顿binlog重置操作,我们终于来到了本文的重头戏:主从同步的搭建。

2.1 创建账号

我们先来创建一个同步账号,待会设置slave的时候要用到。

# 在主库创建账号
mysql>create user 'sync'@'%' identified by 'Sync@123456';

# 授予账号监视的权限
mysql>grant replication slave on *.* to 'sync'@'%';

# 刷新权限
mysql>flush privileges;

到这里的话,我们的第一步算是完成了。

2.2 备份主库

注意:这里是在从库的实例进行的,防止影响主库的性能。

第二步就是把主库做下备份,当前,如果主库内容过大,可能导致前台进程跑的时间过长被断掉,这里使用 shell脚本 + nohup 后台执行。

shell 脚本如下:

#!bin/bash
source ~/.bash_profile
mysqldump -uusername -p'password' -P3306 -h masterHost --single-transaction --skip-lock-tables --default-set=utf8mb4 --master-data=2 -A > ./dump_master.sql 

参数说明:

  • –master-data=2:CHANGE MASTER语句会被写成SQL注释。

  • –single-transaction:在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态(仅仅适用于 Innodb存储引擎)。

Creates a consistent snapshot by dumping all tables in a single transaction. Works ONLY for tables stored in storage engines which support multiversioning (currently only InnoDB does)

  • –default-set:设置默认字符集为 utf8mb4。
  • –skip-lock-tables:一次性锁定当前库的所有表。

nohup后台执行:

# 防止终端关闭,进行结束,在这里使用后台进行执行
hostname>nohup sh dump_matser.sh &

# 查看进程
hostname>ps -ef | grep dump_master.sh

检查dump文件

hostname>tail -n10 ./dump_master.sql

有如下信息,就说明dump过程顺利结束(根据数据库大小,机器配置,速度可能会有差异)。

在这里插入图片描述

2.3 备份还原

这一步就比较简单了,同样还是用 shell脚本 + nohup 后台执行。

shell 脚本如下:

#!bin/bash
source ~/.bash_profile
mysql -uusername -p'password' -P3306 -h slaveHost < ./dump_master.sql

nohup后台执行:

# 防止终端关闭,进行结束,在这里使用后台进行执行
hostname>nohup sh dump_matser.sh &

# 查看进程
hostname>ps -ef | grep dump_master.sh

执行应该是会出现如下错误

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

这里要把从库的GTID重置为空一下,才可以继续进行

# 登录从库
mysql>reset master;

这样子就可以继续执行备份还原了。

2.4 配置主从

在这里又分为了两个章节,主要原因是因为博主当时是用的传统的基于LOG_FILE和LOG_POS来进行的,感觉就是很蹩脚,后面队友提示可以GTID来搞,不得不说,很爽,不用自己再去找点位和文件信息了。不过掌握两种方式是很有必要的,下面一起来看一下吧!

2.4.1 基于LOG_FILE LOG_POS

还记得我们上面设置的 --master-data=2 嘛,这里就要用到了。

# 文件太大打开很慢,这里用grep命令快速查看下
hostname>grep 'CHANGE MASTER TO' ./dump_master.sql

该信息在dump下来的sql的前面位置,给大家看一下:

在这里插入图片描述

下面就好说了

# 进入从库一顿操作
mysql>stop slave;

# 把上面的信息对应下面语句就可以了
mysql>CHANGE MASTER TO MASTER_HOST='host_master',MASTER_USER='sync',MASTER_PASSWORD='Sync@123456',master_port=3306,MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxx;

# go on 
mysql>start slave;
mysql>show slave master\G;

操作完就可以看到状态已经恢复正常了。

2.4.2 基于GTID

这里直接不需要我们再去查看LOG_FILE和LOG_POS,直接开搞:

# 进入从库一顿操作
mysql>stop slave;

# 执行下面语句
mysql>CHANGE MASTER TO MASTER_HOST='host_master',MASTER_USER='sync',MASTER_PASSWORD='Sync@123456',master_port=3306,master_auto_position=1;

# go on 
mysql>start slave;
mysql>show slave master\G;

到这里我们的主从就重新搭建好啦!可喜可贺啊!下次可得把binlog过期时间重新设置下了。

2.4.3 传统模式 VS GTID模式

  • 对应传统模式,需要找到正确的二进制日志文件和位置,否则就无法正确复制。
  • 对于GTID模式,自动根据GTID来定位对应的二进制日志文件和位置,更准确地说,是自动寻找从库缺失的GTID SET对应的二进制日志记录,极大地降低了这些任务的复杂度。

以上是对两者的一个基本理解。


三、总结

本文主要介绍了,当主从同步发生故障时,要去如何发现问题所在,如何去重新进行主从的搭建,本文是采用的手动恢复的一个方式,欢迎各位大佬给与建议。

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

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

相关文章

Stimulsoft Reports 2023.1.1 Crack 根据自身需求选择

Stimulsoft 专门从事 Microsoft .NET Framework 组件的开发。客户满意是公司的首要任务&#xff0c;因此它旨在生产顶级质量的软件。应用程序开发并不总是那么容易&#xff0c;但 Stimulsoft 尽最大努力帮助开发人员将当今市场上最先进的技术整合到他们的应用程序中 特征 Razor…

老照片修复怎么修?这三个方法可以让你实现修复操作

相信大家在家里翻看以前的照片时&#xff0c;会发现有部分照片颜色已经泛黄&#xff0c;内容也跟着变得有些模糊不清了&#xff0c;那当我们遇到这种情况的时候&#xff0c;应该怎么办呢&#xff1f;别担心&#xff0c;今天就来教大家几个实用的方法&#xff0c;让大家学会老照…

stm32 adc dma

ADC采集电压&#xff0c;使用DMA传输到内存 一&#xff0c;ADC设置 1,Mode。 这里我们使用ADC的独立模式。 2&#xff0c;时钟分频 ADCCLK由 PCLK2分频得到&#xff0c;最大时钟频率36M。ADC 时钟太快&#xff0c;采样可能不够准确&#xff0c;误差大。 3&#xff0c;采样分…

砥砺深耕,笃行致远向未来——中国社科院与美国杜兰金融管理硕士项目

想在一个领域里有所发展&#xff0c;相信深耕下去一定会有收获。工作中积累的实战经验或是在文章上看到的补给型知识大都属于碎片化的&#xff0c;系统的学习理论知识很重要&#xff0c;尤其对于金融行业&#xff0c;中国社科院与美国杜兰大学合办金融管理硕士项目的出现&#…

演讲实录|OpenMLDB 与阿里云 MaxCompute 生态集成

在 OpenMLDB 第 8 期 Meetup 中&#xff0c;OpenMLDB PMC 陈迪豪以出租车行车时间预测问题为例&#xff0c;使用 OpenMLDB 基于阿里云 MaxCompute 的 Serverless 服务搭建机器学习应用&#xff0c;从数据引入开始&#xff0c;实现了端到端的机器学习应用全流程构建。 云服务作…

软件工程---习题五

1.为每种类型的模块耦合举一个具体例子。   答&#xff1a;耦合式对一个软件结构内不同模块之间互联程度的度量。耦合强弱取决于接口的复杂度&#xff0c;进入或访问某一模块的点&#xff0c;以及通过接口的数据。一般模块之间的可能的连接方式有七种&#xff0c;构成耦合的七…

深入MVC模式和三层架构

MVC模式 MVC 是一种分层开发的模式&#xff0c;其中&#xff1a; M&#xff1a;Model&#xff0c;业务模型&#xff0c;处理业务 V&#xff1a;View&#xff0c;视图&#xff0c;界面展示 C&#xff1a;Controller&#xff0c;控制器&#xff0c;处理请求&#xff0c;调用模…

深度学习中的卷积操作

本文从信号处理中的互相关运算引入深度学习中的卷积。 然后介绍了不同的卷积类型&#xff0c;以及如何在pytorch中使用这些卷积层。 &#xff08;在看pytorch文档中的Conv1D/2D/3D的时候感到比较困惑&#xff0c;又很好奇深度学习中各种各样的卷积操作。于是结合整理几乎包含深…

Linux软硬链接与动静态库

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、创建软硬链接二、软硬链接①软链接②硬链接③硬链接的用处④软硬链接的区别三、库的作用①库与为什么用库②动静态库的加载过程四、动静…

大数据分析如何进行日志采集

最近经常和技术大牛在交流&#xff0c;每次的碰撞都会让我产生更多的想法。例如这次谈到的&#xff0c;某企业信息化用了二三十种的公有云服务、有二十多种业务系统的数据库使用了同一个物理库、云产品的稳定性是值得肯定的。今天我们就来谈一谈日志在数据库中的作用以及如何采…

[附源码]Python计算机毕业设计SSM基于java语言的在线电子书阅读系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于jsp+mysql+ssm小熊猫水果管理系统-计算机毕业设计

项目介绍 小熊猫水果管理系统是水果商业贸易中的一条非常重要的道路&#xff0c;可以把其从传统的实体模式中解放中来&#xff0c;网上购物可以为消费者提供巨大的便利。通过小熊猫水果管理系统这个平台&#xff0c;可以使用户足不出户就可以了解现今的流行趋势和丰富的水果信…

在中国程序员能不能干一辈子?

在中国程序员当然能干一辈子&#xff0c;因为35岁的程序员已经自动死亡&#xff0c;全网销声匿迹&#xff0c;查无此人了&#xff0c;这辈子已经玩完了&#xff08;雾 开个玩笑&#xff0c;就是看够了那些焦虑文学&#xff0c;我只想说&#xff1a; 程序员到35岁、45岁、55岁&…

【LeetCode】1697. 检查边长度限制的路径是否存在

题目描述 给你一个 n 个点组成的无向图边集 edgeList &#xff0c;其中 edgeList[i] [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边。请注意&#xff0c;两个点之间可能有 超过一条边 。 给你一个查询数组queries &#xff0c;其中 queries[j] [pj, qj, limi…

外部注意力机制与内部注意力机制

自注意力是注意力机制的一种特殊情况&#xff0c;其核心思想为通过计算特征内部元素之间的联系来获得大范围内的依赖关系。而在外部注意力中&#xff0c;key被拿到了网络外部&#xff0c;因此可以习得数据集的全局状况。 自注意力机制中&#xff0c;输入特征F被投射到query矩阵…

Qt扫盲-QAbstractSlider理论总结

QAbstractSlider理论总结1. 概述2. 常用属性3. 信号1. 概述 QAbstractSlider 其实就是 QScrollBar, QSlider and QDial 的父类&#xff0c;也就是抽象类定义了Slider这种控件的一些公共属性&#xff0c;其实就是一个抽象滚动条的主要属性。 就比如一个具体的滑动条&#xff0c…

服务器load高问题定位和优化

服务器开发系列 文章目录服务器开发系列前言一、原因分析与定位&#xff1f;总结前言 什么是Load&#xff1f;什么是Load Average?   Load 就是对计算机干活多少的度量&#xff08;WikiPedia&#xff1a;the system Load is a measure of the amount of work that a comput…

isaac gym(二)仿真setup(代码齐全)

目录 .1 Simulation Setup .2 Creating a Simulation 2.1 Simulation Parameters 2.1.1 Up Axis 2.2 Creating a Ground Plane .3 Loading Assets .4 Environments and Actors 4.1 env 4.2 actors 4.3 Test .5 Running the Simulation .6 Adding a Viewer ​编辑 .7 Th…

03_1排序算法:冒泡排序、选择排序、插入排序

开始系统学习算法啦&#xff01;为后面力扣和蓝桥杯的刷题做准备&#xff01;这个专栏将记录自己学习算法是的笔记&#xff0c;包括概念&#xff0c;算法运行过程&#xff0c;以及代码实现&#xff0c;希望能给大家带来帮助&#xff0c;感兴趣的小伙伴欢迎评论区留言或者私信博…

专访 | 刘乔升:开源是人类智力劳动最好的组织形式

OpenMLDB&#xff1a; 可以请你先自我介绍一下吗&#xff1f; 刘乔升&#xff1a; 我叫刘乔升&#xff0c;来自复旦大学&#xff0c;就读于软件工程专业&#xff0c;是 2022 开源之夏 OpenMLDB Go SDK 项目的贡献者。在参加本届开源之夏活动前&#xff0c;我就有参加过一些开源…