サイトアイコン IT NEWS

エックスサーバーでMySQLデータベースを自動バックアップする方法

xserver-mysql-backup

当サイトでも毎度お馴染みのエックスサーバー
実は、MySQLデータベースバックアップ自動で取っているとのこと。
さすが!これで何か問題が起こっても安心安心…と高を括ってたら、思わぬ落とし穴が!
バックアップデータを貰うための手数料が高いこと。
エックスサーバーの公式サイトには以下のように書かれています。

バックアップの必要性

自動バックアップ機能 | レンタルサーバー【エックスサーバー】

サーバー上のデータは、1日1回、バックアップ専用サーバーに自動でコピーしており、全サーバープランともサーバー領域のWeb・メールデータ「過去7日分」、MySQLデータベース「過去14日分」のデータを保持しています。

ふむふむ。
過去14日分もデータを保持してくれるのか。
ところがどっこい。

手数料
バックアップデータの提供の際には、下記の通りデータ提供1回ごとに手数料が必要です。
サーバー領域データ … ご指定の日のWeb・メールデータ(税込10,800円)
MySQLデータベース … ご指定の日の特定のデータベース1つ(税込5,400円)

なにぃ!?
私のデータですよ!w
データが破損して困っていることをいいことに、まるで人質(データ質)のような金額ですね。
しかし、安定してバックアップの管理費として毎月請求されるわけではなく、有事の際のみと考えれば良心的と言えるかもしれません。
(サーバー代に含まれてるかもしれませんけど)

MySQLのバックアップ

と言う訳で、自分でできることは自分でしましょう。
実際には「mysqldump」コマンドを利用してMySQLダンプを取ります。

準備するのも

データベース接続に必要な情報と、保存先フォルダを作成しておきましょう。
保存先フォルダはエックスサーバーバックアップデータを提供する際の受け渡しフォルダでもある「/home/backup」とします。
データベースの接続情報は、サーバーパネル > MySQL設定 をご覧ください。

ホスト名
下の方に記載しているMySQL5.X ホスト名:mysqlXXXX.xserver.jpです。
ユーザー
バックアップ対象データベーズのアクセス権所有ユーザです。
パスワード
MySQLユーザを追加する際に自分で設定したパスワードです。
ユーザー
バックアップ対象データベース名です。

バックアップ用シェルスクリプト作成

自動バックアップを行うには、エックスサーバーcron機能を使いますので、そこで定期実行させるシェルスクリプトを作成します。
[]の中には上記で準備したものを使います。

#!/bin/bash
LANG=en_GB.UTF-8
mysqldump -h[ホスト名] -u[ユーザー名] -p[パスワード] [データベース名] > ~/backup/dump_$(date +%y%m%d).sql
rm -f ~/backup/dump_$(date --date "7 days ago" +%y%m%d).sql

解説・注意点

文字コードをUTF-8で指定。
mysqldumpコマンドを使い、ファイル名/home/backup/dump_[今日の日付].sqlバックアップしています。
[今日の日付]はyymmdd形式です(例:180411)
オプションの後ろ、特に-pとパスワードの間にはスペースを空けないでください。
バックアップデータによるサーバーの容量圧迫を防ぐため、rmコマンド7日以前バックアップデータを削除しています。
保持する期間を変更したい場合は、7を変更してください。

cronで毎日午前3時にバックアップする

なぜ午前3時かと言うと、処理中はサーバーの負荷が上がるので、クライアントにも影響が出ます。
サーバーと利用者双方に負担がかからないよう、アクセスの少ない深夜に行いましょう。
サーバーパネル > Cron設定 で「CRONの追加」タブをクリックし、以下のように入力します。

0
時間 3
*
*
曜日 *
コマンド /home/[サーバーID]/backup/backup.sh
コメント (任意)

[サーバーID]はサーバー契約した際のIDです。
インフォパネルのご契約一覧で確認できます。cronの追加をすると、このようになります。

0 3 * * * /home/[サーバーID]/backup/backup.sh

*(アスタリスク)は毎~と言う意味で、上記の例だと毎月毎日3時0分に実行します。
例えば、毎月1日の午前4時30分の月1回バックアップを取りたい場合は、以下のようになります。

30 4 1 * * /home/[サーバーID]/backup/backup.sh

以上。
今回はデータベーズバックアップだけでしたので、次はファイルをまるごとバックアップしたいです。

モバイルバージョンを終了