windows服務器下備份mysql數(shù)據(jù)庫的腳本分享
更新時間:2025年12月05日 14:41:50 作者:IT界Tony哥
這篇文章主要為大家詳細介紹了windows服務器下備份mysql數(shù)據(jù)庫的腳本,本文主要以5.7版本為例,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
根據(jù)MySQL 5.7版本,我為您提供專門優(yōu)化的備份腳本:
1. MySQL 5.7專用備份腳本
創(chuàng)建 mysql57_backup.bat:
@echo off
chcp 65001 >nul
cls
echo ============================================
echo MySQL 5.7 數(shù)據(jù)庫備份工具
echo Database: jfdzyl
echo ============================================
echo.
REM ============ 配置區(qū)域 ============
REM 1. MySQL 5.7 路徑(默認安裝路徑)
set "MYSQL_PATH=C:\Program Files\MySQL\MySQL Server 5.7\bin"
if not exist "%MYSQL_PATH%\mysqldump.exe" (
echo [錯誤] 未找到 MySQL 5.7
echo 請修改 MYSQL_PATH 為正確的安裝路徑
pause
exit /b 1
)
REM 2. 數(shù)據(jù)庫連接信息
set DB_HOST=localhost
set DB_PORT=3306
set DB_USER=root
set DB_PASS=mysql
set DB_NAME=xxxx
REM 3. 備份設置
set BACKUP_ROOT="D:\MySQL_Backups\MySQL5.7"
set KEEP_DAYS=7 REM 保留最近7天備份
set MAX_BACKUPS=20 REM 最大保留備份文件數(shù)
set COMPRESS=true REM 是否啟用壓縮
echo [信息] MySQL 5.7 路徑: %MYSQL_PATH%
echo [信息] 數(shù)據(jù)庫: %DB_NAME%@%DB_HOST%:%DB_PORT%
REM ============ 創(chuàng)建備份目錄 ============
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (
set YEAR=%%c
set MONTH=%%a
set DAY=%%b
)
REM 處理日期格式(如果日期是yyyy/MM/dd格式)
if "%YEAR:~0,2%"=="20" (
set DATE_STRING=%YEAR%%MONTH%%DAY%
) else (
set DATE_STRING=%DAY%%MONTH%%YEAR%
set YEAR=%DATE_STRING:~4,4%
set MONTH=%DATE_STRING:~2,2%
set DAY=%DATE_STRING:~0,2%
)
set TIMESTAMP=%TIME: =0%
set TIMESTAMP=%TIMESTAMP::=-%
set BACKUP_DIR=%BACKUP_ROOT%%YEAR%-%MONTH%-%DAY%
set LOG_FILE=%BACKUP_DIR%%DB_NAME%_backup.log
if not exist %BACKUP_ROOT% (
mkdir %BACKUP_ROOT%
echo [信息] 創(chuàng)建備份根目錄: %BACKUP_ROOT%
)
if not exist "%BACKUP_DIR%" (
mkdir "%BACKUP_DIR%"
echo [信息] 創(chuàng)建備份目錄: %BACKUP_DIR%
)
echo ============================================
echo 開始備份時間: %DATE% %TIME%
echo 備份目錄: %BACKUP_DIR%
echo ============================================
echo.
REM ============ 執(zhí)行備份 ============
set BACKUP_FILE=%DB_NAME%_%DATE_STRING%_%TIMESTAMP%.sql
set BACKUP_FILE_FULL=%BACKUP_DIR%%BACKUP_FILE%
echo [步驟1] 檢查MySQL連接...
cd /d "%MYSQL_PATH%"
mysql.exe -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PASS% -e "SELECT 1" >nul 2>&1
if errorlevel 1 (
echo [錯誤] MySQL連接失??!
echo 請檢查:
echo 1. MySQL 5.7服務是否運行
echo 2. 用戶名/密碼是否正確
echo 3. 端口號是否正確(默認:3306)
pause
exit /b 1
)
echo [成功] MySQL連接正常
echo.
echo [步驟2] 獲取數(shù)據(jù)庫信息...
mysql.exe -h%DB_HOST% -P%DB_PORT% -u%DB_USER% -p%DB_PASS% -N -B -e "SELECT table_schema 'Database', ROUND(SUM(data_length+index_length)/1024/1024,2) 'Size_MB' FROM information_schema.tables WHERE table_schema='%DB_NAME%' GROUP BY table_schema" 2>nul
echo.
echo [步驟3] 執(zhí)行備份...
echo 開始時間: %TIME%
echo 備份文件: %BACKUP_FILE%
REM MySQL 5.7 優(yōu)化備份參數(shù)
mysqldump.exe ^
-h%DB_HOST% ^
-P%DB_PORT% ^
-u%DB_USER% ^
-p%DB_PASS% ^
--databases %DB_NAME% ^
--default-character-set=utf8mb4 ^
--single-transaction ^
--routines ^
--triggers ^
--events ^
--hex-blob ^
--complete-insert ^
--add-drop-database ^
--add-drop-table ^
--result-file="%BACKUP_FILE_FULL%" ^
--log-error="%BACKUP_DIR%%DB_NAME%_dump_error.log"
if errorlevel 1 (
echo [錯誤] 備份失??!
if exist "%BACKUP_DIR%%DB_NAME%_dump_error.log" (
echo 錯誤日志:
type "%BACKUP_DIR%%DB_NAME%_dump_error.log"
)
pause
exit /b 1
)
echo 結束時間: %TIME%
echo [成功] 數(shù)據(jù)庫備份完成!
REM 獲取文件大小
for %%F in ("%BACKUP_FILE_FULL%") do (
set "FILE_SIZE=%%~zF"
set "SIZE_MB=!FILE_SIZE:/1024/1024=!"
set /a SIZE_MB=!FILE_SIZE!/1024/1024
echo 文件大小: !FILE_SIZE! 字節(jié) (!SIZE_MB! MB)
)
echo.
echo [步驟4] 驗證備份文件...
REM 檢查備份文件是否包含正確的結束標記
findstr /i "Dump completed" "%BACKUP_FILE_FULL%" >nul
if errorlevel 1 (
findstr /i "-- Dump completed" "%BACKUP_FILE_FULL%" >nul
if errorlevel 0 (
echo [驗證] 備份文件完整性檢查通過
) else (
echo [警告] 未找到標準結束標記,但文件已生成
)
) else (
echo [驗證] 備份文件完整性檢查通過
)
REM ============ 可選:壓縮備份 ============
if "%COMPRESS%"=="true" (
echo.
echo [步驟5] 壓縮備份文件...
REM 檢查7-Zip
set "ZIP_PATH=C:\Program Files\7-Zip\7z.exe"
if not exist "%ZIP_PATH%" (
set "ZIP_PATH=%ProgramFiles%\7-Zip\7z.exe"
)
if exist "%ZIP_PATH%" (
"%ZIP_PATH%" a -tzip -mx5 "%BACKUP_FILE_FULL%.zip" "%BACKUP_FILE_FULL%" >nul
if errorlevel 0 (
del "%BACKUP_FILE_FULL%"
echo [成功] 壓縮完成: %BACKUP_FILE%.zip
set BACKUP_FILE_FINAL=%BACKUP_FILE_FULL%.zip
) else (
echo [警告] 壓縮失敗,保留原文件
set BACKUP_FILE_FINAL=%BACKUP_FILE_FULL%
)
) else (
echo [信息] 未找到7-Zip,使用未壓縮備份
set "COMPRESS=false"
set BACKUP_FILE_FINAL=%BACKUP_FILE_FULL%
)
) else (
set BACKUP_FILE_FINAL=%BACKUP_FILE_FULL%
)
REM ============ 清理舊備份 ============
echo.
echo [步驟6] 清理舊備份...
REM 方法1:按天數(shù)清理
echo 清理超過%KEEP_DAYS%天的備份...
forfiles /p %BACKUP_ROOT% /s /m *.sql /d -%KEEP_DAYS% /c "cmd /c echo 刪除: @path && del @path" 2>nul
forfiles /p %BACKUP_ROOT% /s /m *.zip /d -%KEEP_DAYS% /c "cmd /c echo 刪除: @path && del @path" 2>nul
REM 方法2:按文件數(shù)量清理
echo 檢查備份文件數(shù)量...
cd /d %BACKUP_ROOT%
for /f %%i in ('dir /b /s *.sql *.zip ^| find /c /v ""') do set COUNT=%%i
echo 當前備份文件總數(shù): %COUNT%
if %COUNT% GTR %MAX_BACKUPS% (
echo 超出最大限制(%MAX_BACKUPS%),清理最舊的文件...
dir /b /s *.sql *.zip /o-d /t:c > "%BACKUP_ROOT%\backup_list.txt"
setlocal enabledelayedexpansion
set /a DEL_COUNT=%COUNT%-%MAX_BACKUPS%
echo 需要刪除!DEL_COUNT!個文件
for /f "skip=%MAX_BACKUPS% delims=" %%F in ('dir /b /s *.sql *.zip /o-d /t:c') do (
if exist "%%F" (
echo 刪除: %%F
del "%%F"
)
)
endlocal
)
REM 清理空目錄
for /f "delims=" %%D in ('dir %BACKUP_ROOT% /ad /b /s ^| sort /r') do (
dir "%%D" 2>nul | findstr "^[0-9]" >nul || (
rmdir "%%D" 2>nul && echo 清理空目錄: %%D
)
)
echo.
echo ============================================
echo 備份摘要
echo ============================================
echo 數(shù)據(jù)庫: %DB_NAME%
echo 備份時間: %DATE% %TIME%
echo 備份文件: %BACKUP_FILE_FINAL%
for %%F in ("%BACKUP_FILE_FINAL%") do (
echo 文件大小: %%~zF 字節(jié)
)
echo 備份位置: %BACKUP_DIR%
echo 壓縮狀態(tài): %COMPRESS%
echo ============================================
echo.
REM 記錄日志
echo %DATE% %TIME% - 備份完成: %BACKUP_FILE_FINAL% >> "%LOG_FILE%"
for %%F in ("%BACKUP_FILE_FINAL%") do (
echo 文件大小: %%~zF 字節(jié) >> "%LOG_FILE%"
)
pause
2. 簡易版?zhèn)浞菽_本(快速使用)
創(chuàng)建 backup_simple.bat:
@echo off
chcp 65001 >nul
title MySQL 5.7 備份工具
REM MySQL 5.7 默認安裝路徑
set MYSQL_PATH="C:\Program Files\MySQL\MySQL Server 5.7\bin"
set BACKUP_DIR="D:\MySQL_Backup"
REM 數(shù)據(jù)庫配置
set DB_HOST=localhost
set DB_USER=root
set DB_PASS=mysql
set DB_NAME=jfdzyl
REM 創(chuàng)建備份目錄
if not exist %BACKUP_DIR% mkdir %BACKUP_DIR%
REM 生成備份文件名
set DATESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%
set TIMESTAMP=%time:~0,2%%time:~3,2%%time:~6,2%
set TIMESTAMP=%TIMESTAMP: =0%
set BACKUP_FILE=%BACKUP_DIR%%DB_NAME%_%DATESTAMP%_%TIMESTAMP%.sql
echo 正在備份數(shù)據(jù)庫 %DB_NAME% ...
echo 請稍候...
cd /d %MYSQL_PATH%
mysqldump -h%DB_HOST% -u%DB_USER% -p%DB_PASS% %DB_NAME% > "%BACKUP_FILE%"
if errorlevel 1 (
echo 備份失敗!
pause
exit /b 1
)
echo 備份成功!
echo 備份文件: %BACKUP_FILE%
for %%F in ("%BACKUP_FILE%") do (
echo 文件大小: %%~zF 字節(jié)
)
REM 自動打開備份目錄
explorer %BACKUP_DIR%
pause
3. 帶驗證的備份腳本
創(chuàng)建 backup_with_verify.bat:
@echo off
chcp 65001 >nul
cls
echo MySQL 5.7 數(shù)據(jù)庫備份驗證工具
echo ==============================
echo.
set MYSQL_PATH="C:\Program Files\MySQL\MySQL Server 5.7\bin"
set BACKUP_DIR="D:\MySQL_Backup"
set DB_USER=root
set DB_PASS=mysql
set DB_NAME=jfdzyl
REM 生成備份文件
set TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%
set TIMESTAMP=%TIMESTAMP: =0%
set TIMESTAMP=%TIMESTAMP::=%
set BACKUP_FILE=%BACKUP_DIR%%DB_NAME%_%TIMESTAMP%.sql
echo 步驟1: 執(zhí)行備份...
cd /d %MYSQL_PATH%
mysqldump -u%DB_USER% -p%DB_PASS^
--databases %DB_NAME%^
--single-transaction^
--routines^
--triggers^
--events^
--set-gtid-purged=OFF^
--result-file="%BACKUP_FILE%"
if errorlevel 1 (
echo [錯誤] 備份失敗
pause
exit /b 1
)
echo 步驟2: 驗證備份文件...
REM 檢查文件大小
for %%F in ("%BACKUP_FILE%") do set FILESIZE=%%~zF
if %FILESIZE% LSS 1024 (
echo [警告] 備份文件可能不完整 (大小: %FILESIZE% 字節(jié))
) else (
echo [通過] 文件大小: %FILESIZE% 字節(jié)
)
REM 檢查文件內容
findstr /i "CREATE TABLE" "%BACKUP_FILE%" >nul
if errorlevel 1 (
echo [錯誤] 備份文件不包含表結構
) else (
echo [通過] 包含表結構定義
)
findstr /i "INSERT INTO" "%BACKUP_FILE%" >nul
if errorlevel 1 (
echo [警告] 備份文件不包含數(shù)據(jù)插入語句
) else (
echo [通過] 包含數(shù)據(jù)插入語句
)
REM 快速恢復測試(可選)
echo.
echo 步驟3: 快速完整性測試...
echo 測試表結構語法...
REM 這里可以添加更多驗證邏輯
echo.
echo 備份驗證完成!
echo 文件: %BACKUP_FILE%
echo 大小: %FILESIZE% 字節(jié)
echo.
pause
4. 任務計劃配置腳本
創(chuàng)建 setup_scheduled_backup.bat:
@echo off
chcp 65001 >nul
title 設置MySQL 5.7定時備份
echo 正在創(chuàng)建MySQL 5.7自動備份任務...
echo.
REM 創(chuàng)建備份腳本
(
echo @echo off
echo chcp 65001 ^>nul
echo set MYSQL_PATH="C:\Program Files\MySQL\MySQL Server 5.7\bin"
echo set BACKUP_DIR="D:\MySQL_Backup"
echo.
echo set DB_USER=root
echo set DB_PASS=mysql
echo set DB_NAME=jfdzyl
echo.
echo REM 生成帶日期的文件名
echo for /f "tokens=1-3 delims=/ " %%a in ('date /t'^) do set DATE=%%a-%%b-%%c
echo set DATE=%%DATE:/=-%%
echo set BACKUP_FILE=%%BACKUP_DIR%%%%DB_NAME%%_%%DATE%%.sql
echo.
echo cd /d %%MYSQL_PATH%%
echo mysqldump -u%%DB_USER%% -p%%DB_PASS%% --databases %%DB_NAME%% --routines --triggers --events --single-transaction ^> "%%BACKUP_FILE%%"
echo.
echo echo 備份完成: %%DATE%% ^>^> "%%BACKUP_DIR%%\backup.log"
) > "%TEMP%\mysql_backup_task.bat"
REM 創(chuàng)建任務計劃
schtasks /create /tn "MySQL5.7_Backup_%DB_NAME%" ^
/tr "%TEMP%\mysql_backup_task.bat" ^
/sc daily /st 02:00 ^
/ru "SYSTEM" ^
/rl HIGHEST ^
/f
if errorlevel 1 (
echo 任務創(chuàng)建失敗,嘗試使用管理員權限...
echo 請右鍵以管理員身份重新運行此腳本
) else (
echo 定時備份任務創(chuàng)建成功!
echo 任務名稱: MySQL5.7_Backup_%DB_NAME%
echo 執(zhí)行時間: 每天 02:00
echo 備份目錄: D:\MySQL_Backup
)
echo.
pause
5. 使用注意事項
MySQL 5.7 特定配置
- 默認安裝路徑:
C:\Program Files\MySQL\MySQL Server 5.7\bin - 字符集設置:MySQL 5.7 默認使用
utf8,建議備份時指定--default-character-set=utf8mb4 - GTID特性:如果啟用了GTID,需要添加
--set-gtid-purged=OFF
常見問題解決
REM 如果遇到權限問題,可以嘗試以下方法: REM 1. 使用MySQL配置文件存儲密碼 echo [client] > my.cnf echo host=localhost >> my.cnf echo user=root >> my.cnf echo password=mysql >> my.cnf REM 2. 然后使用 mysqldump --defaults-file=my.cnf jfdzyl > backup.sql REM 3. 刪除配置文件(安全) del my.cnf
備份優(yōu)化建議
- 使用
--single-transaction進行一致性備份 - 使用
--routines備份存儲過程和函數(shù) - 使用
--events備份事件 - 使用
--triggers備份觸發(fā)器 - 大型數(shù)據(jù)庫可以分割備份文件
運行前請確保:
- MySQL 5.7 服務正在運行
- 備份目錄有寫入權限
- 防火墻允許MySQL連接
- 密碼正確無誤
以上就是windows服務器下備份mysql數(shù)據(jù)庫的腳本分享的詳細內容,更多關于mysql數(shù)據(jù)庫備份的資料請關注腳本之家其它相關文章!
您可能感興趣的文章:
- Linux下MySQL數(shù)據(jù)庫定時備份腳本與Crontab配置教學
- MySQL數(shù)據(jù)庫實現(xiàn)本地和異地備份的全面指南
- MySQL備份數(shù)據(jù)庫幾種常見的方法
- MySQL數(shù)據(jù)庫備份工具mylvmbackup的使用解讀
- MySQL數(shù)據(jù)庫備份與恢復全攻略
- Window系統(tǒng)下自動備份MySql數(shù)據(jù)庫方法
- Windows服務器下MySql數(shù)據(jù)庫單向主從備份詳細實現(xiàn)步驟分享
- windows環(huán)境下mysql數(shù)據(jù)庫的主從同步備份步驟(單向同步)
相關文章
windows 10下mysql 5.7.21 winx64安裝配置方法圖文教程
這篇文章主要為大家詳細介紹了windows 10下mysql 5.7.21 winx64安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02
MySQL的id關聯(lián)和索引使用的實際優(yōu)化案例
這篇文章主要介紹了MySQL的id關聯(lián)實際優(yōu)化案例,關聯(lián)和索引一直是MySQL常見的可優(yōu)化大塊兒,需要的朋友可以參考下2015-05-05

