由于客戶要求,需要將數(shù)據(jù)庫(kù)進(jìn)行每天定時(shí)自動(dòng)備份,所以網(wǎng)上找了各種方式就行了測(cè)試,遇到很多坑,特此記錄下來(lái),步驟是東拼西湊的,雖然也是網(wǎng)上找的,但都是經(jīng)過(guò)親自測(cè)試,一定能用,針對(duì)部署時(shí)期遇到的問(wèn)題和解決方式都記錄了下來(lái)。 1、創(chuàng)建備份目錄:為了方便,在/home保存?zhèn)浞菸募?/p>
cd /home/dbback
2、創(chuàng)建備份Shell腳本:注意把以下命令中的DatabaseName換為實(shí)際的數(shù)據(jù)庫(kù)名稱; 當(dāng)然,你也可以使用其實(shí)的命名規(guī)則! vi bkDatabaseName.sh
輸入/粘貼以下內(nèi)容: mysqldump -uusername -ppassword DatabaseName > /home/dbback/DatabaseName_$(date +%Y%m%d_%H%M%S).sql
對(duì)備份進(jìn)行壓縮: mysqldump -uusername -ppassword DatabaseName | gzip > /home/dbback/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz
注意: 把 username 替換為實(shí)際的用戶名; 把 password 替換為實(shí)際的密碼; 把 DatabaseName 替換為實(shí)際的數(shù)據(jù)庫(kù)名; 3、添加可執(zhí)行權(quán)限:chmod u+x bkDatabaseName.sh
添加可執(zhí)行權(quán)限之后先執(zhí)行一下,看看腳本有沒(méi)有錯(cuò)誤,能不能正常使用; ./bkDatabaseName.sh
注:這里可能會(huì)報(bào)錯(cuò)Warning: Using a password on the command line interface can be insecure.
導(dǎo)出MySQL數(shù)據(jù)庫(kù)的時(shí)候采用mysqldump命令,出現(xiàn)"Warning: Using a password on the command line interface can be insecure."的錯(cuò)誤提示,當(dāng)然數(shù)據(jù)庫(kù)肯定也沒(méi)有能備份下來(lái)。這個(gè)問(wèn)題應(yīng)該是在MySQL5.6+版本的時(shí)候就有出現(xiàn),可能是為了確保數(shù)據(jù)庫(kù)的安全性采用的保護(hù)機(jī)制。 解決方法、修改數(shù)據(jù)庫(kù)配置文件 1、我們需要修改數(shù)據(jù)庫(kù)配置文件,這個(gè)要看我們數(shù)據(jù)庫(kù)的配置的,有些是在/etc/my.cnf,有些是/etc/my.conf 
我們需要在[client]部分添加腳本: host=localhost user=數(shù)據(jù)庫(kù)用戶 password='數(shù)據(jù)庫(kù)密碼'
這里參數(shù)要修改成我們自己的。 2、采用命令導(dǎo)出和導(dǎo)入數(shù)據(jù)庫(kù) 其實(shí)在這個(gè)時(shí)候,我們?nèi)绻捎?詳解使用mysqldump命令備份還原MySQL數(shù)據(jù)用法整理"介紹的方法也是可以使用的,雖然依舊有錯(cuò)誤提示,但是數(shù)據(jù)庫(kù)還是可以導(dǎo)出的。您肯定和老左一樣是追求細(xì)節(jié)的人,一點(diǎn)點(diǎn)問(wèn)題都不能有,但我們可以用下面的命令導(dǎo)出和導(dǎo)入,就沒(méi)有錯(cuò)誤提示。 #導(dǎo)出數(shù)據(jù)庫(kù) mysqldump --defaults-extra-file=/etc/my.cnf database > database.sql
#導(dǎo)入數(shù)據(jù)庫(kù) mysql --defaults-extra-file=/etc/my.cnf database < database.sql
這里我們可以看到上面的命令和以前常用的快速導(dǎo)入和導(dǎo)入命令有所不同了,需要加載我們配置的MYSQL配置文件,這個(gè)紅色部分要根據(jù)我們實(shí)際的路徑修改。用這樣的命令導(dǎo)出備份和導(dǎo)入是沒(méi)有錯(cuò)誤提示的。
4、添加計(jì)劃任務(wù)檢測(cè)或安裝 crontab確認(rèn)crontab是否安裝: 執(zhí)行 crontab 命令如果報(bào) command not found,就表明沒(méi)有安裝 -bash: crontab: command not found
如時(shí)沒(méi)有安裝 crontab,需要先安裝它,具體步驟請(qǐng)參考: CentOS下使用yum命令安裝計(jì)劃任務(wù)程序crontab 使用rpm命令從CentOS系統(tǒng)盤安裝計(jì)劃任務(wù)程序crontab 添加計(jì)劃任務(wù)執(zhí)行命令: crontab -e
這時(shí)就像使用vi編輯器一樣,可以對(duì)計(jì)劃任務(wù)進(jìn)行編輯。 輸入以下內(nèi)容并保存: */1 * * * * /home/backup/bkDatabaseName.sh
具體是什么意思呢?
意思是每一分鐘執(zhí)行一次shell腳本“/home/backup/bkDatabaseName.sh”。 1、額外學(xué)習(xí),crontab用法 crontab命令用于安裝、刪除或者列出用于驅(qū)動(dòng)cron后臺(tái)進(jìn)程的表格。用戶把需要執(zhí)行的命令序列放到crontab文件中以獲得執(zhí)行。 每個(gè)用戶都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接創(chuàng)建或者直接修改。該crontab文件是通過(guò)crontab命令創(chuàng)建的
在crontab文件中如何輸入需要執(zhí)行的命令和時(shí)間。該文件中每行都包括六個(gè)域,其中前五個(gè)域是指定命令被執(zhí)行的時(shí)間,最后一個(gè)域是要被執(zhí)行的命令。 每個(gè)域之間使用空格或者制表符分隔。格式如下: minute hour day-of-month month-of-year day-of-week commands 合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) 除了數(shù)字還有幾個(gè)個(gè)特殊的符號(hào)就是"*"、"/"和"-"、",",*代表所有的取值范圍內(nèi)的數(shù)字,"/"代表每的意思,"/5"表示每5個(gè)單位,"-"代表從某個(gè)數(shù)字到某個(gè)數(shù)字,","分開(kāi)幾個(gè)離散的數(shù)字。
-l 在標(biāo)準(zhǔn)輸出上顯示當(dāng)前的crontab。 -r 刪除當(dāng)前的crontab文件。 -e 使用VISUAL或者EDITOR環(huán)境變量所指的編輯器編輯當(dāng)前的crontab文件。當(dāng)結(jié)束編輯離開(kāi)時(shí),編輯后的文件將自動(dòng)安裝。 2、例子: 每天早上6點(diǎn) 0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因?yàn)閏ron把任何輸出都email到root的信箱了。
每?jī)蓚€(gè)小時(shí) 0 */2 * * * echo "Have a break now." >> /tmp/test.txt
晚上11點(diǎn)到早上8點(diǎn)之間每?jī)蓚€(gè)小時(shí)和早上八點(diǎn) 0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
每個(gè)月的4號(hào)和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn) 0 11 4 * 1-3 command line
1月1日早上4點(diǎn) 0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出現(xiàn)錯(cuò)誤,或者有數(shù)據(jù)輸出,數(shù)據(jù)作為郵件發(fā)給這個(gè)賬號(hào) HOME=/
每小時(shí)執(zhí)行/etc/cron.hourly內(nèi)的腳本 01 * * * * root run-parts /etc/cron.hourly 每天執(zhí)行/etc/cron.daily內(nèi)的腳本 02 4 * * * root run-parts /etc/cron.daily
每星期執(zhí)行/etc/cron.weekly內(nèi)的腳本 22 4 * * 0 root run-parts /etc/cron.weekly
每月去執(zhí)行/etc/cron.monthly內(nèi)的腳本 42 4 1 * * root run-parts /etc/cron.monthly
注意: "run-parts"這個(gè)參數(shù)了,如果去掉這個(gè)參數(shù)的話,后面就可以寫要運(yùn)行的某個(gè)腳本名,而不是文件夾名。
每天的下午4點(diǎn)、5點(diǎn)、6點(diǎn)的5 min、15 min、25 min、35 min、45 min、55 min時(shí)執(zhí)行命令。 5,15,25,35,45,55 16,17,18 * * * command
每周一,三,五的下午3:00系統(tǒng)進(jìn)入維護(hù)狀態(tài),重新啟動(dòng)系統(tǒng)。 00 15 * * 1,3,5 shutdown -r +5
每小時(shí)的10分,40分執(zhí)行用戶目錄下的innd/bbslin這個(gè)指令: 10,40 * * * * innd/bbslink
每小時(shí)的1分執(zhí)行用戶目錄下的bin/account這個(gè)指令: 1 * * * * bin/account
每天早晨三點(diǎn)二十分執(zhí)行用戶目錄下如下所示的兩個(gè)指令(每個(gè)指令以;分隔): 20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)
每年的一月和四月,4號(hào)到9號(hào)的3點(diǎn)12分和3點(diǎn)55分執(zhí)行/bin/rm -f expire.1st這個(gè)指令,并把結(jié)果添加在mm.txt這個(gè)文件之后(mm.txt文件位于用戶自己的目錄位置)。 12,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt
5、測(cè)試任務(wù)是否執(zhí)行很簡(jiǎn)單,我們就執(zhí)行幾次“l(fā)s”命令,看看一分鐘過(guò)后文件有沒(méi)有被創(chuàng)建就可以了! 如果任務(wù)執(zhí)行失敗了,可以通過(guò)以下命令查看任務(wù)日志: # tail -f /var/log/cron
輸出類似如下 
|