それなりブログ

とあるWebエンジニアのそれなりのブログ、JavaScript/Node.js/Python/PHP/ゲーム作成 など

[MySQL,cron,shell] cron用mysqldumpラッパなシェルスクリプト

「mysqldumpコマンドとcronコマンドを使ってデータベースの自動バックアップ」を行う
というのは良くあることだと思いますが、
自分の場合は、その時々でシェルスクリプトを書いており、
かつ、程よい具合にバックアップされるように、cronスケジュールを複数指定していたりしていて、非常に面倒な作業になってしまっていました。

最近もまた、同じような設定をする必要に迫られたため
その内モトは取れるだろうと予測して、いっそのこと専用のシェルスクリプトを作成してみました。

mysqldump4cron.sh

※設定値を軽く解説
WEEKLY_TARGET_DAY_OF_WEEK … 週次バックアップを行う曜日
MONTHLY_TARGET_DAY … 月次バックアップを行う日付
DAYLY_MAX_LIFE … 日次バックアップを保持する日数
WEEKLY_MAX_LIFE … 週次バックアップを保持する日数
MONTHLY_MAX_LIFE …月次バックアップを保持する日数
※すぐに完成するだろうと思ったら、なんと4時間も掛かった・・・。FreeBSDで作業してたからdateが動かなくて微ハマりしてしまった。結局、現在はFreeBSDを捨てて非対応になっていますが、対応する場合は、コチラ参照

mysql-zrmとか専用ツールを使えよ、って話もありますが
自前のサーバとかWebサービスとか、受託であっても別段の理由が無ければそこまでせんでも、と思います。
使い慣れたコマンドなので気軽だし、ボーンシェル+ダンプコマンドなので可搬性に優れるし。

もし、他にいい方法をご存知の方がいらっしゃいましたら、
教えていただけるとうれしいです。


8 Responses to “[MySQL,cron,shell] cron用mysqldumpラッパなシェルスクリプト”

  • pasela より:

    @licenseが抜けてるよ!

  • kjirou より:

    こん畜生!うれしいじゃないか!
    聞いただけとか言ったら
    穴掘って自ら埋まるッ!!

  • pasela より:

    コメントがローマ字なのと、デイリーがdaylyなのがキュートだよね

  • kjirou より:

    コメントがローマ字なのは自信を持って仕様です
    daylyがdailyじゃないのは・・・
    ・・・まぁ、出力時のディレクトリ名はdailyになってるから
    そのままでいいや・・・。

  • sato より:

    ありがたく使わせて頂いております。
    文字コードを指定してバックアップすることは可能でしょうか。
    下記のようにしてみたのですが、ファイルサイズがゼロのsqlファイルが生成されてしまいました。
    MYSQLDUMP4CRON_BASE_CMD=$MYSQLDUMP_CMD’ -h’$MYSQL_HOST’ -u’$MYSQL_USERNAME’ -p’$MYSQL_PASSWORD’ –default-character-set=utf8’$MYSQL_DATABASE
    アドバイス頂けると助かります。

  • kjirou より:

    ご利用ありがとうございます。
    質問の件ですが、100%の自信がある回答ではないのですが、
    「MySQLデータベースを構築した時(一番最初すね)に指定した文字コード」
    以外で、保存する方法はないと思います。
    「Linux に nkf とか文字コードを変換するコマンドがあるじゃん!」
    と思われるかもですが、こういうので無理矢理変換しても、
    MySQLデータベース内に「このデータベースの文字コードは○○だよ」という設定値みたいなものを持ってしまっているので、展開した時に壊れてしまいます。

  • sasaki2go より:

    WEBアプリのファイルも同時にアーカイブするように改造して利用させていただいております。
    weekly と monthly のバックアップをとるのにそれぞれ個別に mysqldump してますが、daily のファイルをコピーするのでもいいですよね。

  • kjirou より:

    sasaki2goさん
    ご利用ありがとうございます。
    >daily のファイルをコピーするのでもいいですよね。
    その通りです・・・。
    そもそも、weeklyやmonthlyの設定を入れた理由は、
    「昔の時点のデータが残ってるといいかな?」
    という半端な理由なので、今は無くてもいいようなものだと考えています。


コメントを残す

メールアドレスが公開されることはありません。

Categories

Archives