設置計劃任務自動備份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
英文地址,請注明出處:http://en.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…