一、問題描述
某項目客戶要求把阿里雲上一台ECS非核心的mysql庫做備份,具體要求如下:
1、每天1:00對mysql數據庫進行完全備份。
2、備份文件存放到阿里雲的NAS平台上。
3、保留5天的備份副本。
TPS:
-
運行mysql的ECS的操作系統為windows 2012 64位
-
mysql的版本為MariaDB 10.2
-
本地備份路徑在C:\mysql_backup(因為只有一個系統盤,沒得選擇)
看似很簡單的問題,中間在實施過程中,還是遇到一些坑,特地作一下記錄,以備后續參考。
二、實施過程
2.1 編寫mysql的備份腳本
1、mysql的自動備份腳本
@echo off set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" cd C:\Program Files\MariaDB 10.2\bin&&mysqldump -hlocalhost -uroot -p***** --single-transaction --opt --events --triggers --routines -B itsm > C:\itop_mysql_backup\itsm_%Ymd%.sql forfiles /p "C:\itop_mysql_backup" /s /m *.sql /d -5 /c "cmd /c del @path"
mysqldump參數說明:
-
--single-transaction:該選項在導出數據之前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,因為LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。
-
--opt: 等同於--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項默認開啟, 可以用--skip-opt禁用.
-
--event: 導出事件
-
--triggers: 導出觸發器
-
--routines:導出存儲過程以及自定義函數
forfiles參數說明:
-
/p Path
指定 Path,表明要從哪里開始搜索。默認的文件夾是當前工作目錄,該目錄通過鍵入句號 (.) 指定。
注:絕對路徑應該包含在雙引號中,且路徑應該由反斜杠分割:example:"D:\HOME\Desktop\62backup"
-
/m SearchMask
按照 SearchMask 搜索文件。默認的 SearchMask 是 *.*。
-
/s
指示 forfiles 在子目錄中搜索。
-
/c Command
在每個文件上運行指定的 Command。帶有空格的命令字符串必須用引號括起來。默認的 Command 是 "cmd /c echo @file"。
-
/d[{+ | -}] [{MM/*DD/YYYY* | DD}]
選擇日期大於或等於 (+)(或者小於或等於 (-))指定日期的文件,其中 MM/*DD/YYYY* 是指定的日期,DD 是當前日期減去 DD 天。如果未指定 + 或-,則使用 +。DD 的有效范圍是 0 - 32768。
-
/?
在命令提示符下顯示幫助。
2、設置腳本的靜默執行
mysql_bak.vbs,內容如下:
Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c mysql_bak.bat",vbhide
參數說明:
-
mysql_bak.bat:mysql備份腳本文件名。
2.2 設置定時計划
1、任務計划--》創建基本任務
2、設置觸發器
3、設置操作
1、安裝SyncBackPro軟件
2、創建任務
1)點擊添加按鈕,創建任務
2)選擇任務的類型
TPS:
-
備份:不會刪除目標端的文件,如果此文件在源端不存在的話。
-
同步:是雙向同步,最終兩邊的文件會達到一致。
-
鏡像:以源為標准,同步到目標源,如果目標端的文件在源中不存在,則目標端的文件會被刪除掉。
3)選擇同步文件的位置
4)選擇要同步的源文件夾和目標文件夾
3、創建定時計划
1)創建計划任務
2)設置計划任務
三、注意事項
1、設置windows計划時,操作階段,必須在“起始於”設置腳本的路徑,否則bat不能成功執行。具體如下圖所示: