MySQL数据库迁移与备份实录

server/2024/9/20 5:47:30/ 标签: 数据库, mysql

这里写目录标题

    • 事情起因的概述
    • 查看磁盘空间使用情况
      • 为了进一步的明确宕机原因,查看MySQL日志信息进一步排查
    • 如何针对磁盘空间不足进行挂载区域的修改以及数据的迁移与备份
      • 分析与梳理
      • 如何修改MySQL数据卷的挂载位置
        • 停止MySQL服务
        • 备份 MySQL 配置文件
        • 迁移 MySQL 数据目录
          • 创建新目录
          • 迁移数据
          • 修改权限
        • 修改 MySQL 配置文件
          • 修改 `my.cnf` 文件
        • 更新 SELinux(如果启用)-------------这一步是可选的
        • 重新启动 MySQL 服务
        • 检查 MySQL 服务状态
        • 验证迁移结果
        • 删除旧的数据目录
      • 介绍一下使用`mysqldump` 进行备份
      • 传统的备份方式
      • 使用DataGrip使用脚本文件进行数据的恢复

事情起因的概述

由于公司系统服务进行升级,需要进行开发测试环境分离。对应绩效基线产品服务需要单独部署,但是很不幸的是,当我使用备份的SQL文件进行对开发数据库数据恢复时候出现了MySQL数据库直接挂掉了。

5f756c87eec471d1758d444ba9b1d2e8

image-20240919221113093

通过查看日志,发现MySQL服务进行多次启动失败并且进入了 “start-limit” 状态,结合AI大模型提供的分析思路存在以下几种可能性:

image-20240919221318258

经过分析之后,最有可能就是磁盘空间不足,导致4G左右SQL数据库挂载不上导致数据库宕机。

查看磁盘空间使用情况

df -h

通过查看磁盘空间的使用情况得知,需要进行修改MySQL的默认数据卷挂载位置,在本次的物理机资源中,默认的根路径资源已经全部使用完,需要将资源的挂载放在空间相对充裕的home路径之下。

image-20240919221607049

为了进一步的明确宕机原因,查看MySQL日志信息进一步排查

本次MySQL的日志存放位置是在 /var/log 目录之下,进一步查看具体的信息

image-20240919222521427

可以从下图中看出,由于挂载空间不足,已经无法支撑数据临时文件的写入导致最终MySQL服务的宕机。

image-20240919222703247

如何针对磁盘空间不足进行挂载区域的修改以及数据的迁移与备份

分析与梳理

首先经过前面的分析,已经得出是由于MySQL使用的数据卷挂载默认是在根目录下,根目录的空间不足导致本次服务的宕机,现在需要修改将数据卷挂载迁移到空间相对充裕的home路径下,以及完成对数据库中开发库的数据备份。

如何修改MySQL数据卷的挂载位置

这里有一点需要注意就是直接可以进行对MySQL默认的数据卷迁移到别的位置,因此可以不用对数据执行mysqldump 进行备份,等迁移卷介绍完再说说如何使用mysqldump 进行备份。

停止MySQL服务

这一步操作其实如果你的MySQL以及宕机了可以省略,因为以及停止了。。。

systemctl stop mysqld
备份 MySQL 配置文件
mkdir -p /home/mysql-backup
cp /etc/my.cnf /home/mysql-backup/my.cnf.bak

image-20240919223722961

迁移 MySQL 数据目录
创建新目录

/dev/mapper/centos-home 上创建一个新目录,专门用于存放 MySQL 数据。

mkdir -p /home/mysql-data
迁移数据

现有的 MySQL 数据目录(通常位于 /var/lib/mysql)迁移到新目录 /home/mysql-data

rsync -avz /var/lib/mysql/ /home/mysql-data/  #rsync 是一个可靠的文件传输工具,它会保留文件权限和时间戳,同时进行安全的复制。
修改权限

确保 MySQL 数据目录的权限和所有权正确:

chown -R mysql:mysql /home/mysql-data
chmod 750 /home/mysql-data
修改 MySQL 配置文件
修改 my.cnf 文件

编辑 MySQL 的配置文件 /etc/my.cnf,将 datadir 路径指向新目录 /home/mysql-data

[mysqld]
datadir=/home/mysql-data
socket=/home/mysql-data/mysql.sock

image-20240919224504661

image-20240919224519617

更新 SELinux(如果启用)-------------这一步是可选的

如果系统启用了 SELinux,可能需要更新文件上下文。使用以下命令让 SELinux 允许 MySQL 在新位置运行:

semanage fcontext -a -t mysqld_db_t "/home/mysql-data(/.*)?"
restorecon -Rv /home/mysql-data

如果没有 semanage 命令,安装它:

yum install policycoreutils-python
重新启动 MySQL 服务
systemctl start mysqld
检查 MySQL 服务状态
systemctl status mysqld

image-20240919224734735

验证迁移结果

使用命令,查看默认的数据库配置文件

grep socket /etc/my.cnf

image-20240919230301622

mysql -u root -p --socket=/home/mysql-data/mysql.sock -e "SHOW VARIABLES LIKE 'datadir';"
mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"

除了可以使用上述命令查看配置位置,也可以看看新建的数据库是不是在当前目录下,可以看到存在

image-20240919230353664

或者我们这里可以反推一下查看一下原先默认位置的数据卷信息是否有新建数据库信息,经过查看并没有新建的数据库信息

image-20240919230556767

或者我们也可以查看一下如何现在卷的挂载情况,可以明显的看到home路径的磁盘使用率上去了,根路径的磁盘使用率下来了

image-20240919230727327

删除旧的数据目录
rm -rf /var/lib/mysql

image-20240919230855506

mysqldump__169">介绍一下使用mysqldump 进行备份

传统的备份方式

由于公司规章制度的限制,不能使用破解版navicate进行数据库迁移,因此本次使用mysqldump进行数据的迁移与备份

全量备份的命令展示

mysqldump -u root --all-databases > /home/databases.sql

这里有一个需要注意的点是如果数据库的配置文件my.cnf。位置做过个性化修改,因此再备份时候需要进行个性化适配。如果数据库没有进行个性化配置,如果你想备份某个库信息直接使用下述命令示例即可:

mysqldump -u root xxxxx > /home/xxxxx.sql

由于110数据库进行个性化配置,所以上述命令执行就会出现:

image-20240919154913388

因此需要查看一下my.cnf配置文件的位置:

grep socket /etc/my.cnf

image-20240919154958602

使用下述命令进行备份SQL文件的生成:

mysqldump -u root -p --socket=/data/mysql/mysql.sock xxxx > /home/xxxx.sql# 这里需要注意一下的就是information_schema和performance_schema虽然是系统自带的只读库在四个自带库的其中两个,使用下面的命令备份得不到完成的库信息,只能使用别的命令进行备份得到结构信息,所以只需要备份自带的mysql、sys 这两个库信息就可以了
mysqldump -u root -p information_schema > /home/mysql-backup/information_schema.sqlmysqldump -u root -p mysql > /home/mysql-backup/mysql.sqlmysqldump -u root -p performance_schema > /home/mysql-backup/performance_schema.sqlmysqldump -u root -p sys > /home/mysql-backup/sys.sql

从下面的文件大小也能看出来information_schema和performance_schema 这两个是备份失败的

image-20240919231653132

使用这个命令之后会提示你输入数据库对应的密码(输入完密码之后会进行备份文件的生成,生成完成之后会得到下述图片中的脚本文件信息):

image-20240919231809227

使用DataGrip使用脚本文件进行数据的恢复

选择目标库之后使用对应下载好的SQL脚本进行数据的备份:

image-20240919231900123

可以在控制台中看到具体的备份进度和详细的日志信息

image-20240919155401432

等待备份文件执行完成就可以得到对应的备份开发数据库

但是使用上述方式生成的数据库备份信息不存在数据库的函数相关信息


http://www.ppmy.cn/server/119290.html

相关文章

基于springboot+vue图书管理系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,图书信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

基于剪切板的高速翻译工具

下载 关键代码 #include <curl/curl.h> std::wstring get_current_clipboard(HWND hwnd) {if (!OpenClipboard(hwnd)) {return L"";}HANDLE h = GetClipboardData(CF_UNICODETEXT);if (!h) {CloseClipboard();return L"";}wchar_t* data = (wchar_t…

【Python】练习:控制语句(二)第3关

第3关&#xff1a;函数基础实训 第一题&#xff08;※&#xff09;第二题第三题&#xff08;※&#xff09;第四题第五题 第一题&#xff08;※&#xff09; #第一题def sumInt(n):#请在下面编写代码# ********** Begin ********** #if type(n) is not int or n < 0:return …

C# 从字符串中分离文件路径、文件名及扩展名

C# 从字符串中分离文件路径、文件名及扩展名 对文件进行操作时&#xff0c;首先要获取文件路径信息&#xff0c;然后创建文件对象&#xff0c;通过IO流将数据读取大宋内存中并进行处理。在操作文件时&#xff0c;可能还需要提取文件的一些信息&#xff0c;比如&#xff0c;文件…

低代码平台中的数据源设计:构建高效应用的基础

什么是数据源&#xff1f; 在低代码开发平台中&#xff0c;数据源是指应用程序用来存储、检索和管理数据的地方。数据源可以是数据库、API、文件或其他数据存储解决方案。良好的数据源设计是构建高效、可扩展应用的基础。 数据源设计的关键原则 数据结构清晰&#xff1a;设计…

Spark实操学习

Spark学习 一、Spark-Shell编程1. 配置python3(三台服务器都要配置)2. 开始Spark编程3. spark-shell工具 二、Java项目测试1. 新建项目2. Spark-java代码测试 三、Scala项目测试1. 安装scala2. 安装包管理器sbt3. 在编译工具中安装scala工具4. 新建项目5. spark-scala代码测试 …

pg入门2—pg中的database和schema有什么区别

在 PostgreSQL&#xff08;简称 PG&#xff09;和 MySQL 中&#xff0c;Database 和 Schema 是两个不同层次的概念&#xff0c;而在 MySQL 中&#xff0c;Database 和 Schema 常常被混用。通过结合这两种数据库的设计&#xff0c;我们可以更清晰地理解它们之间的区别。 1. Pos…

Python世界:力扣29题两数相除算法实践

Python世界&#xff1a;力扣29题两数相除算法实践 任务背景实现思路模拟思路编码实现 本文小结 任务背景 本问题来自于力扣29题&#xff0c;在做完大数相乘后&#xff0c;顺带也看下两数相除。 给定两个整数&#xff0c;被除数dividend和除数divisor。将两数相除&#xff0c;要…

Unity3D 实现水体交互详解

前言 在Unity3D中实现水体交互是一个既有趣又富有挑战性的任务&#xff0c;它涉及到图形渲染、物理模拟以及用户交互等多个方面。下面&#xff0c;我将详细介绍如何在Unity中创建一个基本的水体交互系统&#xff0c;包括技术概览、步骤分解以及关键代码实现。 对惹&#xff0…

快速搭建最简单的前端项目vue+View UI Plus

1 引言 ‌‌Vue是一套用于构建Web前端界面的渐进式JavaScript框架。‌‌它以其易学易用、性能出色、灵活多变而深受开发者喜爱&#xff0c;并且与其他前端框架&#xff08;如‌React和‌Angular&#xff09;相比&#xff0c;在国内市场上受到了广泛的认可和使用。点击进入官方…

MATLAB算法实战应用案例精讲-【人工智能】数据血缘分析(二)(概念篇)

目录 几个相关概念 数据血缘与数据关系 数据血缘与数据分类 数据血缘与数据出处 数据血缘与知识图谱 数据库血缘 数据表血缘 数据字段血缘 算法原理 什么是数据血缘 数据血缘分析的价值: 元数据在数据血缘分析中的作用 血缘收集方法 数据血缘组成 2.1 数据节点…

Python办公自动化案例(四):将Excel数据批量保存到Word表格中

案例:将excel数据批量保存到Word表格中 要将Excel数据批量保存到Word表格中,可以使用Python的openpyxl库来读取Excel文件,以及python-docx库来创建和编辑Word文档。以下是一段示例代码,以及代码解释和一些注意事项。 准备好的Excel数据: 1.安装所需库 首先,确保你已经…

Linux 进程2

环境变量 再Linux操作系统中一切皆文件&#xff0c;这个环境变量自然也是一个文件&#xff0c;它的作用是辅助我们使用操作系统还可以辨识我们是什么用户(一般用户&#xff0c;root用户)。 env是读取完整环境变量的指令&#xff0c;里面记录了许多我登录操作系统所用的用户的信…

html+css网页设计 旅游网站首页1个页面

htmlcss网页设计 旅游网站首页1个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…

istio中如何使用serviceentry引入外部服务

假设需要引入一个外部服务&#xff0c;外部服务ip为10.10.102.90&#xff0c;端口为32033. 引入到istio中后&#xff0c;我想通过域名gindemo.test.ch:9090来访问这个服务。 serviceentry yaml内容如下&#xff1a; apiVersion: networking.istio.io/v1beta1 kind: ServiceEn…

硬件工程师笔试面试——电机

目录 18、电机 18.1 基础 电机原理图 电机实物图 18.1.1 概念 18.1.2 电机的一些基本分类和特点 18.2 相关问题 18.2.1 不同类型的电机在实际应用中有哪些具体的优势和劣势 18.2.2 在设计一个电机系统时,我应该如何考虑电机的选型和配置? 18.2.3 对于需要频繁启停的…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Dockge介绍2.1 Dockge简介2.2 Dockge功能…

Python——俄罗斯方块

俄罗斯方块游戏是一款经典的益智游戏&#xff0c;通常使用编程语言Python来实现。下面是一个简单的俄罗斯方块游戏的示例代码&#xff1a; import pygame import random# 定义颜色 BLACK (0, 0, 0) WHITE (255, 255, 255) RED (255, 0, 0) GREEN (0, 255, 0) BLUE (0, 0,…

python 实现eulers totient欧拉方程算法

eulers totient欧拉方程算法介绍 欧拉函数&#xff08;Euler’s Totient Function&#xff09;&#xff0c;通常表示为 &#x1d711;(&#x1d45b;)&#xff0c;是一个与正整数 &#x1d45b;相关的函数&#xff0c;它表示小于或等于 &#x1d45b;的正整数中与 &#x1d45…

HX711电子秤模块详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 hx711.h文件 hx711.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 HX711是一种高精度、低成本的压力传感器信号放大器&#xff0c;主要用于测量重力或压力变化。…