Mysql使用周期性计划任务定时备份,发现备份的文件都是空的?为什么?如何解决?

在这里插入图片描述

👨‍🎓博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 前言 / 问题说明
  • 问题分析
    • 1、首先我们分析手动执行是否成功
    • 2、我们分析定时任务中的命令写的是否正确
    • 3、检查crontab中的执行环境
    • 4、发现问题,周期性计划任务中执行找不到mysqldump命令
  • 问题解决

前言 / 问题说明

最近在做数据库备份,使用的是脚本的方式备份多个库,手动执行脚本备份是没问题的,然后就使用了周期性计划任务开始定时备份;
但是有一天,我说看一下备份的数据,结果一看,定时任务备份的sql文件压缩包都是4k,解压出来的…sql都是大小都是0,里面更是没有数据都是空的,这是为什么呢?

问题分析

1、首先我们分析手动执行是否成功

首先我们分析手动执行是否成功,使用的脚本,那么我们就去存放脚本的路径下执行一下脚本看看备份的是否有数据;

# 先切换到存放脚本的目录下
[root@csdn data]# cd /usr/local/mysql/data/

# 执行备份脚本
[root@csdn data]# sh back.sh 
mysqldump: [Warning] Using a password on the command line interface can be insecure.

脚本执行完,我们去备份数据库文件的路径下看看大小;

# 切换到备份数据库文件的路径下
[root@csdn data]# cd backup/data/
# 查看大小
[root@csdn data]# du -sh *
4.0K	20231120.sql.tgz
4.0K	20231121.sql.tgz
4.0K	20231122.sql.tgz
4.0K	20231123.sql.tgz
4.0K	20231124.sql.tgz
4.0K	20231125.sql.tgz
4.0K	20231126.sql.tgz
236K	20231127.sql.tgz
# 最后一个就是刚刚手动执行备份的了;明显和前面的不一样;

然后我们解压下来看

# 解压备份的库的压缩包
[root@csdn data]# tar xf 20231127.sql.tgz 
# 查看大小
[root@csdn data]# du -sh *
4.0K	20231120.sql.tgz
4.0K	20231121.sql.tgz
4.0K	20231122.sql.tgz
4.0K	20231123.sql.tgz
4.0K	20231124.sql.tgz
4.0K	20231125.sql.tgz
4.0K	20231126.sql.tgz
680K	20231127.sql
236K	20231127.sql.tgz

可以看到解压下来是680K,我们可以进去看看,是有数据的;
那么就可以排除脚本的本身问题;

2、我们分析定时任务中的命令写的是否正确

执行定时任务一般里面需要写绝对路径;
我的定时任务是在/etc/crontab下写着,我们来看看;

cat /etc/crontab

在这里插入图片描述

可以看到写的是:0 0 */1 * * root /bin/sh /usr/local/mysql/data/back.sh,每天备份一次,而且都写的绝对路径;
我们把他这个绝对路径拿出来试试看看执行一下是否成功?

# 定时任务中的脚本执行命令
[root@csdn data]# /bin/sh /usr/local/mysql/data/back.sh
mysqldump: [Warning] Using a password on the command line interface can be insecure.

# 然后去备份数据库的存储路径看看
[root@csdn data]# cd /usr/local/mysql/data/backup/data/

# 查看文件大小
[root@csdn data]# du -sh *
4.0K	20231120.sql.tgz
4.0K	20231121.sql.tgz
4.0K	20231122.sql.tgz
4.0K	20231123.sql.tgz
4.0K	20231124.sql.tgz
4.0K	20231125.sql.tgz
4.0K	20231126.sql.tgz
236K	20231127.sql.tgz

可以看到是没问题的,如果刚刚备份过怕没有覆盖,可以自己删除,一般备份是会直接覆盖的,而且你解压下来的文件也会默认删除;
也是同样的方法,看着备份的压缩包的大小是没问题的,解压下来看看;

[root@csdn data]# tar xf 20231127.sql.tgz 
[root@csdn data]# du -sh *
4.0K	20231120.sql.tgz
4.0K	20231121.sql.tgz
4.0K	20231122.sql.tgz
4.0K	20231123.sql.tgz
4.0K	20231124.sql.tgz
4.0K	20231125.sql.tgz
4.0K	20231126.sql.tgz
680K	20231127.sql
236K	20231127.sql.tgz

也是680K,可以vim进入查看一下是否有数据;经过查看是有数据的;
那么也可以排除计划任务的命令是没有问题的;哪是为什么呢?

3、检查crontab中的执行环境

既然确定脚本没有问题,并且手动执行能够正确备份数据,那么问题可能出在 crontab 设置或执行环境上。以下是排查的一些步骤:

  • 1. 检查 crontab 语法:确保你的 crontab 语法是正确的。一个常见的错误是忘记指定正确的路径或环境变量。这个是没问题的;
  • 2. 查看 cron 日志:很多 Linux 发行版默认并不会为 cron 任务记录日志。但如果你的系统配置了 cron 日志,那么检查 /var/log/cron/var/log/syslog 中的相关条目可能会提供有用的信息。这个也是没问题的。
  • 3. 输出重定向:确保 cron 任务没有把输出(包括错误输出)重定向到 /dev/null 或其他看不到的地方。为了更好地调试,可以考虑将输出重定向到一个特定的日志文件。

例如:
将定时任务改为每分钟执行一次,方便查看,加一个追加日志到执行文件中,并且把错误、非错误信息都存放到这个文件中。

* * * * * root /bin/sh /usr/local/mysql/data/back.sh >> /usr/local/mysql/data/backup/logfile.log 2>&1

这样,就可以查看 logfile.log 来检查是否有任何错误或提示信息。

  • 4. 环境变量:cron 执行的环境与登录 shell 的环境可能不同。某些环境变量,如 PATH,可能在 cron 中并未设置,导致你的脚本中的某些命令无法找到。考虑在脚本开头定义重要的环境变量,或者在 crontab 文件中设置它们。

修改完crontab中的定时任务,让他将执行命令的输出 输出到指定文件中,每分钟执行一次,我们等待一分钟,去看一下指定的目录下的文件;

# 切换到指定目录
[root@csdn data]# cd /usr/local/mysql/data/backup/
# 查看输出的文件内容
[root@csdn backup]# cat logfile.log
/usr/local/mysql/data/back.sh: line 47: mysqldump: command not found
/usr/local/mysql/data/back.sh: line 47: mysqldump: command not found
/usr/local/mysql/data/back.sh: line 47: mysqldump: command not found
/usr/local/mysql/data/back.sh: line 47: mysqldump: command not found

可以看到都是找不到mysqldump命令,这就是第4种,环境变量的问题了;

4、发现问题,周期性计划任务中执行找不到mysqldump命令

如果在周期性计划任务执行时输出找不到 mysqldump 命令,那么很可能是因为 PATH 环境变量的问题。Cron 任务运行时的环境变量可能与你在终端中运行的环境变量不同,尤其是 PATH 变量。mysqldump 可能不在 cron 的 PATH 中,因此无法找到。

  • 解决方法:

①、 查看mysqldump绝对路径:可以通过运行 which mysqldump 在终端中找到它的完整路径。

[root@csdn backup]# which mysqldump
/usr/local/mysql/bin/mysqldump

可以看到是在/usr/local/mysql/bin/mysqldump,那么你可以在脚本中直接使用这个路径来调用它,而不是简单地使用 mysqldump

②、 在脚本中设置 PATH:在脚本的开头定义 PATH 环境变量,确保它包含 mysqldump 的路径。

例如:

#!/bin/bash

# 配置添加mysqldump环境变量
PATH=/usr/local/mysql/bin/:$PATH

配置完之后,等待一分钟,查看输出的日志信息;

[root@csdn backup]# tailf logfile.log 

在这里插入图片描述

可以看到已经没有报错了;这个是提示,说你使用了明文密码,不影响;

看着是备份没有什么问题了,我们可以去看备份的数据;

# 切换到备份数据的目录
[root@csdn backup]# cd /usr/local/mysql/data/backup/data/
# 查看大小
[root@csdn data]# du -sh *
4.0K	20231120.sql.tgz
4.0K	20231121.sql.tgz
4.0K	20231122.sql.tgz
4.0K	20231123.sql.tgz
4.0K	20231124.sql.tgz
4.0K	20231125.sql.tgz
4.0K	20231126.sql.tgz
236K	20231127.sql.tgz

可以看到大小也是没问题的,然后我们解压下来看看文件数据;

# 解压备份的数据压缩包
[root@csdn data]# tar xf 20231127.sql.tgz 
# 查看大小
[root@csdn data]# du -sh *
4.0K	20231120.sql.tgz
4.0K	20231121.sql.tgz
4.0K	20231122.sql.tgz
4.0K	20231123.sql.tgz
4.0K	20231124.sql.tgz
4.0K	20231125.sql.tgz
4.0K	20231126.sql.tgz
308K	20231127.sql
236K	20231127.sql.tgz

# 查看数据
[root@csdn data]# vim 20231127.sql

都是有数据的,那么问题就解决了;
周期性计划任务中的输出日志,如果想删除就可以删除,不想删除也不影响,但是会占空间,也不大。

问题解决

推荐一个mysql定时备份的脚本:mysql数据库定时备份脚本+定时删除

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring 中存储 Bean 的相关注解

Bean的存 IoC控制反转,就是将对象的控制权交给Spring的IOC容器,由IOC容器创建及管理对象。 也就是bean的存储 类注解:五大注解 Controller(控制器存储) Service(服务存储) Component(组件存储…

介绍比特币上的 sCrypt 开发平台

最强大的基础设施和工具套件,可轻松构建和扩展您的 dApp 杀手级应用在哪里? 尽管比特币在小额支付、国际汇款和供应链管理等广泛用例中具有颠覆性潜力,但在推出 14 年后,我们还没有看到一款非常受欢迎并被主流采用的杀手级应用。 …

C++基础 -4- C/C++混合编程

引用格式(图片代码段呈现) extern "C" {#include "string.h" }代码验证 (分别使用了C/C 的标准输出) #include "iostream"using namespace std;extern "C" { #include "stdio.h" #include "…

前端学习系列之html

目录 初识html 发展史 优势 W3C 标准 地址 格式 网页基本标签 标题标签 段落标签 换行标签 水平线标签 字体样式 注释和特殊符号 特殊符号 图像、超链接 图像 常见图像格式 格式 超链接 格式 重要属性 href:规定链接指向的页面的 URL target…

【GO】k8s 管理系统项目16[前端部分--项目初始化]-学习记录

学习链接 https://blog.csdn.net/qq_29974229/article/details/129119279?spm1001.2014.3001.5502 nvm use v16.15.0 npm install vue -g npm install -g vue/clivue create k8s-plantform-fe选择 Default cd k8s-plantform-fe npm run servecd ./src mkdir views mkdir r…

华北高温背后的隐忧,双碳最大的障碍之一藏在这里

高温天气带来的庞大用电负荷,再一次让人们想到能源紧张问题和节能减碳的必要性。 然而,在日常企业经营中,由于员工缺乏对公共财产的成本意识,往往造成电力资源的巨大浪费。节能减碳,必须与精细化管理相结合&#xff0c…

《opencv实用探索·三》opencv Mat与数组互转

1、利用Mat来存储数据&#xff0c;避免使用数组等操作 //创建一个两行一列的矩阵cv::Mat mean (cv::Mat_<float>(2, 1) << 0.77, 0.33);std::cout() << mean << std::endl;float a mean.at<float>(0, 0); //0.77float b mean.at<float&…

Springboot日志-logback

logback-spring.xml的配置项 共有一个父标签、两种属性、三个节点: 一个父标签&#xff1a;configuration 两种属性&#xff1a;contextName和property 三个节点&#xff1a;appender、root、logger 日志级别 日志级别从低到高分为TRACE < DEBUG < INFO < WARN &…

RabbitMQ工作模式2 整合springboot 和MQ高级特性

RabbitMQ工作模式 1.路由模式 创建交换机 , 连接队列 (生产者) public class MyTestExDirect {Testpublic void bbb() throws IOException, TimeoutException {ConnectionFactory connectionFactory new ConnectionFactory();//连接mqconnectionFactory.setUsername("…

ZYNQ PL 中断请求

1 中断概念 中断学习 2 ZYNQ 中断框图 上图为 zynq 中断分布框图。可以看到部分 PL 到 PS 部分的中断&#xff0c;经过中断控制分配器&#xff08;ICD&#xff09;&#xff0c; 同时进入 CPU1 和 CPU0。查询下面表格&#xff0c;可以看到 PL 到 PS 部分一共有 20 个中断可以使…

qt国际化多语言

vs + qt 方法 一 (1)生成.pro文件 如果报错: cannot find any qt projects to export 则执行如下: 然后重新生成 pro文件。 (2)生成ts文件 (方法1)在项目文件(xxx.pro) 文件添加: TRANSLATIONS += en.ts zh_CN.ts 然后打开cmd命令,进入项目目录,执行 l…

C++中的new、operator new与placement new

new operator new operator是我们常用的new。 new 和 delete 是用来在 堆上申请和释放空间的 &#xff0c;是 C 定义的 关键字&#xff0c;和 sizeof 一样。 实际 new / delete 和 malloc / free 最大的区别是&#xff0c;前者对于 自定义类型 除了可以开辟空间&#xff0c;…

C语言基础篇5:指针(二)

接上篇&#xff1a;C语言基础篇5&#xff1a;指针(一) 4 指针作为函数参数 4.1 指针变量作为函数的参数 指针型变量可以作为函数的参数&#xff0c;使用指针作为函数的参数是将函数的参数声明为一个指针&#xff0c;前面提到当数组作为函数的实参时&#xff0c;值传递数组的地址…

其利天下技术总监冯建武受邀出席“2023年电子工程师大会”并作主题演讲

2023年11月23日&#xff0c;由华秋电子发烧友主办的“2023年电子工程师大会暨第三届社区年度颁奖活动”在深圳新一代产业园成功举行。本次年度颁奖活动邀请了高校教授、企业高管、行业专家、资深电子工程师等共300多人出席。聚焦“电机驱动技术”、“开源硬件”、“OpenHarmony…

C#学习-8课时

P10 输入输出程序编写 相同类型的可以直接相加&#xff1b; cwtabtabconsole.Writeline(); using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace C_8_1 { class Program { s…

【腾讯云云上实验室】用向量数据库—实践相亲社交应用

快速入口 &#x1f449;向量数据库_大模型知识库_向量数据存储_向量数据检索- 腾讯云 (tencent.com) 文章目录 前言1. 向量数据库概念及原理1.1 向量数据库概念1.2 向量数据库核心原理1.3 向量数据库优缺点1.4 向量数据库与传统数据库的区别 2. 腾讯云向量数据库的基本特性及优…

黑马程序员索引学习笔记

文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类 从索引字段特性 主键索引、唯一索引、常规索引、全文索引…

RNN 网络结构及训练过程简介

本文通过整理李宏毅老师的机器学习教程的内容&#xff0c;简要介绍 RNN&#xff08;recurrent neural network&#xff09;的网络结构及训练过程。 RNN 网络结构, 李宏毅 RNN RNN 的特点在于存储功能&#xff0c;即可以记忆前面时刻的信息。 最简单的 RNN 结构如下&#xf…

切换服务器上自己用户目录下的 conda 环境和一个外部的 Conda 环境

如果我们有自己的 Miniconda 安装和一个外部的 Conda 环境&#xff08;比如一个全局安装的 Anaconda&#xff09;&#xff0c;我们可以通过修改 shell 环境来切换使用它们。这通常涉及到更改 PATH 环境变量&#xff0c;以便指向你想要使用的 Conda 安装的可执行文件&#xff1a…

CSS新手入门笔记整理:CSS基本选择器

id属性 id属性具有唯一性&#xff0c;也就是说&#xff0c;在一个页面中相同的id只能出现一次。在不同的页面中&#xff0c;可以出现两个id相同的元素。 语法 <div id"text"> ...... </div> class属性 class&#xff0c;顾名思义&#xff0c;就是“类…