成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MongoDB自動備份全過程實錄

數據庫 其他數據庫 MongoDB
前段時間,個人小程序 因服務器磁盤空間被占滿,導致MongoDB掛了。清理了一些無用的數據后,重啟MongoDB,竟然無法啟動,一番折騰(20分鐘)后,總算修復了。這讓我意識到:雖然是個人小項目,但也必須定期備份啊,否則數據丟了很尷尬的說。

MongoDB自動備份全過程實錄

前段時間,個人小程序 因服務器磁盤空間被占滿,導致MongoDB掛了。清理了一些無用的數據后,重啟MongoDB,竟然無法啟動,一番折騰(20分鐘)后,總算修復了。這讓我意識到:雖然是個人小項目,但也必須定期備份啊,否則數據丟了很尷尬的說。

碎碎念

我不是MongoDB高手,之所以選擇MongoDB,是因為需求不明確——MongoDB很適合不明確需求場景的開發。

個人對Elasticsearch更熟悉,Elasticsearch也很適合不定需求的業務開發;但個人服務器只有1G內存,用Elasticsearch得升級服務器,得花好多錢啊啊啊。

MongoDB備份比較簡單,只需用內置的 mongodump 即可,命令格式如下:

  1. mongodump -h {mongodb主機名}:{端口} -u {賬號} -p {密碼} -d {數據庫名稱} -o {存儲路徑} 

然而,筆者為MongoDB設置的密碼是帶有特殊字符的,例如 @#$\ 之類,直接以如上形式執行命令,會報錯!

所以筆者選擇不帶 -p 參數執行命令,即:

  1. mongodump -h {mongodb主機名}:{端口} -u {賬號} -d {數據庫名稱} -o {存儲路徑} 

然后,命令提示符會提示輸入密碼。例如

  1. # mongodump -h 127.0.0.1 -u user -d itmuch -o /tmp/somepathEnter password

至此已實現MongoDB的備份。然而,手動備份還是挺麻煩的,怎么實現備份的自動化呢?

自動備份

正常來說,自動備份是比較簡單的——只需將手動備份的命令做成Shell腳本,并設置定時任務即可。然而,筆者的場景,命令是需要交互式輸入密碼的啊!

怎么才能自動輸入密碼呢?expect 登場了——一款提供自動交互的工具。

安裝expect

  1. yum install -y expect 

編寫expect腳本

expect語法非常簡單,和Shell幾乎一樣。筆者的腳本編寫如下:

  1. #!/bin/expect 
  2. # spawn是expect的語句,執行命令前需添加該字眼 
  3. set DATE [exec date "+%Y-%m-%d"
  4. set DIR /xxxxx/dbbak-$DATE 
  5. spawn rm -rf $DIR 
  6. spawn echo 'removing...$DIR' 
  7. spawn mongodump -h {host:port}  -u {user} -d {dbname} -o $DIR 
  8. # 交互獲取是否返回password:關鍵字 
  9. expect "password:" 
  10. # 將密碼發送過去,注意***的換行不能少,否則得人工輸入回車。 
  11. send "密碼\r" 
  12. # 停留在遠程控制臺,沒有這行就會直接返回本地控制臺,而不等shell執行完 
  13. interact 

注釋很全面了,聰明的你閱讀肯定沒有壓力。最終備份出來的文件會存放在 /xxxxx/dbbak-備份日期 目錄中。

自動備份

筆者利用Linux定時任務實現自動執行。

  1. crontab -e 

在新窗口中添加如下內容:

  1. 0 0 1 * * ? /usr/bin/expect 上面expect shell的完整路徑 

原本以為這樣就可以定時執行了,然而卻無法正常執行。

百度后,將腳本修改為如下,終于可以正常執行了。

  1. #!/bin/expect 
  2. # spawn是expect的語句,執行命令前需添加該字眼 
  3. set DATE [exec date "+%Y-%m-%d"
  4. set DIR /xxxxx/dbbak-$DATE 
  5. spawn rm -rf $DIR 
  6. spawn echo 'removing...$DIR' 
  7. spawn mongodump -h {host:port}  -u {user} -d {dbname} -o $DIR 
  8. # 交互獲取是否返回password:關鍵字 
  9. expect "password:" 
  10. # 將密碼發送過去,注意***的換行不能少,否則得人工輸入回車。 
  11. send "密碼\r" 
  12.  
  13. set timeout 120 
  14. expect eof 
  15.  
  16. exit 

總結

本文沒什么難點,都是一些細節——

  • 因為密碼含有特殊字符,所以需要交互式輸入密碼;
  • 因為要交互式輸入密碼,所以使用了expect

寫出來主要是總結下踩到的坑,另外,expect是一款通用的提供自動交互的工具,用來實現ssh的自動登錄、sftp的自動登錄、mysql的自動登錄等。腳本的套路都和本文展示的結構基本類似。 

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2011-02-22 10:46:02

Samba配置

2011-09-06 15:38:20

QT安裝

2009-04-13 12:37:18

2011-01-21 17:51:52

2009-12-08 17:56:16

WCF配置

2011-04-18 15:56:10

軟件測試

2010-07-21 14:51:19

telnet-serv

2011-03-11 10:39:02

YUM安裝LAMP

2010-06-12 10:03:20

Ubuntu Grub

2011-08-15 09:19:22

2010-03-01 17:01:03

Python編程技巧

2010-03-10 13:24:45

Zend Debugg

2010-11-19 10:11:49

Oracle物化視圖

2012-11-06 10:19:18

Java自定義加載Java類

2010-06-17 13:10:09

Linux Grub修

2009-06-10 16:55:42

cygwin netb安裝

2009-11-02 14:53:30

Oracle創建用戶權

2010-03-30 10:11:53

CentOS源

2010-11-19 09:30:29

2010-03-26 14:48:03

Ylmf OS 2.0
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕精品视频在线观看 | 99精品久久久 | 欧美伊人久久久久久久久影院 | 91精品国产一区二区在线观看 | 久久小视频 | 99爱免费 | 国产精品一区三区 | 五月精品视频 | 日韩综合在线播放 | 欧美亚洲高清 | 亚洲色图在线观看 | www.黄网| 精品一二三区 | 狠狠狠干 | 中文字幕高清av | 性精品| 蜜桃黄网 | a视频在线观看 | 手机日韩 | 中文字幕日韩一区 | 日韩一区二区久久 | 欧美日韩在线视频一区 | 日韩国产中文字幕 | 在线观看视频一区二区三区 | 日韩a在线观看 | 国产二区视频 | 涩涩视频在线观看免费 | 亚洲欧美日韩电影 | 国产精品久久av | 久久久久综合 | 亚洲精品久久久久中文字幕欢迎你 | 欧美一区二区三区在线观看 | 国产欧美在线一区 | 麻豆成人在线视频 | 日本午夜在线视频 | 国产精品久久久久久久久久久久久 | av黄色免费在线观看 | 亚洲国产精品99久久久久久久久 | 久久av资源网 | 久久综合九九 | 国产精品久久久亚洲 |