最近兩天,因公司業務需要,要定期備份mongodb數據庫中的數據。
查了很多資料後,發現mongodb似乎並沒有自帶的定時備份功能,於是只好轉移目標到linux系統的定時任務上,於是學習並使用了crontab,並成功定時備份。
我的實現過程大體上分了兩步,一個是在root用戶下,一個是其他非root用戶。因為測試機上的mongodb等都是用的root用戶,所以一開始迷迷糊糊的就直接操作了。
一、root用戶下:
1、環境:redhet 6.3
mongodb安裝目錄:/mongodb305/mongodb305/bin
mongdb中存在數據庫admin,用戶名admin,密碼admin
2、首先寫了一個mongodb備份的腳本test.sh,並且在root目錄下創建一個目錄admin:
[root@213 ~]# vi test.sh
[root@213 ~]# mkdir /root/admin
3、test.sh文件的內容如下: (這裡有兩個命令,第一個命令後的分號不能少,至少我在操作的時候不加分號就不行)
rm -rf /root/admin; /mongodb305/mongodb305/bin/mongodump --port 27017 -u admin -p admin -d admin -o /root/admin ~ ~ ~ ~ ~ -- INSERT --
4、然後設置定時任務:
[root@213 ~]# cd /etc/cron.d [root@213 cron.d]# ls 0hourly raid-check sysstat [root@213 cron.d]# vi test
*/5 * * * * root /root/test.sh
6、然後執行crontab命令:
[root@213 cron.d]# crontab test
二、非root用戶:
1、環境:mongodb目錄:/home/tuzongxun/mongodb306/mongodb305/bin
2、創建admin目錄,創建腳本test.sh並編輯:
[tuzongxun@213 ~]# mkdir /root/admin
[tuzongxun@213 ~]# vi test.sh
3、test.sh文件內容如下:
rm -rf /home/tuzongxun/admin; /home/tuzongxun/mongodb306/mongodb305/bin/mongodump --port 27017 -u admin -p admin -d admin -o /home/tuzongxun/admin ~ ~ ~ ~ ~ -- INSERT --
4、然後設置定時任務:
[root@213 ~]# cd /etc/cron.d [root@213 cron.d]# ls 0hourly raid-check sysstat test [root@213 cron.d]# vi test111
*/5 * * * * tuzongxun /home/tuzongxun/test.sh
6、這裡需要注意的是:如果這裡使用的數據庫就是剛才用root用戶操作過的,那麼有一些地方需要修改,否則任務將不能執行。
例如:1、/tmp下的mongo開頭的那些文件,還有mongodb數據存儲目錄下journal目錄以及j._0文件;都要更改用戶權限,否則將不能用非root用戶啟動mongodb
2、要在/etc中更改cron.allow文件,在裡邊加入需要使用的用戶,例如:tuzongxun;
7、執行crontab命令:
[tuzongxun@213 cron.d]# crontab test111
三、以上兩個操作的時候,test.sh文件默認不是可執行文件,需要賦予可執行權限。
在使用crontab定時操作之前,為了驗證test.sh文件是否能正確有效執行,可以先手動執行一次,確定沒問題的情況下,再使用定時任務 。