已存大量数据的mysql库实现主从各种报错----解决方案(看评论)

news2024/11/27 21:58:36

  • 背景
  • 何谓“先死后生”
  • 本文使用技术
  • 1、实施流程图
  • 2、实施
    • 2.1、数据库备份
    • 2.2、搭建Mysql的Master-Slave
      • 2.2.1、准备工作
      • 2.2.2、开始部署
      • 2.2.3、账号配置
      • 2.2.4、slave 同步配置
      • 2.2.5、验证
    • 2.3、Master做数据恢复
  • 结语

背景

计划对已有大量数据的mysql库的主从搭建,使用了常规先做数据同步,完成首次同步后,再进行主从配置,已失败告终;
过程出现了Error_code:1593、Error_code: 1062、Error_code:1033等主从start启动异常,有的code可以解决,有些code反复出现。耗费大量时间在研究解决问题;
于是思考,是不是方向错了,重新梳理流程,想出一个方案 “先死后生”,理论可以跳过这些问题的出现,觉得可行性很高,实施后,很快就成功了,方案与实施分享如下

何谓“先死后生”

备份后源数据库的数据,弄死源数据库,配置一个全新的主从,将备份的数据恢复到全新主上。

本文使用技术

mysql、docker
本文通篇是用例 docker 容器部署数据库,如果是主机部署数据库,学习思想即可,不需要看查实施过程。

1、实施流程图

在这里插入图片描述

2、实施

2.1、数据库备份

步骤一、进入mysql数据库容器
		在宿主机运行命令进行入mysql容器
		docker exec -it [容器id] /bin/bash

在这里插入图片描述

步骤二、备份数据库
		按数据库唯度备份,一个库备份一份sql
		mysqldump -u root -p dbname > dbname_backup.sql
		运行完成这条命令会提示输入root的密码

在这里插入图片描述

输入密码后,数据多的话,需要耐心待待,数据量大的情况生成备份sql文档是需要一些时间的

上图中生成的autoplat_backup.sql 这个数据库sql文档,如下图
在这里插入图片描述

步骤三、从容器中将sql文拷贝出来
退出容器,什么命令?   exit
docker ps 找到mysql容器
然后使用下面命令copy到当前目录下
docker cp [容器id]:/[sql文件路径] ./

在这里插入图片描述

有多个数据库就执行多次备份,方式多种多样,可以将多个sql起tar打包再docker cp出来也行
备份操作行告一段落

2.2、搭建Mysql的Master-Slave

2.2.1、准备工作

先准备三个文件
一个docker compose的mysql编排文件, 主从两个mysql的 my.cnf配置文件
如果不会docker compose的请先刷docker compose部署容器的文档:
【暂略】

1、编排文件mysql.yaml(主从都用这个部署)
version: '3'
services:
  mysql:
    restart: always
    image: mysql:5.7.38
    container_name: mysql-master   # master 、slave
    volumes:
      - /data/apps/mysql/mydir:/mydir
      - /data/apps/mysql/datadir:/var/lib/mysql
      - /data/apps/mysql/conf/my.cnf:/etc/my.cnf
      - /data/apps/mysql/source:/docker-entrypoint-initdb.d
    environment:
      - "MYSQL_ROOT_PASSWORD=qwer1234"
      - "MYSQL_DATABASE=testdb"
      - "TZ=Asia/Shanghai"
    ports:
      - 3306:3306
2、master my.cnf
#master节点的配置
[mysqld]
server-id=1    #设置服务id,需全局唯一  
log-bin=/var/lib/mysql/mysql-bin  #加入binlog配置,供从库读取  #binlog-do-db =test
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=performance_scheme
binlog-ignore-db=information_scheme
binlog_format=row
3、slave my.cnf
slave节点的配置
[mysqld]
server-id=2    #设置服务id,需全局唯一  
log-bin=/var/lib/mysql/mysql-bin  #加入binlog配置,供从库读取  #binlog-do-db =test
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=performance_scheme
binlog-ignore-db=information_scheme
binlog_format=row

2.2.2、开始部署

  • 1、配置my.cnf

    在主从上按照compose的my.cnf 目标创建一个目录

mkdir -p /data/apps/mysql/conf/
然后将my.cnf文档放到这个目录,注意主从对应放,别放反了
  • 2、运行容器

    在master服务器上将mysql_master.yaml(这个里面内容与slave的内容一样,只是yaml名称不一样)放到某个目录下,进入到这个目录,运行命令
    docker compose -f mysql_master.yaml up -d
    如下图,运行成功
    在这里插入图片描述
    在slave服务器上将mysql.yaml放到某个目录下,进入到这个目录,运行命令
    docker compose -f mysql.yaml up -d
    如下图,运行成功
    在这里插入图片描述

2.2.3、账号配置

master 创建同步账号
# 创建一个账号,%为任意ip能访问,可以指定ip,在%号添加IP即可,多IP,以逗号确认
create user 'slave'@'%' identified by "qwer1234";

#给所有库与表的所有权限
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%';

#配置成功
FLUSH PRIVILEGES;

在这里插入图片描述

2.2.4、slave 同步配置

slave配置同步账号
stop slave;

CHANGE MASTER TO MASTER_HOST = '172.17.0.2', MASTER_USER = 'slave', MASTER_PASSWORD = 'qwer1234', MASTER_PORT = 3306, MASTER_RETRY_COUNT = 0, MASTER_HEARTBEAT_PERIOD = 10000;

start slave;

2.2.5、验证

在master中建一个库一个表,检查slave中是否也同步有了这个表
在这里插入图片描述
在这里插入图片描述

2.3、Master做数据恢复

1、建恢复库
库名称需要与备份时的一样
响应2.1 步骤二的备份,需要在master上建一个autoplat库

在这里插入图片描述

2、导致备份sql文件
使用docker cp 将autoplat_backup.sql文件导致master mysql容器
docker cp autoplat_backup.sql [容器id]:/

在这里插入图片描述
进入到master的容器

docker exec -it [容器id] /bin/bash
#运行恢复命令,会弹出mysql root账号的密码确认,输入密码,回归
mysql -u root -p autoplat < autoplat_backup.sql
#恢复需要一会,数据越多,越久,需要耐心

在这里插入图片描述

3、进入到master检查 autoplat数据
可见数据已经恢复

在这里插入图片描述

4、进入slave机器看数据同步
可见已经同步

在这里插入图片描述

结语

过程很艰辛,但成功的喜悦让嘴解始终压不住

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

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

相关文章

数据结构 【双向哨兵位循环链表】

链表的结构分为8中&#xff0c;其实搞懂了单链表和双向哨兵位循环链表&#xff0c;这部分的知识也就掌握的差不多了。双向哨兵位循环链表的结构如下&#xff1a; 下面我从0构建一个双向哨兵位循环链表。 1、准备工作 构建节点结构体&#xff0c;双向循环链表的每一个…

高级AI记录笔记(五)

学习位置 B站位置&#xff1a;红豆丨泥 UE AI 教程原作者Youtube位置&#xff1a;https://youtu.be/-t3PbGRazKg?siRVoaBr4476k88gct素材自备 改良近战AI格挡行为 把近战AI的格挡行为从行为树中单独一个任务分块中给删除掉&#xff0c;因为我们希望敌人在受到伤害后立即进行…

彻底解决 macOS 下Matplotlib 中文显示乱码问题

彻底解决 macOS 下Matplotlib 中文显示乱码问题 在使用 Python 的 Matplotlib 库进行数据可视化时&#xff0c;中文字符的显示常常会出现乱码问题&#xff0c;尤其在 macOS 系统上。在网上找了一大堆方法&#xff0c;花了很久&#xff0c;发现不是要安装各种字体就是要改配置&…

11.25.2024刷华为OD

文章目录 HJ76 尼科彻斯定理&#xff08;观察题&#xff0c;不难&#xff09;HJ77 火车进站&#xff08;DFS&#xff09;HJ91 走格子方法&#xff0c;&#xff08;动态规划&#xff0c;递归&#xff0c;有代表性&#xff09;HJ93 数组分组&#xff08;递归&#xff09;语法知识…

突破性算法:让无人机集群在狭窄空间内穿针引线

导读 在建筑救援、森林搜索等任务中&#xff0c;无人机集群经常会遇到狭窄空间限制和动态障碍物变化等挑战。这些挑战会导致集群内部冲突&#xff0c;或在执行任务时因避让动态障碍物而导致系统混乱。实际应用场景和任务的严格特征往往使得全局搜索难以优化&#xff0c;而局部避…

Python中的简单爬虫

文章目录 一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务器和浏览器的通讯流程3. 浏览器访问Web服务器的通讯流程4. 加载图片资源代码 二. 基于Web请求的FastAPI通用配置1. 目前Web服务器存在问题2. 基于Web请求的FastAPI通用配置 三. Python爬虫介绍1. 什…

【Shell】运维快捷键及shell各种不同实际运维场景

一&#xff0c;控制台使用技巧 1&#xff0c;操作快捷键 Ctrlr :可以快速查找历史命令 Ctrll :可以清理控制台屏幕 Ctrla \ Ctrle :移动光标到命令行首\行尾 Ctrlw \ Ctrlk :删除光标之前\之后的内容 2&#xff0c;VIM文件编辑快捷键 快捷键ZZ :文件保存并退出 3&#xff…

SlickGrid复选框

分析 1、先在columns首列添加复选框&#xff1b; 2、在SlickGrid注册刚添加的复选框&#xff1b; 3、添加复选框变化事件&#xff1b; 4、注册按钮点击事件&#xff0c;点击获取已选中的行。 展示 代码 复选框样式&#xff08;CSS&#xff09; .slick-cell-checkboxsel {bac…

基于单片机的智慧小区人脸识别门禁系统

本设计基于单片机的智慧小区人脸识别门禁系统。由STM32F103C8T6单片机核心板、显示模块、摄像头模块、舵机模块、按键模块和电源模块组成。可以通过摄像头模块对进入人员人脸数据进行采集&#xff0c;识别成功后&#xff0c;舵机模块动作&#xff0c;模拟门禁打开&#xff0c;门…

【小白学机器学习33】 大数定律python的 pandas.Dataframe 和 pandas.Series基础内容

目录 0 总结 0.1pd.Dataframe有一个比较麻烦琐碎的地方&#xff0c;就是引号 和括号 0.2 pd.Dataframe关于括号的原则 0.3 分清楚几个数据类型和对应的方法的范围 0.4 几个数据结构的构造关系 list → np.array(list) → pd.Series(np.array)/pd.Dataframe 1 python 里…

Edge浏览器保留数据,无损降级退回老版本+禁止更新教程(适用于Chrome)

3 个月前阿虚就已经写文章告警过大家&#xff0c;Chromium 内核的浏览器将在 127 以上版本开始限制仍在使用 Manifest V2 规范的扩展&#xff1a;https://mp.weixin.qq.com/s/v1gINxg5vMh86kdOOmqc6A 像是 IDM、油猴脚本管理器、uBblock 等扩展都会受到影响&#xff0c;后续将无…

基于Spring Boot的装饰工程管理系统论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大&#xff0c;容错率低&#x…

路由器的工作原理

网络拓扑结构 主机A&#xff1a; IP地址&#xff1a;10.1.0.1/16 MAC地址&#xff1a;MACA 主机B&#xff1a; IP地址&#xff1a;10.2.0.1/16 MAC地址&#xff1a;MACB 网关G0/0/0&#xff1a; IP地址&#xff1a;10.1.0.2/16 MAC地址&#xff1a;MACC 网关G0/0/1&#…

【深度学习|特征增强模块】FFN(前馈神经网络)和E_FFN(增强型前馈神经网络)是transformer特征增强的重要组成部分!

【深度学习|特征增强模块】FFN&#xff08;前馈神经网络&#xff09;和E_FFN&#xff08;增强型前馈神经网络&#xff09;是transformer特征增强的重要组成部分&#xff01; 【深度学习|特征增强模块】FFN&#xff08;前馈神经网络&#xff09;和E_FFN&#xff08;增强型前馈神…

51单片机从入门到精通:理论与实践指南(一)

单片机在智能控制领域的应用已非常普遍&#xff0c;发展也很迅猛&#xff0c;学习和使用单片机的人员越来越多。虽然新型微控制器在不断推出&#xff0c;但51单片机价格低廉、易学易用、性能成熟&#xff0c;在家电和工业控制中有一定的应用&#xff0c;而且学好了51单片机&…

java写一个石头剪刀布小游戏

石头剪刀布是一款经典的手势游戏,通常由两人参与,玩法简单且充满趣味。玩家通过出示手势代表“石头”、“剪刀”或“布”,并根据规则比较手势决定胜负。它广泛用于休闲娱乐、决策或解压活动。 一、功能简介 用户与计算机对战。 用户输入选择:石头、剪刀或布。 计算机随机生…

MATLAB深度学习(六)——LSTM长短期神经网络原理与应用

LSTM的应用可以参见一个相当好的视频&#xff1a;小车倒立摆最优控制教程 - Part1 Simulink Simscape Multibody仿真建模_哔哩哔哩_bilibili 6.1 序列建模——循环神经网络 循环神经网络RNN是一类专门用于处理序列性数据x&#xff0c;&#xff0c;xn的神经网络结构&#xff0c…

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术&#xff0c;广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性&#xff0c;通过对当前数据的预测和实际值与预测值之间的差值进行编码&#xff0c;从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…

第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024)

重要信息 会议官网&#xff1a;itca2024.iaecst.org 会议时间&#xff1a;2024年12月06-08日 会议地点&#xff1a;中国-广州&#xff08;越秀国际会议中心&#xff09; 会议简介 第六届信息技术与计算机应用学术会议(ITCA 2024) 依旧作为第六届国际科技创新学术交流大会…

Leetcode 将有序数组转换为二叉搜索树

算法思想及代码解析&#xff1a; 这段代码的目的是将一个有序数组转换为 高度平衡的二叉搜索树&#xff08;Balanced Binary Search Tree, BST&#xff09;。以下是算法的详细解释&#xff1a; 1. 什么是高度平衡的二叉搜索树&#xff1f; 二叉搜索树&#xff1a;对于树中的每…