加入crontab定時任務,每天執行。達到的效果是:每天備份資料庫到指定目錄,刪除10天前備份的檔案。
以下是指令碼內容:
| 代碼如下 |
複製代碼 |
#!/bin/bash mysql_host="127.0.0.1" mysql_user="root" mysql_passwd="********"
back_dir="/www/backup/database/" ignore_db="information_schema|mysql|performance_schema" db_arr=`mysql -u${mysql_user} -p${mysql_passwd} -h${mysql_host} -Bse "show databases;" | grep -vE "(${ignore_db})"` datetime=$(date +%Y-%m-%d-%H_%M_%S) for dbname in ${db_arr} do mysqldump -u${mysql_user} -p${mysql_passwd} -h${mysql_host} ${dbname} | gzip > ${back_dir}${dbname}-${datetime}.sql.gz done find ${back_dir} -mtime +10 -name "*.*" -exec rm -rf {} ; |
在阿里雲的伺服器crontab自動備份資料庫無法正常產生備份檔案。
檢查一遍,發現所有的設定都沒有錯啊,真奇怪啊,這指令碼在我的美國VPS上都啟動並執行妥妥的。
並且,我直接執行那個.sh檔案運行指令碼,一切正常哦。難道crontab根本沒執行?
於是我把crontab設定成一分鐘後執行,並在後面加上:> /web/test.log 2>&1
一分鐘後,我查看產生的記錄檔,發現了問題的所在:
| 代碼如下 |
複製代碼 |
mysql -u${mysql_user} -p${mysql_passwd} -h${mysql_host} mysqldump -u${mysql_user} -p${mysql_passwd} -h${mysql_host} ${dbname} |
上面這兩條語句片段,mysql和mysqldump都無法識別,於是改成:
/usr/local/mysql/bin/mysql 和 /usr/local/mysql/bin/mysqldump (我的mysql安裝目錄是/usr/local/mysql)
問題解決了,這應該是環境變數的問題吧。