编写msyql8.0.21 数据库批量备份脚本

news/2025/9/25 17:23:46/文章来源:https://www.cnblogs.com/ios9/p/19111615

编写msyql8.0.21 数据库批量备份脚本

一:编写mysql数据库备份my.cnf文件


image


image


二、编写数据库导出脚本


image


image



czywxt_nacos.bat

@echo off
chcp 65001 > nul
title MySQL Backup for czywxt_nacos
setlocal disabledelayedexpansion:: 配置项(绝对路径)
set "MYSQL_BIN=H:\DataBaseSystem\mysql-8.0.21-winx64-s\bin"
set "DATABASE=czywxt_nacos"
set "BACKUP_DIR=G:\MySQLBackups"
set "PASSWORD_FILE=H:\DataBaseSystem\mysql-8.0.21-winx64-s\bin\my.cnf"
set "7ZIP_PATH=C:\Program Files\7-Zip\7z.exe"
set "CLEAN_PS_SCRIPT=H:\DataBaseSystem\mysql-8.0.21-winx64-s\DatabaseBackUpBat\CleanOldBackups.ps1":: 步骤1:检查MySQL连接
echo Checking MySQL server connection status...
"%MYSQL_BIN%\mysqladmin.exe" --defaults-file="%PASSWORD_FILE%" ping > nul 2>&1
if %errorlevel% neq 0 (echo Error: MySQL server is not running or connection failed.endlocalexit /b 1
)
echo MySQL server is connectable.:: 步骤2:生成时间戳(用PowerShell避免批处理语法冲突)
for /f "delims=" %%a in ('powershell -Command "(Get-Date).ToString('yyyy-MM-dd_HHmmss')"') do set "TIMESTAMP=%%a":: 步骤3:创建备份目录
if not exist "%BACKUP_DIR%" (mkdir "%BACKUP_DIR%"echo Backup directory created: %BACKUP_DIR%
) else (echo Using existing backup directory: %BACKUP_DIR%
):: 步骤4:执行备份
echo Starting backup for database: %DATABASE%
set "SQL_FILE=%BACKUP_DIR%\%DATABASE%_%TIMESTAMP%.sql"
"%MYSQL_BIN%\mysqldump.exe" --defaults-file="%PASSWORD_FILE%" --databases "%DATABASE%" --result-file="%SQL_FILE%"
if %errorlevel% neq 0 (echo Error: mysqldump failed.endlocalexit /b 1
)
echo SQL backup created: %SQL_FILE%:: 步骤5:压缩备份
set "ZIP_FILE=%BACKUP_DIR%\%DATABASE%_%TIMESTAMP%.zip"
:: 尝试PowerShell压缩
powershell Compress-Archive -Path "%SQL_FILE%" -DestinationPath "%ZIP_FILE%" -Force 2> nul
if %errorlevel% equ 0 (echo Compressed via PowerShell: %ZIP_FILE%del "%SQL_FILE%"echo Deleted original SQL file: %SQL_FILE%
) else (:: 尝试7-Zipif exist "%7ZIP_PATH%" ("%7ZIP_PATH%" a -tzip "%ZIP_FILE%" "%SQL_FILE%" -y > nulif %errorlevel% equ 0 (echo Compressed via 7-Zip: %ZIP_FILE%del "%SQL_FILE%"echo Deleted original SQL file: %SQL_FILE%) else (echo Warning: Compression failed. SQL file retained.goto CLEANUP)) else (echo Warning: 7-Zip not found. SQL file retained.goto CLEANUP)
):: 步骤6:清理旧备份
:CLEANUP
echo Cleaning up backup files older than 10 days...
powershell -ExecutionPolicy Bypass -File "H:\DataBaseSystem\mysql-8.0.21-winx64-s\DatabaseBackUpBat\CleanOldBackups.ps1" "G:\MySQLBackups" "czywxt_nacos":: 步骤7:完成提示(删除pause,自动退出)
echo --------------------------------------------------
if exist "%ZIP_FILE%" (echo Backup completed successfully.echo Current backup: %ZIP_FILE%
) else (echo Backup completed with warnings.echo SQL file retained: %SQL_FILE%
)
echo Operation time: %TIMESTAMP%endlocal

CleanOldBackups.ps1

# 接收批处理传递的2个参数:1.备份目录 2.数据库名
param([string]$BackupDir,[string]$DbName
)# 清理10天前的指定数据库ZIP备份
$oldDate = (Get-Date).AddDays(-10)
Get-ChildItem -Path $BackupDir -Filter "$DbName_*.zip" -File | Where-Object { $_.CreationTime -lt $oldDate } | ForEach-Object {Remove-Item $_ -ForceWrite-Host "Deleted old backup: $($_.FullName)"
}


Main_backUp.bat

@echo off
:: 设置控制台为UTF-8编码,避免中文乱码
:: Set console to UTF-8 encoding to avoid garbled characters
chcp 65001 > nul
:: echo 开始批量执行数据库备份脚本...
echo Starting batch execution of database backup scripts...:: 定义待执行脚本所在的子文件夹(相对路径)
:: Define the subfolder where the scripts to be executed are stored (relative path)
set "TARGET_FOLDER=newBak":: 遍历子文件夹中的所有 .bat 文件
:: Traverse all .bat files in the subfolder
for %%f in ("%TARGET_FOLDER%\*.bat") do (
::  echo 正在执行脚本:%%fecho Executing script: %%f:: Call the sub-script (wait for it to complete before executing the next one):: 调用子脚本(等待其执行完毕后再执行下一个)call "%%f":: echo 脚本 %%f 执行完毕,等待 5 秒继续下一个...echo Script %%f execution completed, waiting 5 seconds for the next one...:: Pause for 5 seconds to reduce server/database load:: 暂停5秒,减轻服务器/数据库压力timeout /t 5 /nobreak > nul
):: echo 所有备份脚本执行完毕!
echo All backup scripts have been executed!


三、用java diam批量生成数据库bat脚本

image

package Test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
/*** 编写mysql 数据库 备份的bat脚本*/
public class GenerateBatFiles {public static void main(String[] args) {// ==================== 1. 配置路径与参数 ====================String templateFilePath = "H:\\DataBaseSystem\\mysql-8.0.21-winx64-s\\DatabaseBackUpBat\\czywxt_nacos.bat";String outputDirectory = "H:\\DataBaseSystem\\mysql-8.0.21-winx64-s\\DatabaseBackUpBat\\newBak";String originalDbName = "czywxt_nacos"; // 模板中要替换的`set DATABASE=`原始值String originalTitleDb = "czywxt_nacos"; // 模板中`title`里的原始数据库名// 固定备份目录(与模板中一致,无需修改)String fixedBackupDir = "G:\\MySQLBackups";// 固定PS清理脚本路径(与模板中一致,无需修改)String fixedCleanPsPath = "H:\\DataBaseSystem\\mysql-8.0.21-winx64-s\\DatabaseBackUpBat\\CleanOldBackups.ps1";// ==================== 2. 读取模板文件内容 ====================List<String> templateLines = new ArrayList<>();try (BufferedReader reader = Files.newBufferedReader(Paths.get(templateFilePath))) {String line;while ((line = reader.readLine()) != null) {templateLines.add(line);}} catch (IOException e) {System.err.println("Failed to read template file: " + e.getMessage());return;}// ==================== 3. 定义要遍历的数据库名列表 ====================List<String> databaseNames = new ArrayList<>();// 此处需完整复制 DatabaseListExample 中的数据库名列表 ↓↓↓
//         databaseNames.add("zoo");databaseNames.add("预算2007");// ==================== 4. 遍历数据库名,生成对应BAT文件 ====================for (String targetDbName : databaseNames) {Path outputFilePath = Paths.get(outputDirectory, targetDbName + ".bat");try (BufferedWriter writer = Files.newBufferedWriter(outputFilePath)) {for (String line : templateLines) {// ---- 替换逻辑1:处理title行,动态替换数据库名 ----if (line.trim().startsWith("title") && line.contains(originalTitleDb)) {line = "title MySQL Backup for " + targetDbName + "";}// ---- 替换逻辑2:处理set DATABASE行,动态替换数据库名 ----else if (line.trim().startsWith("set \"DATABASE=" + originalDbName + "\"")) {line = "set \"DATABASE=" + targetDbName + "\"";}// 替换3:清理步骤的PowerShell命令(替换最后一个数据库名参数)else if (line.trim().startsWith("powershell -ExecutionPolicy Bypass -File")&& line.contains(fixedCleanPsPath)&& line.contains(originalDbName)) {// 原命令格式:powershell -ExecutionPolicy Bypass -File "PS路径" "备份目录" "原数据库名"// 替换为:powershell -ExecutionPolicy Bypass -File "PS路径" "备份目录" "目标数据库名"line = String.format("powershell -ExecutionPolicy Bypass -File \"%s\" \"%s\" \"%s\"",fixedCleanPsPath,fixedBackupDir,targetDbName);}// (`chcp 65001` 会被自动保留,因为模板包含这一行,直接写入新文件)writer.write(line);writer.newLine();}System.out.println("Successfully generated: " + outputFilePath);} catch (IOException e) {System.err.println("Failed to generate file " + outputFilePath + ": " + e.getMessage());}}}
}
image



四、运行bat文件

image

数据备份情况

image



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

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

相关文章

完整教程:基础算法---【差分】

完整教程:基础算法---【差分】pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…

Android 源码中如何生成一个platform JKS 文件?

首先我们需要在源代码环境中将 build/target/product/security/ 文件夹 copy 到本地。 下边的操作需要在 ubuntu 或者 mac 下。重要安全提醒:platform 密钥是系统级私钥,拥有它就能签出系统权限应用。不要把它放到公…

后端面试八股(go 方向)

go 后端面试准备 一、Go语言相关 1、Go里有哪些数据结构是并发安全的?int类型是并发安全的吗?sync 包中的类型sync.Mutex 和 sync.RWMutex:互斥锁,通过加锁机制保证临界区安全 sync.WaitGroup:用于等待一组 gorou…

ArcGIS 不重叠且无缝的拓扑检查和修改

ArcGIS 不重叠且无缝的拓扑检查和修改创建拓扑: 新建数据库→新建dataset→导入要素 dataset右键新建topo 设置容差和规则 拓扑容差: 0.001 默认标准 0.00001 清查标准 注意:容差为分辨率两倍 拓扑规则: 1.不能重…

C++设计模式之创建型模式:工厂方法模式(Factory Method) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【铸网-2025】线下赛 web 详细题解

<?php show_source(index.php); class MGkk8 {public $a;public $b;public function rpl2(){echo(MGrp12;);$b = $this->b;if ($this->a == "RPG") {echo(ifyes;);($b->a)($b->b."&quo…

2025/9/25

A 用时:1h 预期:100pts 实际:100pts 发现有两种做法,可以直接模拟,递推,复杂度分别为 \(O(n^2)\),\(O(n^2\log n)\),而递推可以用 bitset 压一下。 考虑根号分治复杂度为 \(O(B \times n+\frac{n^2\times log …

唐山市政建设总公司网站重庆装修设计公司排名

181/2461/8938产品概述 R&S SMU200A信号发生器旨在满足现代通信系统研发及其生产中遇到的所有要求。R&S SMU200A矢量信号发生器不仅将多达两个独立的信号发生器组合在一个只有四个高度单位的机柜中&#xff0c;还提供无与伦比的RF和基带特性。 Rohde & Schwarz S…

为什么要建设档案网站个人网页设计思路流程内容

142873-41-4脂质过氧化抑制剂1 英文名称&#xff1a;Lipid peroxidation inhibitor 1 中文名称&#xff1a;脂质过氧化抑制剂 化学名称&#xff1a;2,4,6,7-四甲基-2-[(4-苯基哌啶-1-基)甲基]-3H-1-苯并呋喃-5-胺 CAS&#xff1a;142873-41-4 外观&#xff1a;固体粉末 分…

网站建设 云南如何布局网站

标题链接【RM2021 四川站第二期直播】步兵设计及弹道测试https://bbs.robomaster.com/forum.php?modviewthread&tid11504&extrapage%3D1%26filter%3Dtypeid%26orderby%3Ddateline【RM2021 黑龙江站第4期直播】步兵机械设计入门2https://bbs.robomaster.com/forum.php?…

读书笔记:揭开索引的两个常见误区

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

国标GB28181平台EasyGBS如何赋能路网数字化管理与应急指挥?

国标GB28181平台EasyGBS如何赋能路网数字化管理与应急指挥?随着智慧交通建设的深入,海量、异构的道路监控设备如何实现统一接入、低延迟调阅与智能分析成为关键挑战。本文探讨基于GB/T28181国家标准的EasyGBS视频平台…

完整教程:Spring Boot 核心注解分类与应用指南

完整教程:Spring Boot 核心注解分类与应用指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

分布式数据库迁移OceanBase——基于网易云音乐自研CDC服务的平滑迁移方案

分布式数据库迁移OceanBase——基于网易云音乐自研CDC服务的平滑迁移方案网易云音乐在大体量的业务数据背后,是何种技术方案在支撑?本文分享网易云音乐PB级分库分表架构向原生分布式数据库架构迁移的技术优化经验。编…

获取用户ip所在城市

整体流程图获取当前登录用户所在城市,是一个非常常见的需求,在很多业务场景中用到。 比如:导航的定位功能默认选择的城市,或者一些防盗系统中识别用户两次登录的城市不一样的会有报警提示。 下载geoip2数据库 geoi…

郑州市网站建设公司石河子规划建设局网站

文章目录 &#x1f4d6; 前言1. 认识URL && 引入http协议2. http协议格式2.1 宏观格式&#xff1a;2.2 实验演示&#xff1a; 3. http的方法3.1 GET方法&#xff1a;3.2 POST方法&#xff1a;3.3 GET vs POST&#xff1a; 4. HTTP的报头和状态码5. http的cookie5.1 htt…

电商外贸网站建设新网域名自助管理平台

ANSYS Fluent和COMSOL Multiphysics以及OpenFOAM这3款CFD软件哪个好&#xff1f;cfd软件中哪款最实用&#xff1f;cfd软件有哪些&#xff1f;今天就给大家带来这几款CFD软件对比分析&#xff0c;一起来看看吧。 ANSYS Fluent ANSYS Fluent 是一种流行的计算流体动力学 (CFD) …

【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践

【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

第13章 day14-15 Webpack逆向

Webpack逆向 Webpack是一个现代的静态模块打包工具,它主要用于前端开发中的模块化打包和构建。通过Webpack,开发者可以将多个模块(包括JavaScript、CSS、图片等)进行打包,生成优化后的静态资源文件,以供在浏览器…

Viper远程配置踩坑记录

尝试etcd做配置中心,就用了Viper。没想到踩了一堆坑,记录一下。 一开始的代码是这么写的,想着先监听再读取: func initViperRemote() {err := viper.AddRemoteProvider("etcd3","http://127.0.0.1:…