CORESERVER や XREA で MySQL を自動でバックアップしてメールで送る

ここ 2 年ほど、毎日自動で MySQL をバックアップしています。今日はそれについて。
キッカケは今から 2 年半ほど前、「データベース使用中? – MMRT daily life」という記事を見て、データベースがお亡くなりになる怖さを感じました。バックアップをこまめに取ればいい話ではあるのですが、手動では中々面倒で…。自動化できたらなーとズボラな事を思っていたら、「hiromasa.another :o)» Blog Archive » WordPress の MySQL バックアップ」という記事が。

hiromasa さんの記事では、シェルによるバックアップ方法が紹介されていました。

シェルによるバックアップの特徴

  • WP のデータベースのバックアップだけなら、簡単さは wp-dbmanager などの WP プラグインを利用する方法に負ける
  • 記事数が多くデータベースが大きい場合にも、シェルによるバックアップなら問題なくバックアップ&データベースを戻せる
  • WP 以外の用途の MySQL でも OK
  • タイムアウトしてしまって phpMyAdmin からでは上手くバックアップできない場合にも、シェルからなら大丈夫
  • 自動化するには、シェルスクリプトを cron で動かす必要がある

融通のきく方法なので、知っておいて損はないかと思います。

メールで送れたら良いな

元々 hiromasa さんのところに載っていたシェルスクリプトでは、サーバ上に MySQL のバックアップファイルを作り、指定の日数分を超えると削除されるようになっています。これに少しだけ手を加えて、メールでバックアップファイルを送れるようにしてみました。メールで送る場合には perl とあわせて使っていく方法などもありますが、私はシェルだけで終わるようにしてます。

「#メール送信」と書いてある部分とその下の一行が私のほうで追加した部分です。この部分の内容は、以下のようになっています。

これでサーバに MySQL のバックアップファイルが作られ、指定したメールアドレスに「mysql backup 日付」という件名でそのバックアップファイルが添付されたメールがくるようになります。このメールは私は gmail に送って、ラベルを付けて受信トレイはスキップさせるようにしています。

※Thunderbird で見ると添付ファイル部分がうまくデコードされないようですが、gmail だと上手いことしてくれます。

もっときっちりと、MIME を使ったメールを…と思う場合は perl と組み合わせたりするのが良いかと思います。

使い方

まずはファイルを設置

  1. 上記スクリプトの設定箇所を自分の環境にあわせて書き換え、backup.sh という名前で保存。ファイルの改行コードは LF(UNIX)。
  2. FTP でサーバに接続して、public_html と同じ階層に「backup-mysql」というディレクトリを作成。このディレクトリに backup.sh を入れてパーミッションを 700 に設定。

動作をテスト

まずは、SSH クライアントからコマンドをうってテストしてみます。

  1. XREA / CORESERVER の管理画面>「ホスト情報登録」ページへ行き、「SSH 登録」ボタンを押してホストを登録しておく。
  2. SSH クライアント(teraterm + SSH や、Poderosa や、putty など)で、自分のサーバ(s1.coreserver.jp 等)に接続。
  3. 下記のように SSH クライアントに入力します。

    cd で backup-mysql ディレクトリに移動。

    ls -laF でファイル一覧を表示。打ち込むと、backup-mysql ディレクトリ内のファイルがズラズラっと表示されます。その中に backup.sh があるか確認。

    backup.sh を実行。

    ls -laF でファイル一覧を表示。ズラズラっと表示されたファイルたちの中に、mysql.○○○.tar.gz とあれば OK です。

  4. FTP で先ほど作られた mysql.○○○.tar.gz をダウンロードして、解凍ソフトで開いて中の .dump ファイルの内容を確認。

CRON を設定

自動で backup.sh を実行させるように、cron に設定します。

  1. XREA / CORESERVER の管理画面>「CRON ジョブ」ページへ行く。
  2. 「/virtual/ユーザー名/」と書いてある部分の右側、細長い入力欄に「backup-mysql/backup.sh」と記入。時間は分、時、にそれぞれ任意のものを入れて、あとは * としておけば、1 日 1 回、その時間に backup.sh が実行される。

あとは、メールが指定した時間にくるか確認して完了です :)

復活の呪文は?

バックアップしてあった .dump ファイルからデータベースのリストアを行います。間違っても現在利用中のデータベースに対しては行わないでくださいね。

  1. データを戻すためのデータベースを空の状態で作成しておく。
  2. hiromasa.another :o)» Blog Archive » WordPress の MySQL バックアップ』より引用

    上記のコマンドを SSH クライアントからサーバへ接続して入力。パスワードを聞かれるので MySQL のパスワードを入力。

おまけ:WP プラグイン wp-dbmanager で空ファイルが送られてくる場合

XREA / CORESERVER は php がセーフモードで動いているため、wp-dbmanager という WP プラグインを利用した場合に問題があります。メールでバックアップファイルが送られてくるように設定しても、バックアップファイルが空状態になるのです。

これを回避するには、wp-cron.php を cgi として動かしてあげる必要があります。

WP のインストールディレクトリ(wp-cron.php のある場所)にある .htaccess に上記の内容を追記すれば OK です。XREA / CORESERVER のセーフモードに関しては、以前書いた「XREA で WordPress ファイルアップロード機能を利用する | Numb.」をよろしければどうぞ。

ちなみに、この記事は WordPants に寄稿しようかと思っていた内容だったりします。短くまとめて書く能力が足りず断念!そのうち書けたらいいなぁ。

1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です