大家好,我是Spring小楊混巧,一個(gè)有夢想的Java司機(jī)枪向。
1.事件起因
就是之前服務(wù)器上用的是mysql數(shù)據(jù)庫,因?yàn)樾」韭镞值常矝]有專門的運(yùn)維秘蛔。我們幾個(gè)苦逼的開發(fā)都是即當(dāng)業(yè)務(wù),又干開發(fā)傍衡,還要做測試和運(yùn)維深员,別提多悲催了。
因?yàn)槌鲞^生產(chǎn)事故蛙埂,后來兼顧運(yùn)維的同事只好每天手動(dòng)去備份倦畅。
備份很簡單,就是用navicat绣的。
這個(gè)玩意叠赐,相信大家都用過吧,里面有一個(gè)導(dǎo)出數(shù)據(jù)庫的功能屡江,會(huì)導(dǎo)出一個(gè)xxx.sql芭概。
然后,我們會(huì)在電腦上弄一個(gè)文件夾惩嘉,改一下sql的文件名罢洲,比如backup20211011.sql。
問題是宏怔,每天都手動(dòng)去備份一下奏路,是真的很麻煩啊。
后來臊诊,我靈機(jī)一動(dòng),說我給你寫個(gè)腳本吧斜脂,你放到服務(wù)器上抓艳,以后就不用天天手動(dòng)去備份了。
2.BAT腳本備份mysql
廢話不多說帚戳,直接上腳本:
echo off
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
set t=%%a
)
set ip=127.0.0.1
set user=root
set password=123
set Today=%t:~0,4%-%t:~4,2%-%t:~6,2%
echo,%Today%
echo.
"E:\mysql-5.5.31-win32\bin\mysqldump.exe" -h%ip% -u%user% -p%password% --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x edu>d:\db_backup\YourDataBaseName.sql
echo.
echo,生成目錄d:\db_backup\%Today%
md d:\db_backup\%Today%
move d:\db_backup\YourDataBaseName.sql d:\db_backup\%Today%
echo,備份完畢
就是用cmd命令實(shí)現(xiàn)了mysql的備份玷或,這樣子。
小楊在這邊給大家稍微解釋一下關(guān)鍵的命令片任。
set ip=127.0.0.1
set user=root
set password=123
set Today=%t:~0,4%-%t:~4,2%-%t:~6,2%
這幾行是設(shè)置IP偏友,用戶名和密碼。Today就是今天的日期对供,用來生成文件夾的位他。
"E:\mysql-5.5.31-win32\bin\mysqldump.exe"
-h%ip% -u%user% -p%password%
--default-character-set=utf8
--opt
--extended-insert=false
--triggers -R --hex-blob
-x YourDataBaseName>d:\db_backup\YourDataBaseName.sql
再看這幾行氛濒,其中 E:\mysql-5.5.31-win32\bin\mysqldump.exe 是我們電腦mysqldump執(zhí)行文件的絕對路徑,就在你安裝mysql的目錄里面鹅髓。 然后就是你數(shù)據(jù)庫的名字:YourDataBaseName舞竿。
生成該數(shù)據(jù)庫的腳本文件后,會(huì)保存到 d:\db_backup 目錄里面窿冯。
md d:\db_backup\%Today%
move d:\db_backup\YourDataBaseName.sql d:\db_backup\%Today%
最后骗奖,就是生成日期文件夾,比如20211011醒串,然后用move命令把剛才生成的腳本文件移動(dòng)到這個(gè)文件夾中执桌,就大功告成啦!
3. 寫Java定時(shí)任務(wù)部署到服務(wù)器
最后一步芜赌,就是寫一個(gè)Java定時(shí)任務(wù)鼻吮,定時(shí)去調(diào)這個(gè)bat腳本,就完事了较鼓。
我用的是Hutool定時(shí)任務(wù)工具椎木。
核心代碼我也貼出來給大家:
public void mysqlBackup(){
System.out.println("mysql備份 開始...");
RuntimeUtil.exec("cmd.exe /c start C:/mysql_backup.bat");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
RuntimeUtil.exec("taskkill /f /im cmd.exe");
哈哈,簡單不博烂?幾行代碼就搞定了香椎!