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

推荐订阅源

有赞技术团队
有赞技术团队
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
C
Cisco Blogs
The Hacker News
The Hacker News
T
Threatpost
S
Schneier on Security
K
Kaspersky official blog
Spread Privacy
Spread Privacy
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
NISL@THU
NISL@THU
量子位
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
Security Latest
Security Latest
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
News and Events Feed by Topic
爱范儿
爱范儿
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
Project Zero
Project Zero
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
T
Tenable Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Vulnerabilities – Threatpost
Forbes - Security
Forbes - Security
博客园 - 三生石上(FineUI控件)
C
Cyber Attacks, Cyber Crime and Cyber Security
N
News and Events Feed by Topic
V
V2EX
Webroot Blog
Webroot Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
M
MIT News - Artificial intelligence
Scott Helme
Scott Helme
Simon Willison's Weblog
Simon Willison's Weblog
L
LangChain Blog
W
WeLiveSecurity
Cloudbric
Cloudbric

博客园 - 华安

Unity 相机:正交 (Orthographic) vs 透视 (Perspective) - 华安 unity中的button中的onclick控制面板中四个参数的意思分别是什么 - 华安 微信小程序开发中触发 onshow的几种特殊情况 SQL Server备份心得 微信与支付支付功能开发 微信小程序中页面配置下拉刷新 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\...),在"常规"选项卡里:

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

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

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