crontab定期執行命令詳解,以及實例

1. 備份某個數據庫

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. ##################################################################  
  2. # 備份某個數據庫  
  3. ##################################################################  
  4.   
  5. # root 用戶,創建備份目錄  
  6. mkdir -p /usr/local/cncounter/mysql_dump  
  7. cd /usr/local/cncounter/mysql_dump  
  8.   
  9. # 導出數據庫,熱備  
  10. mysqldump -u root -pmypasssecret cncounter > cncounter_dump.sql.20140414_1333  

2. 還原某個數據庫

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. ##################################################################  
  2. # 還原某個數據庫  
  3. ##################################################################  
  4. # 修改密碼  
  5. # mysqladmin -u root password "mypasssecret"  
  6. # mysqladmin -u root password oldpass "mypasssecret"  
  7.   
  8. # 登錄  
  9. mysql -u root -pmypasssecret  
  10.   
  11. -- 熱備只是備份數據庫內部的表,以及數據  
  12. use cncounter;  
  13. source /usr/local/cncounter/mysql_dump/cncounter_dump.sql.20140414_1333;  
  14. exit;  
3. crontab 定時備份

3.1 編輯備份腳本

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. ##################################################################  
  2. # crontab 定時備份  
  3. ##################################################################  
  4. #   
  5. # root 用戶,創建執行腳本  
  6. mkdir -p /root/mysql_dump/data  
  7. cd /root/mysql_dump  
  8. touch mysql_back.sh  
  9. chmod 755 mysql_back.sh  
  10.   
  11. # 編輯備份腳本  
  12. vim mysql_back.sh  
  13.   
  14. ################下面是備份腳本的內容  
  15. #!/bin/sh  
  16. # File: /root/mysql_dump/mysql_back.sh  
  17. # Database info  
  18. DB_NAME="cncounter"  
  19. DB_USER="root"  
  20. DB_PASS="mypasssecret"  
  21. # Others vars  
  22. # whereis mysqldump  
  23. # IS ` but not '  
  24. BIN_DIR="/usr/bin"  
  25. BCK_DIR="/root/mysql_dump/data"  
  26. DATE=`date +%Y%m%d_%H%M%S`  
  27. # TODO  
  28. mkdir -p $BCK_DIR  
  29. $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME \  
  30.  > $BCK_DIR/$DB_NAME.dump_$DATE.sql  

當然,執行的腳本也可以不用那麼靈活: 其中行末尾的 反斜線(\) 的意思是shell 指令換行,如果寫在單行內部,就不再需要.

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /usr/bin/mysqldump --opt -uroot -pmypasssecret cncounter \  
  2. > /root/mysql_dump/data/cncounter.dump_`date +%Y%m%d_%H%M%S`.sql  

dump出來的sql文件有可能很大,我們也可以開啓 gzip 壓縮,一般來說可以實現10倍壓縮比例:也就是講輸出到文件的內容通過管道操作符讓 gzip 程序處理一遍.

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /usr/bin/mysqldump --opt -uroot -pmypasssecret cncounter | gzip \  
  2. > /root/mysql_dump/data/cncounter.dump_`date +%Y%m%d_%H%M%S`.sql.gz  


3.2 添加到crontab

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. # 添加到crontab  
  2. crontab -e  
  3.   
  4. # 添加一行,root用戶不需要指定執行的用戶名,ESC,wq  
  5. 1 1 * * * /root/mysql_dump/mysql_back.sh  
  6.   
  7. # 不一定需要重啓crontab服務  
  8. # service crond restart  
3.3 crontab 簡單說明

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. # cat /etc/crontab   
  2. SHELL=/bin/bash  
  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin  
  4. MAILTO=root  
  5. HOME=/  
  6.   
  7. # For details see man 4 crontabs  
  8.   
  9. # Example of job definition:  
  10. # .---------------- minute (0 - 59)  
  11. # |  .------------- hour (0 - 23)  
  12. # |  |  .---------- day of month (1 - 31)  
  13. # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...  
  14. # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat  
  15. # |  |  |  |  |  
  16. # *  *  *  *  * user-name command to be executed  
可以發現,crontab 的執行週期有5個部分組成,其中第一個是分鐘數,第二個是小時數,第三個是一個月中的第幾天。。。 如果是 * 就表示每天都會調度。

user-name 部分,如果需要以其他用戶調度,則可以指定,否則不能指定,比如 root 用戶就不能指定 root,否則有調度日誌,但是沒有實際執行。


發佈了20 篇原創文章 · 獲贊 2 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章