さくらインターネットでmysqlの自動バックアップ
さくらインターネットのレンタルサーバーは非常に高機能なんですが、バックアップ機能だけはありません。(私が確認する限り。)
HTMLやGIF、PHPなどのファイルはローカルのPCで持っているから大抵は大丈夫だとして、データベース系は間違って全部消してしまった日には目も当てられません。。定期的にバックアップを取るようにしていますが、忘れることもよくあるので、自動バックアップスクリプトをcronに登録しときました。
よくあるスクリプトですが、参考までに張っておきます。3日間分のMYSQLのバックアップデータを保持します。mysqlのID/PWなどは書き換えて下さい。
何もバックアップなんてしてない!という人は、自己責任で使ってみて下さい。
#!/bin/shPATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
KEEPDAY=3
TODAY=`date +'%y%m%d'`
DBDUMP_FILE=mysql.$TODAY
RMFILE=mysql.`date -v -"$KEEPDAY"d +%y%m%d`.gz
HOME_DIR=/home/user_name
BACKUP_DIR=$HOME_DIR/backupcd $BACKUP_DIR
mysqldump -Q --host=mysql?.db.sakura.ne.jp \
--user=user_name --password=database_passwd database_name >\
$DBDUMP_FILEgzip $DBDUMP_FILE >/dev/null 2>&1
if [ $? != 0 -o ! -e $DBDUMP_FILE ]; then
echo "SUCCESS! MAYBE!"
rm -f $RMFILE
exit 0
fi
使用手順としては、最初にホームディレクト配下に、backupフォルダを作っておいて、このシェルスクリプトも適当な場所に設置。
次に、さくらインターネットの管理画面>cron設定で、「/home/user_name/シェルスクリプトの場所」を登録すればOKです。1日1回もやっておけばよいでしょう。シェルスクリプトの実行権は705じゃないと、さくらでは動かないのでご注意を。






コメント
RMFILE=mysql.`date -v -"$KEEPDAY"d +%Y%m%d`.gz
は正しくは
RMFILE=mysql.`date -v -"$KEEPDAY"d +%y%m%d`.gz
です。
期日切れのファイルが削除されませんでした。
投稿者: joseph | 2007年07月28日 01:34
>josephさん
ありがとうございます。typoしておりました。お恥ずかしい限りです。早速修正しました。
投稿者: yosuke | 2007年07月28日 01:51
はじめまして。
シェル作成や、さくらインターネットのCronに関して調べていたところ、訪問させていただきました。
物真似で作成してみたのですが、ちょっとCron自体が動いておりません。
もしお時間が空いているときにでもご教授いただけたら幸いです。
以下のようにサンプルシェルを自分用に変更致しましたが、他に変更点はありますでしょうか?
修正箇所はすべて、<>でくくってあります。
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
KEEPDAY=3
TODAY=`date +'%y%m%d'`
DBDUMP_FILE=mysql.$TODAY
RMFILE=mysql.`date -v -"$KEEPDAY"d +%y%m%d`.gz
HOME_DIR=
BACKUP_DIR=$HOME_DIR/
cd $BACKUP_DIR
mysqldump -Q --host=mysql.db.sakura.ne.jp \
--user= --password= >\
$DBDUMP_FILE
gzip $DBDUMP_FILE >/dev/null 2>&1
if [ $? != 0 -o ! -e $DBDUMP_FILE ]; then
echo "SUCCESS! MAYBE!"
rm -f $RMFILE
exit 0
fi
また、Cronに設定する際も、実行権限を705にして、
/home//backup.sh
の指定でよろしいでしょうか?
いきなりの質問で大変恐縮です。
投稿者: tom | 2007年08月24日 18:35
すいません、半角の<>内が全て反映されておりませんでした。
全角にして再投稿致しました。
失礼致しました。
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
KEEPDAY=3
TODAY=`date +'%y%m%d'`
DBDUMP_FILE=mysql.$TODAY
RMFILE=mysql.`date -v -"$KEEPDAY"d +%y%m%d`.gz
HOME_DIR=<自分のホームディレクトリ>
BACKUP_DIR=$HOME_DIR/<バックアップフォルダのパス>
cd $BACKUP_DIR
mysqldump -Q --host=mysqlDBの番号>.db.sakura.ne.jp \
--user=<ユーザー名> --password=<パスワード> <データベース名(ユーザー名と同じ> >\
$DBDUMP_FILE
gzip $DBDUMP_FILE >/dev/null 2>&1
if [ $? != 0 -o ! -e $DBDUMP_FILE ]; then
echo "SUCCESS! MAYBE!"
rm -f $RMFILE
exit 0
fi
Cron設定
/home/<バックアップフォルダまでのパス>/backup.sh
投稿者: tom | 2007年08月24日 18:39
>tomさん
はじめまして。cronが動かないのは、(おそらくですが)明示的にシェル起動を記していないためと思われます。
/bin/sh /home/<バックアップフォルダまでのパス>/backup.sh
で如何でしょうか。
投稿者: yosuke | 2007年08月24日 22:36
ご返信有難うございます(^.^)
上記を試してみましたが、それでも動いていないみたいです。
そもそも、Teratermでログインし、実行しようとしてもこんな風のエラーが返ってきてしまっているのです。
前にあげたサンプルシェルの変更点は先のコメントで書いた部分の変更点でよろしいのでしょうか?
たびたびお手数お掛け致します。
%/bin/sh backup.sh
: not found
d: Cannot apply date adjustment
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]
: not found
/www/<パス>
: not found
mysqldump: not found
--user=<ユーザ名>: not found
: not found5
: not found
backup.sh: 17: Syntax error: Bad fd number
投稿者: tom | 2007年08月25日 12:54
>前にあげたサンプルシェルの変更点は先のコメントで書いた部分の変更点でよろしいのでしょうか?
サンプルシェルは、コメントでご指摘頂いてから修正したので、そのままで動くはずでしたが、環境依存によって動かないのでしょうか?
ちなみに私が利用しているのは「FreeBSD 6.1」というOSのようです。OSのバージョンによってdateのオプション等が違うのでしょうか。
サンプルスクリプトを再度実行してみましたが、特に問題なく動いています。
エラーを見た感じだと、mysqldumpがないというエラーが出ていたりするので、そのあたりも気になります。
which mysqldump
などして、確かめていただけますか?
通常のさくらレンタルサーバーですと、/usr/local/bin/mysqldumpあたりに入っていると思います。
投稿者: yosuke | 2007年08月25日 22:35
yosukeさん
いつも、ご丁寧なご返答、有難うございます!
mysqldumpの場所はおっしゃるとおりの場所でした。
mysqldumpに限らず、Teratermから簡単なシェルスクリプトを実行しようとしても、not foundえエラーが多発する現象のようです。
yosukeさんのスクリプトではなく、当方環境に問題がありそうですすので、さくらに聞くなり、再度調査してからまた試してみます。
本当に有難うございました。
投稿者: tomo | 2007年08月26日 18:55
お力添えできずに、申し訳ありません。環境依存でもなさそうでしたら、またご質問下さい。よろしくお願いします!
投稿者: yosuke | 2007年08月26日 19:33
はじめまして葱といいます。
sh使わせていただきました。
これいいです(゚∀゚)
多分ですが・・
tomさんが実行できない理由は
改行がLFになっていないか
BACKUP_DIR=$HOME_DIR/home/negi/backup
で指定しているときに
mysqldump -Q --host=mysqlDBの番号>.db.sakura.ne.jp \
--user=<ユーザー名> --password=<パスワード> <データベース名(ユーザー名と同じ> > /home/negi/backup/\
$DBDUMP_FILE
/home/negi/backup/\
が入っていないような気がしました。
投稿者: 葱 | 2007年10月11日 23:06
gzip /home/negi/backup/$DBDUMP_FILE >/dev/null 2>&1
抜けてました(;´д`)ゞ
投稿者: 葱 | 2007年10月12日 00:59
このshを利用させていただいていたのですが、最近エラーが出るようになりました。
調べたところ、サーバがバージョンアップして実行側のサーバがmysql4.0→mysql5.0に変更になったのが原因みたいでした。
shのmysqldump の部分を mysqldump-4.0に修正すると今まで通りにうまく行くみたいです。
投稿者: 市川 | 2009年04月11日 09:43
お客さんたちも大好評です:
いい物がたくさんありますので、気に入ってます!
販売(LOUIS VUITTON)、(CHANEL)、(GUCCI)、(HERMES)、(COACH)
◆スタイルが多い、品質がよい、価格が低い!
◆当社の商品は絶対の自信が御座います。
↓↓↓
■○○HP: http://www.aaa-brand.com
投稿者: AAA-brand | 2009年12月26日 15:11