惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
Malwarebytes
Malwarebytes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
F
Future of Privacy Forum
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
A
Arctic Wolf
S
Securelist
K
Kaspersky official blog
S
Schneier on Security
T
ThreatConnect
T
Tenable Blog
Spread Privacy
Spread Privacy
T
True Tiger Recordings
AWS News Blog
AWS News Blog
F
Fox-IT International blog
量子位
T
Threatpost
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
U
Unit 42
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
小众软件
小众软件
A
About on SuperTechFans
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
美团技术团队
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog

博客园 - 华安

微信与支付支付功能开发 微信小程序中页面配置下拉刷新 unity中 相机没有视锥效果线框了,如何打开 JSONPath表达式 C# 中的操作JSON类 JObject cookie中的 HttpOnly 、Secure、SameSite 解释 Spring-boot 中基于 IP 的限流和自动封禁 Filter 登录 用 HMAC-SHA256 实现 TwoFA(二重验证)的坑 利用Spring Boot的 filter 结合ConcurrentHashMap 实现“同一IP每分钟最多允许300个404请求,超出后禁用30分钟访问” pixi-filters中的BackdropBlurFilter使用注意事项 PixiJS中的 SplitBitmapText.chars中的每个 BitmapText的x值分析 legend隐藏不想显示的图例 spring-boot HttpServletResponse response.sendRedirect是会跳转到 http而不是https springboot获取post请求参数 Javascript如何判断是触摸屏还是PC端 JavaScript获取鼠标点一个元素,获取鼠标点击的元素内的位置 spring-boot中配置Mongodbd的问题小结 Rest Template中添加 PATCH请求。 CSS实现修改CheckBox样式 SpringBoot+Thyemleaf报错:Error resolving template Template might not exist or might not be accessible div display flex 如何出现横向滚动条
MYSQL 备份数据库
华安 · 2026-05-25 · via 博客园 - 华安

核心设计说明

表格

功能实现方式兼容性
备份 mysqldump 命令行 所有 Windows
压缩 内嵌调用 PowerShell + .NET ZipFile 需 .NET 4.5+,失败自动保留 .sql
清理6个月前 forfiles /d -180 Windows XP+ 自带,无需额外软件
日志 echo >> 追加到文本文件 纯 BAT 命令

以下是完整代码,复制粘贴到记事本,另存为 backup.bat(编码选 ANSI):

@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion

:: ============================================
:: MySQL 自动备份脚本 (Windows BAT 版)
:: 功能:备份数据库 + 自动清理6个月前备份
:: ============================================

:: --- 配置区(根据你的环境修改这5项)---
set DB_HOST=localhost
set DB_PORT=3306
set DB_USER=your_username
set DB_PASSWORD=your_password
set DB_NAME=your_database

:: 备份目录(支持本地路径或网络共享 \\server\share)
set BACKUP_DIR=\\idmt-fileg\DB_BK\mysql_DataBAK
set LOG_FILE=%BACKUP_DIR%\backup.log
set RETENTION_DAYS=180

:: mysqldump 路径(根据实际安装路径修改)
set MYSQLDUMP="C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe"

:: --- 初始化 ---
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"

:: 获取时间戳(调用 PowerShell,兼容所有区域设置)
for /f "usebackq delims=" %%a in (`powershell -Command "Get-Date -Format yyyyMMdd_HHmmss"`) do set TIMESTAMP=%%a
for /f "usebackq delims=" %%a in (`powershell -Command "Get-Date -Format 'yyyy-MM-dd HH:mm:ss'"`) do set LOGTIME=%%a

set BACKUP_FILE=%BACKUP_DIR%\backup_%DB_NAME%_%TIMESTAMP%.sql
set ZIP_FILE=%BACKUP_FILE%.zip

:: --- 开始备份 ---
echo [%LOGTIME%] 开始备份数据库: %DB_NAME% >> "%LOG_FILE%"

:: 执行备份(通过环境变量传密码,避免进程列表暴露密码)
set "MYSQL_PWD=%DB_PASSWORD%"
%MYSQLDUMP% -h %DB_HOST% -P %DB_PORT% -u %DB_USER% --single-transaction --routines --triggers --events %DB_NAME% > "%BACKUP_FILE%"
set "MYSQL_PWD="

if %ERRORLEVEL% neq 0 (
    echo [%LOGTIME%] 备份失败!错误代码: %ERRORLEVEL% >> "%LOG_FILE%"
    if exist "%BACKUP_FILE%" del "%BACKUP_FILE%"
    exit /b 1
)

if not exist "%BACKUP_FILE%" (
    echo [%LOGTIME%] 备份文件未生成,请检查目录权限 >> "%LOG_FILE%"
    exit /b 1
)

:: --- 压缩(尝试打包成 zip,失败则保留 .sql)---
echo [%LOGTIME%] 正在压缩备份文件... >> "%LOG_FILE%"

set "PS_TEMP=%TEMP%\mysql_zip_%TIMESTAMP%.ps1"
(
    echo Add-Type -AssemblyName System.IO.Compression.FileSystem -ErrorAction Stop
    echo $temp = '%BACKUP_DIR%\temp_%TIMESTAMP%'
    echo New-Item -ItemType Directory -Path $temp -Force ^| Out-Null
    echo Copy-Item '%BACKUP_FILE%' "$temp\backup.sql" -Force
    echo if (Test-Path '%ZIP_FILE%') { Remove-Item '%ZIP_FILE%' -Force }
    echo [System.IO.Compression.ZipFile]::CreateFromDirectory($temp, '%ZIP_FILE%', [System.IO.Compression.CompressionLevel]::Optimal, $false)
    echo Remove-Item $temp -Recurse -Force
    echo Remove-Item '%BACKUP_FILE%' -Force
) > "%PS_TEMP%"

powershell -ExecutionPolicy Bypass -File "%PS_TEMP%" >nul 2>&1

if exist "%ZIP_FILE%" (
    echo [%LOGTIME%] 备份成功: %ZIP_FILE% >> "%LOG_FILE%"
) else (
    echo [%LOGTIME%] 备份成功: %BACKUP_FILE% (压缩失败,保留SQL文件) >> "%LOG_FILE%"
)

if exist "%PS_TEMP%" del "%PS_TEMP%"

:: --- 清理6个月前的备份(Windows自带 forfiles)---
echo [%LOGTIME%] 开始清理 %RETENTION_DAYS% 天前的备份... >> "%LOG_FILE%"

forfiles /p "%BACKUP_DIR%" /m "backup_%DB_NAME%_*.sql*" /d -%RETENTION_DAYS% /c "cmd /c del @path" >nul 2>&1

echo [%LOGTIME%] 清理完成 >> "%LOG_FILE%"
echo [%LOGTIME%] 本次任务结束 >> "%LOG_FILE%"
echo ---------------------------------------- >> "%LOG_FILE%"

endlocal

使用步骤

  1. 修改配置:打开 bat 文件,修改前5项(数据库账号、密码、库名、备份路径、mysqldump 路径)

  2. 保存编码:记事本 → 另存为 → 文件名 backup.bat → 编码选 ANSI

  3. 双击运行:直接双击 backup.bat 即可执行,黑窗口会自动关闭

  4. 查看结果:去备份目录看有没有生成 .zip.sql 文件,以及 backup.log 日志

设置定时自动执行

  1. Win + R,输入 taskschd.msc 回车

  2. 右侧点击 "创建基本任务"

  3. 名称:MySQL自动备份 → 触发器选 "每天" → 时间设 凌晨 2:00

  4. 操作选 "启动程序":

    • 程序或脚本:浏览选择你的 backup.bat 完整路径

  5. 重要:如果你的备份路径是网络共享(\\idmt-fileg\...),在"常规"选项卡里:

    • 勾选 "不管用户是否登录都要运行"

    • 点击 "更改用户或组",输入有权限访问该共享文件夹的域账号

    • 勾选 "使用最高权限运行"