1. 程式人生 > >MySql 定時備份數據庫

MySql 定時備份數據庫

ref 規則 環境 定時 sched .com iba xcopy 英文

轉載:MySql 定時備份數據庫

每天零點備份一次數據庫,備份文件放在指定目錄(如果目錄不存在則新建),按月存儲;

將下面這段命令存儲為一個 *.bat 文件,添加一個Windows任務計劃程序(Task scheduler)指向這個文件,每天執行一次即可。

rem ******Code Start***********
@echo off
C:
CD C:\Program Files\MySQL\MySQL Server 5.7\bin
set "Y=%date:~10,4%"
set "m=%date:~7,2%"
set "d=%date:~4,2%"
if not exist "D:\ARTS Backup
\BK%Y%%m%\" (mkdir "D:\ARTS Backup\BK%Y%%m%\") mysqldump --opt -u root --password=ameroidrts ameroid > "D:\ARTS Backup\BK%Y%%m%\ameroid_%Y%%m%%d%.sql" @echo on rem *****************Code End*************

說明

我的MySql安裝在C:\Program Files下,所以要先進入MySqlbin目錄,以便執行 mysqldump 命令

C:

CD C:\Program Files\MySQL\MySQL Server 5.7\bin

如果你的MySql安裝在其它位置,修改盤符和路徑即可。

用到了date:命令來得到當前日期,下面三條命令分別得到年月日:

set "Y=%date:~10,4%"
set "m=%date:~7,2%"
set "d=%date:~4,2%"

因為電腦是英文環境,可以通過 echo %date:~,20% 查看日期格式(輸出日期字符串前20個字符)

技術分享圖片

如果你的電腦環境是中文,日期格式應該是:2016/03/09 周三,那年月日應該是:

set "Y=%date:~,4%"
set "m=%date:~5,2%"
set "d=%date:~8,2%"

if not exist 是判斷目錄是否存在,

mkdir是新建目錄,目錄名稱中如果有空格,可將整個路徑雙引號括起來。

備份文件存儲目錄:

技術分享圖片

第一種:新建批處理文件 backup.dat,裏面輸入以下代碼:

net stop mysql  
xcopy "C:/Program Files/MySQL/MySQL Server 5.0/data/piaoyi/*.*" D:/db_backup/%date:~0,10%/ /y  
net start mysql  

註意:批處理命令中路徑裏有空格的話,必須在路徑上加上雙引號!

然後使用Windows的"計劃任務"定時執行該批處理腳本即可。(例如:每天淩晨3點執行backup.bat)
解釋:備份和恢復的操作都比較簡單,完整性比較高,控制備份周期比較靈活。此方法適合有獨立主機但對mysql沒有管理經驗的用戶。缺點是占用空間比較多,備份期間mysql會短時間斷開(例如:針對30M左右的數據庫耗時5s左右)。
關於時間參數的參考:
%date:~0,10% //提取年月日信息
%date:~-3% //提取星期幾信息
%time:~0,5% //提取時間中的時和分
%time:~0,-3% //提取時和分和秒信息

第二種:mysqldump備份成sql文件
==============
假想環境:
MySQL 安裝位置:C:/MySQL
論壇數據庫名稱為:bbs
MySQL root 密碼:123456
數據庫備份目的地:D:/db_backup/

腳本:

@echo off  
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"  
C:/MySQL/bin/mysqldump --opt -u root --password=123456 bbs > D:/db_backup/bbs_%Ymd%.sql  
@echo on  

以上代碼保存為backup_db.bat

然後使用Windows的"計劃任務"定時執行該腳本即可。(例如:每天淩晨5點執行back_db.bat)
說明:此方法可以不用關閉數據庫,並且可以按每一天的時間來名稱備份文件。
通過%date:~5,2%來組合得出當前日期,組合的效果為yyyymmdd,date命令得到的日期格式默認為yyyy-mm-dd(如果不是此格式可以通過pause命令來暫停命令行窗口看通過%date:~,20%得到的當前計算機日期格式),所以通過%date:~5,2%即可得到日期中的第五個字符開始的兩個字符,例如今天為2009-02-05,通過%date:~5,2%則可以得到02。(日期的字符串的下標是從0開始的)

第三種:利用WinRAR對MySQL數據庫進行定時備份。
對於MySQL的備份,好的方法是直接備份MySQL數據庫的Data目錄。下面提供了一個利用WinRAR來對Data目錄進行定時備份的方法。

首先當然要把WinRAR安裝到計算機上。

將下面的命令寫入到一個文本文件裏,如 backup.bat

net stop mysql  
"C:/Program Files/WinRAR/WinRAR.exe" a -ag -k -r -s D:/db_backup/mysql_.rar "C:/Program Files/MySQL/MySQL Server 5.0/data/"  
net start mysql  

winrar參數解釋:

a: 添加文件到壓縮文件
-ag: 使用當前日期生成壓縮文件名
-k: 鎖定壓縮文件
-r: 遞歸子目錄
-s: 創建固實壓縮文件

執行以上文件後,會生成一個壓縮文件如:mysql_20130803004138.rar。
進入控制面版,打開計劃任務,雙擊"添加計劃任務"。在計劃任務向導中找到剛才的backup.bat文件,接著為這個任務指定一個運行時間和運行時使用的賬號密碼就可以了。
這種方法缺點是占用時間比較多,備份期間壓縮需要時間,mysql斷開比第一種方法更多的時間,但是對於文件命名很好。

Windows 下 MySQL 簡單定時自動備份、刪除過期備份

新建一個 數據庫備份文件存放目錄,本例為D:\db_backup.新建一個批處理文件,可以起任意名,本例為mysql_backup_tool.bat ,文件內容如下:

rem auther:www.waylau.com
rem date:20150724
rem ******MySQL backup start********@echo off
forfiles /p "D:\db_backup" /m emsc_backup_*.sql -d -30 /c "cmd /c del /f @path"
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"
C:\mysql\bin\mysqldump --opt --single-transaction=TRUE --user=root --password=123456 --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "emsc" > D:\db_backup\emsc_backup_%Ymd%.sql
@echo on
rem ******MySQL backup end********

  其中,forfiles刪除過期文件的命令,-d -30刪除30天的文件。C:\mysql\bin\mysqldump 為 MySQL 安裝時,mysqldump.exe 文件所在路徑,--user=root 指 MySQL 用戶名為 root --password=123456 指 MySQL 密碼為123456,"emsc" 為要備份的數據庫的名稱,emsc_backup_%Ymd%.sql 為備份文件的名稱,這個名稱是根據當前的時間規則生成的,比如今天生產的備份文件,名稱為emsc_backup_20150724012120.sql 。

自測案例:

mysql:

rem *******************************Code Start*****************************
@echo off
C:
CD C:\Program Files\MySQL\MySQL Server 5.5\bin

set "Y=%date:~,4%"
set "m=%date:~5,2%"
set "d=%date:~8,2%"

if not exist "F:\mysql\Backup\BK%Y%%m%\" (mkdir "F:\mysql\Backup\BK%Y%%m%\")
mysqldump --opt -u root --password= jitri > "F:\mysql\Backup\BK%Y%%m%\jitriBackUp_%Y%%m%%d%.sql"

@echo on
rem *******************************Code End*****************************

oracle:

@echo off
rem set backupfolder=%date:~0,4%-%date:~5,2%-%date:~8,2%
rem md D:\backup\%backupfolder%
set backupfile=jsqs_%date:~0,4%-%date:~5,2%-%date:~8,2%.dmp
set logfile=jsqs_%date:~0,4%-%date:~5,2%-%date:~8,2%.log
expdp jsqs/jsqs directory=dbbackup  dumpfile=%backupfile%  logfile=%logfile% schemas=jsqs parallel=4
forfiles /p "D:\dbbackup" /d -7  /c "cmd /c  del /f @path"

MySql 定時備份數據庫