Help us understand the problem. What is going on with this article?

さくらのレンタルサーバ(スタンダードプラン)でmysqldumpを自動化する

More than 1 year has passed since last update.

経緯

中小企業や個人ユースでお馴染みさくらレンタルサーバ(スタンダードプラン)。
今までメンテのときについでで手動バックアップを取っていたが、かえって面倒くさくなってきたのでバックアップも真面目に取ることにしました。普通は自動化しているのが当たり前だろとかいうのはその通りです、すいません。

さくらのレンタルサーバでデータベースを自動的にバックアップして、いざというときに復元する
こうなる前に。まじで自分もいつかやる自信あります。

なお、さくらの場合、サーバコントロールパネルからcronを設定できるのは5個までという制限がありますが、個人に毛が生えたクラスの案件でcronを10個も20個も動かすとかそんなに無いので、ここは素直にコントロールパネルで設定してみることにします。

バックアップ自動化の手順

1. ディレクトリを作成

設置場所は、/home/アカウント 以下好きなように決めて良いと思いますが、ここでは下記のように設定しました。

/home/アカウント/www と同じ階層にバックアップ用ディレクトリを作成。

$ mkdir backup

同じ階層にスクリプト用ディレクトリも作成して移動。

$ mkdir script && cd ./script

2. シェルスクリプトを作成

ファイルを作成。今回はシェルスクリプトにしました。
(PHPスクリプトで動作させる方法もありますが、Qiita上でもちらほらと「大変だった」というような体験談が見受けられますので、ちょっと面倒かもしれません)
さくらのレンタルサーバのCRONでmysqldump、がすんなりできなかったお話

※「アカウント」「パスワード」「ホスト名」「データベース名」は適宜お使いの情報に置き換えてください。

$ vi backup.sh
mysql_backup.sh
#!/bin/sh

# MySQL のバックアップ

# バックアップの保存期間(1ヶ月)
period=31

# バックアップを保存するディレクトリ
dirpath='/home/アカウント/_backup'

# ファイル名
prefix="mysql_"
filename="${prefix}`date +%Y%m%d`.sql.gz"

# mysqldump
# gzipで圧縮する
/usr/local/bin/mysqldump -u アカウント -pパスワード -h ホスト名 データベース名 | gzip > $dirpath/$filename

# パーミッションの変更
chmod 0600 $dirpath/$filename

# 古いバックアップファイルを削除
oldfile="${prefix}`date -v-$(($period + 1))d +%Y%m%d`.sql.gz"
rm -f $dirpath/$oldfile                              

もしくはローカルでファイルを作成して、上記コピペ後 /home/アカウント/script にアップロード。

3. スクリプトのパーミッションを変更

スクリプトにはDBの接続パスワードが書かれていますので、他のユーザからはファイルの中身を覗けないようにしておきます。

$ chmod 0600 mysql_backup.sh

4. 動作確認してみる

$ sh /home/アカウント/script/mysql_backup.sh
$ ls -al ../backup/
# 下記のファイルができていればOK
mysql_20181125.sql.gz

# 問題なければ一旦削除
$ rm -rf mysql_20181125.sql.gz

5. cron設定

  1. 「サーバコントロールパネル」画面左のメニューから「CRONの設定」メニューをクリック。
    cron_menu.png

  2. 「CRON設定一覧」画面右下の「>> 新規項目の追加」リンクをクリック。
    cron_default.png

  3. 「実行コマンド」「実行日時」を入力。毎日04:00に実行したいので下記のように指定。入力が完了したら、「送信」ボタンをクリック。(postmasterにメールを飛ばしたい場合は、 1>/dev/null を書かないでおく)
    image.png

    項目名 設定値
    実行コマンド sh /home/アカウント/script/mysql_backup.sh 1>/dev/null
    *
    *
    4
    0
    曜日 全て未選択
  4. 「CRON設定一覧」で今設定したコマンドが登録されていることを確認。
    cron_list.png

  5. 一晩待ってみましよう。バックアップが走っていれば、/home/アカウント/backup ディレクトリにバックアップファイルができているはず。

おまけ

sh のパスを確認

$ which sh
/bin/sh

実行コマンドに単にファイル名だけ書いて実行させたい場合

$ chmod 0700 mysql_backup.sh
項目名 設定値
実行コマンド /home/アカウント/script/mysql_backup.sh 

gzip圧縮したファイルを解凍せずに中身を見る場合は以下コマンド。

$ zcat xxxxx.sql.gz

解凍する場合は以下コマンド。

$ gunzip xxxxx.sql.gz
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away