データベースのバックアップを取得できない場合の解決方法

このQ&Aのポイント
  • データベースのバックアップを取得できない場合に困っています。バックアップ用シェルの書き方を見直す必要があります。
  • シェルスクリプトを使ってデータベースのバックアップを取得しようとしていますが、うまくいかない場合があります。
  • シェルスクリプトのどの部分を変更すれば、データベースのバックアップを確実に取得できるのでしょうか。
回答を見る
  • ベストアンサー

データベースのバックアップだけ取れない場合があって困ってます(バックアップ用シェルの書き方に関して)

以下のようなシェルをcronで実行し、バックアップを取ろうとしているのですが、データベースのバックアップだけ、うまくいく場合と抜けてしまう場合があります。 下のシェルのどの部分を変えれば、データベースのバックアップも毎回ちゃんと取ってくれるようになるのでしょうか。 ------------------------------ #!/bin/bash NAME="name" DBNAME="dbname" DBUSER="dbuser" DBPASS="dbpass" HTML="/home/test/www/" BACKUPDIR="/bakup/" mkdir -p $BACKUPDIR$NAME mkdir /tmp/backup-$NAME-`date +%Y%m%d` mysqldump --databases $DBNAME > /tmp/backup-$NAME-`date +%Y%m%d`/bk.sql -u $DBUSER --password=$DBPASS --opt ( cd /tmp/backup-$NAME-`date +%Y%m%d` ; tar cf /tmp/backup-$NAME-`date +%Y%m%d`.tar . ) ( cd $HTML; tar rf /tmp/backup-$NAME-`date +%Y%m%d`.tar . ) rm -r /tmp/backup-$NAME-`date +%Y%m%d` gzip /tmp/backup-$NAME-`date +%Y%m%d`.tar mv -f /tmp/backup-$NAME-`date +%Y%m%d`.tar.gz $BACKUPDIR$NAME find $BACKUPDIR$NAME -type f -mtime +7 | xargs rm -f ------------------------------ それでは、宜しくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.1

このスクリプトの実行中に日付が変わるって事はないでしょうね? とりあえず、rm -rでファイルを消すのを止めて状況を見たらどうですか。それバックアップした際に、mysqldumpが上手く動いていないのか、あるいはそのあとのtarあたりが変なのか区別がつくと思います。あと、無駄が多いですね。 DATE=`date +%Y%m%d` mkdir /tmp/backup-$NAME-$DATE mysqldump --databases $DBNAME > /tmp/backup-$NAME-$DATE/bk.sql -u $DBUSER --password=$DBPASS --opt tar cfz /tmp/backup-$NAME-$DATE.tar.gz -C /tmp/backup-$NAME-$DATE . -C $HTML . mv -f /tmp/backup-$NAME-$DATE.tar.gz $BACKUPDIR$NAME rm -r /tmp/backup-$NAME-$DATE で済むんじゃないですか?

yama_serv
質問者

お礼

とりあえず、色々やって解決した感じです。 以下のように変える事で、今はうまくいってるようです。なぜかよくわかりませんが… mysqldump --databases $DBNAME > /tmp/backup-$NAME-$DATE/bk.sql -u $DBUSER --password=$DBPASS --opt ↓ /usr/local/bin/mysqldump --databases $DBNAME > /tmp/backup-$NAME-$DATE/bk.sql -u $DBUSER --password=$DBPASS --opt 本当にありがとうございました!

yama_serv
質問者

補足

ご回答ありがとうございます。 無駄まで省いて頂いて、助かります! 試してみたところ、どうやらmysqldumpでファイルが書き出される前に、圧縮されてしまうようです。 mysqldumpが終わるまで次の処理はおあずけって事はできないのでしょうか。

関連するQ&A

  • 3日以前のバックアップを削除する

    /etc/crontabで以下のbackup.shを毎晩実行するのですが、 3日以前のものは毎回消していく場合は以下のような、 少し初心者的な書き方しか現在分からないのですが、 他にもし良い書き方があれば、教えていただけますでしょうか? よろしくお願いします。 #!/bin/sh DATE_1=`date -d '1 day ago' +%Y%m%d` DATE_2=`date -d '2 days ago' +%Y%m%d` DATE_3=`date -d '3 days ago' +%Y%m%d` if [ test_$DATE_2.tar.gz ]; then mv -f test_$DATE_2.tar.gz test_$DATE_3.tar.gz fi rm -f test_$DATE_3.tar.gz if [ test_$DATE_1.tar.gz ]; then mv -f test_$DATE_1.tar.gz test_$DATE_2.tar.gz fi if [ test.tar.gz ]; then mv -f test.tar.gz test_$DATE_1.tar.gz fi tar zcvf test.tar.gz /usr/local/test

  • 差分バックアップのコマンド

    今使用しているサーバのバックアップに 毎日フルバックアップで二時間もかかるんで 差分バックアップに変えようかなーとか 思ってるんですが、下のコマンドってあってます? time find /home/data -mtime -1 ! -type d -print | tar cfz /home/backup/test/backupdata-`date +%Y%m%d`.tar.gz ちなみに当日変更・新規作成したものだけバックアップしたいです。 dumpとかがいいんでしょうけど、できればtarでやりたいんです。 教えてくださいお願いします。

  • cron と FTPでバックアップ

    Turbolinux8serverを使っています。 シェルを組んでFTPサーバーにファイルをバックアップさせています。シェル単体で動かすと問題なくファイルのバックアップできるのですが、cronスケジューラーで動かすとバックアップできません。 ちなみにバックアップさせるファイルは15Gと膨大で、小さいファイル(数kbite)だとシェル単体でもcronで起動させても問題なく動きます。 cronで起動するとFTPの転送ファイル容量の制限が掛かるのでしょうか? ちなみにシェルは set `date +%Y%m%d` echo $1 cd /home/httpd/ tar cvf /backup/$1.tgz Doc ftp -i -v -n 192.168.1.1 <<END user username password cd /backup/ lcd /backup/ put $1.tgz quit END 同様の症状等で解決策をご存知の方アドバイスお願いします。

  • Linuxでバックアップのために別のハードにファイルを転送したいです。

    Linuxでバックアップのために別のハードにファイルを転送したいです。 とても困っています。どうか力を貸してください。よろしくお願いします。 下のソースを毎日実行するようにクーロンで設定しています。 下記でコメントアウトしている##ファイル転送##の処理以外は成功しています。 バックアップ用の圧縮ファイル作成と古いファイルの削除が成功しています。しかし、 同じハード内にあるのでハード自体が潰れた場合に備えて別のハードに転送したいです。 Linux初心者で調べながら作成しています。 他に必要な情報があれば教えて下さい。よろしくお願いします。 ----(↓↓↓ソースです↓↓↓)---------------------------------------- #!/bin/sh if [ -x /usr/local/pgsql/bin/pg_dump ]; then today=`date +%y%m%d` filenm="/home/backup/postgres/$1" su postgres -c "/usr/local/pgsql/bin/pg_dump $1 > $filenm$today" tar zcvf $filenm$today.tar.gz $filenm$today chown backup $filenm$today.tar.gz chgrp backup $filenm$today.tar.gz chmod 640 $filenm$today.tar.gz rm -f $filenm$today # remove old backup file oldday=`date --date '1 weeks ago' '+%y%m%d'` rm -f $filenm$oldday.tar.gz ##ファイル転送## # USERNAME='system\\backup' # PASSWORD=●●●●●●●●●●● # HOSTNAME=192.168.●●.●● #ftp -n <<EOL #open ${HOSTNAME} #user ${USERNAME} ${PASSWORD} #binary #cd backup #put $filenm$today.tar.gz #bye #EOL fi exit 0 ----(↑↑↑ソースです↑↑↑)----------------------------------------

  • Linuxのバックアップシェルについて教えて下さい

    Linuxで、簡単なバックアップのシェルを作成する必要があり、今勉強を始めました。 これから確り勉強しますので、参考としてやりたいことのスクリプト例を教えて頂けませんでしょうか。 やりたいことは、Linuxサーバー内のフォルダAをファイルサーバー上のフォルダBへ日次でコピーです。 この時、フォルダAまでのパスには、日付名が入っており毎日変わります。シェル実行日の1日前のデータをコピーしたい場合、まずパスの作り方がわかりません。 PATH=/usr/local/sbin:/usr/bin:/bin #昨日の日付の取得 YESTERDAY= DATE +%Y%m%d #バックアップ対象のパス取得 BACKUP-PATH= 1G/昨日の日付/log/ ↑              ここがわかりません。$YESTERDAYと入れてみましたがダメでした。 #バックアップ先のパス取得 TARGET= \\filseerver/1G/日付/log ↑      こんな感じで外部の保存先のパスはかけるのでしょうか? バックアップ処理 ○○日前のデータは削除 全体ではこんな感じになると思うのですが、具体的なスクリプトの説明をお願いできますでしょうか。 またよい参考サイトがあれば是非教えて下さい。 宜しくお願い致します。

  • cronでGPGが使えない

    次のようなデータベースをバックアップするシェルスクリプトを作成しました。 #! /bin/sh BACKUP_DIR=/home/backup FILE_NAME=testdb`date +%Y%m%d`.sql mysqldump -udumpuser -pパスワード testdb > ${BACKUP_DIR}/${FILE_NAME} gpg -r ○○@○○ -e ${BACKUP_DIR}/${FILE_NAME} rm -rf ${BACKUP_DIR}/${FILE_NAME} sqlbackup.shと名前を付けてrootで実行してみたところ問題なくバックアップできました。 しかし、/etc/crontabに 0 0 * * * root /bin/sqlbackup.sh と記述して実行してみたところ gpg: ○○@○○: skipped: public key not found となってしまいました。 rootで「gpg --import」で○○@○○の公開鍵をインポートし、「gpg --edit-key」で信頼度をI trust ultimatelyにしています。 どのような原因が考えられますでしょうか。 よろしくお願いいたします。

  • crontabでtarを実行した際、エラーではないものは出力されずに実行できるコマンドを教えてください

    crontabでシェルスクリプトを立ち上げて自動バックアップをさせているのですが、crontabのレポートメールに tar: Removing leading `/' from member names と出ます。 実行内容は tar zcvf /home/__ArchiveFolder/backup_`date +%Y%m%d`.tar.gz /home/public_html なのですが、サイレントモードで実行というのでしょうか、このメッセージのメールを送られてこないように出来るのでしょうか? 言い換えますと、path名の頭に / があると、展開時に面倒が起こるから、/を取り除いてくれていいのですが、いちいちレポートしなくてもいいので、quietモード(manにはありませんでした)のようにするにはどうしたら良いのでしょうか?

  • MySQLデータベース自動バックアップ

    CentOS5でMySQLをインストールし、MySQLの全てのデータベースを サーバ内の他のディレクトリにバックアップするためのスクリプトを作成しています。 http://centossrv.com/mysql-backup.shtml このページを見ながらその通りにしているのですが、スクリプトを実行した時に、 ./mysql-backup.sh: line 9: rm: command not found ./mysql-backup.sh: line 10: mkdir: command not found ./mysql-backup.sh: line 12: ls: command not found ./mysql-backup.sh: line 12: grep: command not found というエラーが出て実行ができません。 どのように対処すれば良いでしょうか。

  • Passwordを設定したPostgreSQLのバックアップなどができ

    Passwordを設定したPostgreSQLのバックアップなどができない。 PostgreSQLのバックアップを行おうとしているのですがバックアップSHELLを実行 するとパスワードを聞いてきます。 pg_dump -Udbuser -s DBANME > /DbBkup/dbbackup.out そこで実行ユーザのHOMEディレクトリに.pgpassを置き localhost:*:DBNAME:dbuser:dbpass と登録し、実行しところ、これでもパスワードを聞いてきます。 最終的にはcronで実行したいのですが、解決方法がわかりません。 お願いいたします。

  • メールのバックアップ方法

    RedHatLinux9でmail&webサーバーを構築してます。 毎日、午前3時に /var/spool/mailと/var/www/htmlをテープにバックアップしてるんですが どうやらその時にメールの送受信をしているとバックアップに失敗しているようでした。 今までは backup.shというのを作りcronに登録してます。 記述内容は tar cvf /dev/st0 /var/spool/mail /var/www/html です。 で、失敗したのでそれならと、まず/var/spool/mailを/root/backupにコピーしてからバックアップしようと mkdir backup cp -f /var/spool/mail /root/backup tar cvf /dev/st0 /var/spool/mail /var/www/html /root/backup としました。 でもこれでもうまくいかなかったようです。 エラーログは以下のようになっています。 mkdir: cannot create directory `/root/backup': File exists cp: omitting directory `/var/spool/mail' tar: /dev/st0: Cannot open: No such device tar: Error is not recoverable: exiting now 一度失敗してから テープの調子も悪くなってきているようです。