设置计划任务自动备份mysql

windows系统下

1.创建mysql自动备份脚本mysqlback.bat需将此脚本存放在mysql的bin文件夹下。确保此脚本执行成功了在进行第2步做计划任务。


@echo off
REM 定义备份目录backup_dir、备份的文件名filename
set "backup_dir=D:\mysqlback"
set "filename=mysqlback_%date:~0,4%%date:~5,2%%date:~8,2%.sql"
set "backup_path=%backup_dir%\%filename%"REM 检查目录是否存在,不存在则创建
if not exist "%backup_dir%" (echo 目录 %backup_dir% 不存在,正在创建...mkdir "%backup_dir%"if %errorlevel% equ 0 (echo 目录创建成功) else (echo 目录创建失败,请检查权限或路径是否正确pauseexit /b 1)
)REM 执行数据库备份,定义MySQL端口(根据实际情况修改端口号-P端口)
echo 开始备份数据库tuyou到 %backup_path%...
mysqldump -uzhanghu -pmima -P3307 --skip-lock-tables dbname > "%backup_path%"REM 检查备份是否成功
if %errorlevel% equ 0 (echo 数据库备份成功,文件保存至:%backup_path%
) else (echo 数据库备份失败,请检查MySQL连接信息或权限
)REM 延迟15秒后自动退出(/nobreak表示不响应按键中断)
echo 15秒后自动退出...
timeout /t 15 /nobreak >nul
exit /b 0

2.创建jiahuarenwu.bat计划任务,进行定时执行mysqlback.bat备份。(jiahuarenwu.bat需将此脚本放mysql的bin文件夹下。)

@echo off
:: 定义变量(请根据实际情况修改)
set "task_name=MySQL每周日备份任务"
set "script_path=C:\ProgramData\bin\backmysql.bat"  :: 备份脚本完整路径
set "working_dir=C:\ProgramData\MySQL57\bin"  :: 工作目录(起始于)
set "trigger_time=19:00"
set "user=Administrator"  :: 管理员用户名
set "start_date=2025/08/1"  :: 任务开始日期(格式必须为 yyyy/mm/dd,设置为今天或未来日期):: 检查备份脚本是否存在
if not exist "%script_path%" (echo 错误:未找到备份脚本 "%script_path%"timeout /t 10 /nobreak >nulexit /b 1
):: 第一步:创建基础计划任务(使用/sd指定正确的开始日期)
schtasks /create ^/tn "%task_name%" ^/tr "\"%script_path%\"" ^/sc weekly ^/d SUN ^/st %trigger_time% ^/ru "%user%" ^/sd "%start_date%" ^/f:: 第二步:通过PowerShell设置工作目录(起始于)
PowerShell -Command "$task = Get-ScheduledTask -TaskName '%task_name%'; $action = $task.Actions[0]; $action.WorkingDirectory = '%working_dir%'; Set-ScheduledTask -TaskName '%task_name%' -Action $action | Out-Null":: 检查任务是否创建成功
if %errorlevel% equ 0 (echo 计划任务创建成功!echo 任务名称:%task_name%echo 执行时间:每周日 %trigger_time%(从 %start_date% 开始)echo 执行脚本:%script_path%echo 工作目录:%working_dir%
) else (echo 计划任务创建失败!请确认:echo 1. 以管理员身份运行脚本echo 2. 开始日期格式为 yyyy/mm/dd(例如 %start_date%)echo 3. 用户名、脚本路径和工作目录正确
)timeout /t 15 /nobreak >nul

3.数据恢复创建huifu.bat文件,需将此脚本放mysql的bin文件夹下。

@echo off
REM 配置参数
set "mysql_host=192.168.3.5"
set "mysql_port=3306"
set "mysql_user=root"
set "mysql_pass=root"
set "db_name=dbname"
set "sql_file=D:\mysqlback\mysqlback_backup_20250801.sql"
set "mysql_path=C:\ProgramData\MySQL\bin\mysql.exe"REM 检查必要文件
if not exist "%mysql_path%" (echo 错误:未找到mysql程序!路径:%mysql_path%timeout /t 10 /nobreak >nulexit /b 1
)if not exist "%sql_file%" (echo 错误:未找到备份文件!路径:%sql_file%timeout /t 10 /nobreak >nulexit /b 1
)REM 关键:添加 --no-defaults 参数彻底忽略所有配置文件
echo 开始恢复 %sql_file% 到 %mysql_host% 的 %db_name% 数据库...
"%mysql_path%" --no-defaults -h%mysql_host% -P%mysql_port% -u%mysql_user% -p%mysql_pass% ^
--default-character-set=utf8mb4 %db_name% < "%sql_file%"REM 显示结果
if %errorlevel% equ 0 (echo 恢复成功!
) else (echo 恢复失败!请手动执行以下命令(已包含忽略配置参数):echo    "%mysql_path%" --no-defaults -h%mysql_host% -P%mysql_port% -u%mysql_user% -p%mysql_pass% --default-character-set=utf8mb4 %db_name% < "%sql_file%"
)REM 延迟15秒后自动退出(/nobreak表示不响应按键中断)
echo 15秒后自动退出...
timeout /t 15 /nobreak >nul
exit /b 0

linux系统下

1.创建mysql备份脚本mysql_backup.sh给权限chmod +x mysqlbacl.bat并执行测试是否成功,成功了在执行第2步。

#!/bin/bash# MySQL数据库备份脚本
# 每天22:00执行一次,备份tuyou库# 配置信息
BACKUP_DIR="/data/mysql_backup/dbback"               # 备份文件存放目录
LOG_FILE="/data/mysql_backup/log/mysql_backup.log"          # 日志文件路径
MYSQL_USER="root"                      # MySQL用户名
MYSQL_PASSWORD="root"                # MySQL密码
MYSQL_HOST="192.168.2.52"                        # MySQL主机
MYSQL_PORT="3306"                             # MySQL端口
DATABASE="dbname"                              # 需要备份的数据库名
RETENTION_HOURS=24                            # 备份保留小时数
RETENTION_DAYS=7                              # 备份保留天数
# 修改配置部分,添加 --ssl-mode=DISABLED
MYSQL_OPTS="--ssl-mode=DISABLED"# 创建必要的目录
mkdir -p "$BACKUP_DIR"
mkdir -p "$(dirname "$LOG_FILE")"# 日志函数
log() {local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $1"echo "$msg"echo "$msg" >> "$LOG_FILE"
}# 错误处理
handle_error() {local err="Error on line $1: $2"log "$err"[ -n "$MAIL_RECIPIENT" ] && echo "$err" | mail -s "MySQL Backup Failed" "$MAIL_RECIPIENT"exit 1
}trap 'handle_error $LINENO "$BASH_COMMAND"' ERR# 显示所有可用数据库(调试用)
log "可用数据库列表:"
mysql $MYSQL_OPTS -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \-e "SHOW DATABASES;" >> "$LOG_FILE" 2>&1# 验证数据库存在
log "验证数据库 '$DATABASE' 是否存在..."
mysql $MYSQL_OPTS -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \-e "USE $DATABASE ;" 2>/dev/null || handle_error $LINENO "数据库 '$DATABASE' 不存在或无法访问"# 开始备份
log "开始备份数据库 '$DATABASE'..."
BACKUP_FILE="$BACKUP_DIR/${DATABASE}_backup_$(date '+%Y%m%d_%H%M%S').sql.gz"
DUMP_ERROR_LOG="$BACKUP_DIR/dump_error_$(date '+%Y%m%d_%H%M%S').log"# 执行备份并捕获错误
log "执行mysqldump命令..."
mysqldump $MYSQL_OPTS -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \--single-transaction --quick --lock-tables=false "$DATABASE" 2> "$DUMP_ERROR_LOG" | gzip > "$BACKUP_FILE"# 检查命令状态和备份文件大小
if [ $? -ne 0 ] || [ ! -s "$BACKUP_FILE" ]; thenERROR_MSG="备份失败"[ -s "$DUMP_ERROR_LOG" ] && ERROR_MSG+=": $(cat "$DUMP_ERROR_LOG")"handle_error $LINENO "$ERROR_MSG"
fi# 清理和日志
log "备份成功: $BACKUP_FILE (大小: $(du -sh "$BACKUP_FILE" | awk '{print $1}'))"
#find "$BACKUP_DIR" -type f -name "${DATABASE}_backup_*.sql.gz" -mmin +$((RETENTION_HOURS * 60)) -exec rm -f {} \;
#log "清理完成,保留最近 $RETENTION_HOURS 小时的备份"
log "清理超过 $RETENTION_DAYS 天的旧备份..."
find "$BACKUP_DIR" -type f -name "${DATABASE}_backup_*.sql.gz" -mtime +$RETENTION_DAYS -exec rm -f {} \;

2.设置计划任务add_crontab.sh给权限chmod +x add_crontab.sh并执行测试是否成功。记得修改脚本中mysql的备份路径。

以下为cronta简单命令具体可百度查询。
手动编辑 Cron 任务,打开 Cron 表:crontab -e
删除对应的 Cron 条目:在打开的编辑器中,找到包含 $BACKUP_SCRIPT 路径的行(例如 0 22 * * * /path/to/mysql_backup.sh),删除该行后保存并退出。

验证修改:crontab -l确认列表中已不存在该任务。

#!/bin/bash# 备份脚本路径
BACKUP_SCRIPT="/data/mysql_backup/mysql_backup.sh"  # 需要修改为实际备份的脚本路径# 检查脚本是否存在
if [ ! -f "$BACKUP_SCRIPT" ]; thenecho "错误: 备份脚本 $BACKUP_SCRIPT 不存在!"exit 1
fi# 设置执行权限
chmod +x "$BACKUP_SCRIPT"# 添加Cron任务(每天22:00执行)分 时 日 月 星期(7=0 1=1 2=2...6=6)
CRON_ENTRY="0 22 * * * $BACKUP_SCRIPT"
#CRON_ENTRY="*/5 * * * * $BACKUP_SCRIPT"# 检查Cron任务是否已存在
if ! crontab -l | grep -q "$BACKUP_SCRIPT"; then# 添加新的Cron任务(crontab -l 2>/dev/null; echo "$CRON_ENTRY") | crontab -echo "已成功添加Cron任务: $CRON_ENTRY"
elseecho "Cron任务已存在,未做修改"
fi# 显示当前Cron任务列表
echo "当前Cron任务列表:"
crontab -l    

3.创建恢复库脚本restore_mysql.sh给权限chmod +x restore_mysql.sh测试。

脚本中记得修改自己的备份成功的sql文件,原备份文件已经压缩,需解压使用使用命令gunzip xxx.sql.gz即可得到解压的sql文件xxx.sql,新建db1库进行恢复测试使用。

#!/bin/bash# 配置参数
mysql_host="127.0.0.1"
mysql_port="3306"
mysql_user="root"
mysql_pass="root"
db_name="dbname1"
sql_file="/data/mysql_backup/dbpack/db_backup_20250818_153420.sql"  # mysql备份的目录
mysql_path="/usr/bin/mysql"  # Linux下mysql通常在/usr/bin目录# 检查必要文件
if [ ! -f "$mysql_path" ]; thenecho "错误:未找到mysql程序!路径:$mysql_path"sleep 10exit 1
fiif [ ! -f "$sql_file" ]; thenecho "错误:未找到备份文件!路径:$sql_file"sleep 10exit 1
fi# 服务器已关闭强制SSL,直接连接
echo "开始恢复 $sql_file 到 $mysql_host 的 $db_name 数据库..."
MYSQL_PWD="$mysql_pass" "$mysql_path" --no-defaults -h"$mysql_host" -P"$mysql_port" -u"$mysql_user" \
--default-character-set=utf8mb4 "$db_name" < "$sql_file"# 显示结果
if [ $? -eq 0 ]; thenecho "恢复成功!"
elseecho "恢复失败!请确认服务器已执行:SET GLOBAL require_secure_transport = OFF;"
fi# 延迟15秒后自动退出
echo "15秒后自动退出..."
sleep 15
exit 0

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

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

相关文章

飞机起落架轮轴深孔中间段电解扩孔内轮廓检测 - 激光频率梳 3D 轮廓检测

摘要&#xff1a;飞机起落架轮轴深孔中间段电解扩孔内轮廓检测存在精度要求高、结构复杂等挑战。本文针对电解扩孔特殊工艺特征&#xff0c;探讨激光频率梳 3D 轮廓检测技术的应用&#xff0c;分析其检测原理、技术优势及在轮轴深孔检测中的实践&#xff0c;为电解扩孔内轮廓高…

【软考中级网络工程师】知识点之入侵防御系统:筑牢网络安全防线

目录一、入侵防御系统基础概念1.1 定义与作用1.2 与其他安全设备的关系二、入侵防御系统工作原理剖析2.1 数据包捕获与预处理2.2 深度包检测&#xff08;DPI&#xff09;技术2.3 威胁特征匹配2.4 行为分析与机器学习辅助检测2.5 威胁处理与响应机制三、入侵防御系统功能全面解析…

Python爬虫实战:研究scrapfly-scrapers库,构建电商/新闻/社交媒体数据采集系统

1. 引言 1.1 研究背景与意义 在大数据与人工智能技术深度渗透各行业的背景下,数据已成为企业决策、学术研究、产品创新的核心驱动力。互联网作为全球最大的信息载体,蕴含海量结构化与非结构化数据(如电商商品信息、新闻资讯、社交媒体动态等),其价值挖掘依赖高效的数据采…

Python爬虫反爬检测失效问题的代理池轮换与请求头伪装实战方案

Python爬虫反爬检测失效问题的代理池轮换与请求头伪装实战方案 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;每一个特性都是…

【原理】C#构造函数可以标记为Static吗

【从UnityURP开始探索游戏渲染】专栏-直达 实例构造函数&#xff08;Instance Constructor&#xff09;不能标记为static但C#提供了一种特殊的‌ 静态构造函数&#xff08;Static Constructor&#xff09;专门用于初始化静态成员。下面依次介绍他们&#xff1a; 1. ‌实例构造…

数据结构--树(3)

数据结构基础&#xff08;13&#xff09; 文章目录数据结构基础&#xff08;13&#xff09;--树树的存储结构树的存储方式1&#xff1a;双亲表示法&#xff08;顺序存储&#xff09;树的存储方式2&#xff1a;孩子表示法树的存储方式3&#xff1a;孩子兄弟表示法树转二叉树森林…

sys.stdin读取键盘输入【持续更新~】

背景sys.stdin主要用来读取键盘的一行或者多行输入&#xff0c;读取后表达形式为字符串。下文主要探讨sys.stdin.readline()的使用&#xff0c;sys.stdin.read()参考&#xff1a;sys.stdin.readline()是逐行读取&#xff0c;通常会配合.strip()清除首尾的换行符/空格sys.stdin.…

近阈值技术引领者:STM32U3系列的能效与安全革新

引言 当电池供电设备已深度融入生活的每一个角落&#xff0c;功耗控制与续航能力俨然成为制约技术演进的核心瓶颈。在此背景下&#xff0c;超低功耗新系列STM32U3凭借前沿的近阈值设计理念&#xff0c;为受功耗瓶颈限制的设备提供了突破性解决方案&#xff0c;也为能耗管理开启…

Vue3 中的 provide 和 inject 详解:实现跨组件通信

一、provide 和 inject 概述在 Vue3 中&#xff0c;provide 和 inject 是一对用于实现跨层级组件通信的 API&#xff0c;它们解决了 props 需要逐层传递的繁琐问题。1.1 基本概念provide (提供)&#xff1a;在祖先组件中提供数据inject (注入)&#xff1a;在任意后代组件中注入…

Kafka 零拷贝(Zero-Copy)技术详解

文章目录1. 什么是零拷贝2. Kafka 如何实现零拷贝2.1 sendfile 系统调用2.2 mmap 内存映射3. 传统拷贝 vs 零拷贝3.1 传统文件传输流程3.2 零拷贝文件传输流程4. Kafka 零拷贝的具体实现4.1 消息消费时的零拷贝4.2 日志段文件的零拷贝5. 零拷贝带来的性能优势6. 零拷贝的适用场…

Vue 中 v-for 的使用及 Vue2 与 Vue3 的区别

v-for 基本用法v-for 是 Vue 中用于循环渲染列表的指令&#xff0c;基本语法如下&#xff1a;运行<!-- Vue2 和 Vue3 通用基本语法 --> <div v-for"(item, index) in items" :key"item.id">{{ index }} - {{ item.name }} </div>Vue2 和…

本地搭建dify+deepseek智能体

今天开始搭建智能体&#xff0c;学习一下&#xff0c;也是公司转型所需。(Windows下的docker安装给我差点干破防了&#xff0c;安装了一周docker才成功。我真就要放弃的时候&#xff0c;又意外成功了/(ㄒoㄒ)/~~)0、准备阶段 配置Windows10的基本配置。 按下键盘Windows键&…

网络常识-SSE对比Websocket

SSE&#xff08;Server-Sent Events&#xff09;和Websocket都是用于实现服务器与客户端实时通信的技术&#xff0c;但它们的设计理念、通信模式和适用场景有显著区别。以下从核心差异和适用场景两方面具体说明&#xff1a; 一、核心区别维度SSE&#xff08;Server-Sent Events…

lamp架构部署wordpress

CentOS 7主机&#xff1a;lamp.example.comIP&#xff1a;192.168.100.101、关闭防火墙与selinux# 关闭防火墙systemctl stop firewalldsystemctl disable firewalld# 关闭selinuxvim /etc/selinux/config # 或vim /etc/sysconfig/selinuxSELINUXdisabled:wq# 重启reboot 2、开…

DC6v-36V转3.2V1A恒流驱动芯片WT7017

DC6v-36V转3.2V1A恒流驱动芯片WT7017WT7017是一款于连续工作模式下的降压LED恒流转换器&#xff0c;可驱动单只或多只LED,内置高精度电流检测器&#xff0c;能通过外置电阻设定输出电流,开关式1A恒流芯片。软启动、高达1MHZ开关频率,开路保护,输入范围在6V-40VDC内都能稳定可靠…

js如何循环HTMLCollection

场景 当使用document.getElementsByClassName方法获取一个包含DOM节点的集合arr时&#xff0c;正常的forEach和map操作都会报一个arr.map is not a function的错误因为这里的arr并不是标准的 数组 (Array)&#xff0c;而是一个 HTMLCollection 解决 使用document.querySelector…

Dart 逆袭之路:Flutter 4.0 如何推动移动端开发变革?

本文深入探讨 Dart 语言在 Flutter 4.0 框架下如何推动移动端开发变革。开篇回顾 Dart 诞生背景与初期困境&#xff0c;阐述其在与 Flutter 结合后崭露头角。进而详细剖析 Flutter 4.0&#xff0c;从全新渲染引擎带来的性能飞跃、丰富实用新组件简化开发&#xff0c;到手势系统…

基于MATLAB的卷积神经网络手写数字识别

一、系统架构设计 #mermaid-svg-QQU8judlmQgHc2Lh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QQU8judlmQgHc2Lh .error-icon{fill:#552222;}#mermaid-svg-QQU8judlmQgHc2Lh .error-text{fill:#552222;stroke:#5…

从废弃到珍宝——旧物二手回收小程序系统的价值发现之旅

在我们的生活中&#xff0c;总有一些旧物因为各种原因而被遗弃在角落&#xff0c;它们或许不再新潮&#xff0c;或许不再实用&#xff0c;但它们却承载着我们的记忆和情感。旧物二手回收小程序系统的出现&#xff0c;让这些被遗忘的旧物重新焕发了生机&#xff0c;开启了一段从…

从0开始学习Java+AI知识点总结-16.web基础知识

一、SpringBoot Web 入门开发SpringBoot 简化了传统 Spring 应用的配置流程&#xff0c;通过 "约定大于配置" 的理念实现快速开发。以下是入门核心要点&#xff1a;1. 工程创建与依赖配置工程初始化&#xff1a;通过 Spring Initializr 创建工程&#xff0c;选择Spri…