さくらのレンタルサーバーを外部からバックアップする方法のメモ。
現在私はさくらのレンタルサーバーのスタンダードコースを利用していますが、このサーバーのデータを外部、具体的にはローカルにあるLinuxのサーバーにバックアップしたいなと考えてちょっとやってみました。方法はssh経由でtarしてローカルに落とす方向で。
ローカルのLinux
ローカルのLinuxはScientificの6.1を利用しています。sakura-backupというユーザーを存在させ、/home/hogehoge-backup/bak/hogehoge-20120308.tar.gz というように作成して行きます。
SSHの自動ログイン設定(鍵の作成)
※作業は全てバックアップ用のサーバーから行います
バックアップサーバー側で下記のコマンドを実行します。
この時必ずバックアップを実行するユーザーでログインしておいて下さい。
$ ssh-keygen
質問がいくつか出てきますが全て何も入力せずにEnterキーを押します。
するとホームディレクトリ ~/.ssh/以下にid_rsa、id_rsa.pubが作成されます。
id_rsa.pubをの内容をさくらの~/.ssh/authorized_keysに書き加えます。
この操作もバックアップ用サーバー側から行えます。
$ cat ~/.ssh/id_rsa.pub | ssh XXXX@yyy.sakura.ne.jp "echo - >> ~/.ssh/authorized_keys"
完了したら下記コマンドを実行してさくらにパスワード無しでログインできるか試してみてください。パスワードを聞いてこなければ成功です。
$ ssh XXXX@yyy.sakura.ne.jp Last login: Thu Mar 8 05:46:09 2012 from XXX.XXX.XXX.XXX Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 7.1-RELEASE-p16 (SAKURA11S) #12: Mon Oct 3 17:12:59 JST 2011 Welcome to FreeBSD! %
ここまで来たら後はスクリプトを書いていくだけです。
私の場合はとりあえずこんな感じで。
#!/bin/bash
SSH_HOST="hoge.sakura.ne.jp"
SSH_USER="hoge"
BACKUP_PATH="~"
BACKUP_OUT_DIR="/var/www/hoge_backup/bak"
BACKUP_OUT_FILE="hoge-`date +"%Y%m%d"`.tar.gz"
BACKUP_MTIME="+30"
MYSQL_DBHOST="mysqlxxxx.db.sakura.ne.jp"
MYSQL_BAKDB="hoge_db1 hoge_db2 hoge_db3"
MYSQL_DBUSER="hoge"
MYSQL_DBPASS="hogehogepass"
MYSQL_BAKOUT_DIR="/var/www/hoge_backup/bak"
ssh $SSH_USER@$SSH_HOST tar cvzf - "$BACKUP_PATH" > "$BACKUP_OUT_DIR/$BACKUP_OUT_FILE"
find $BACKUP_OUT_DIR -mtime $BACKUP_MTIME -type f -exec rm -fr {} \;
for dbname in $MYSQL_BAKDB
do
ssh $SSH_USER@$SSH_HOST mysqldump --default-character-set=binary -h $MYSQL_DBHOST -u $MYSQL_DBUSER -p$MYSQL_DBPASS $dbname | gzip > "$MYSQL_BAKOUT_DIR/$dbname-`date +"%Y%m%d"`.sql.gz"
done
MySQLのデータベースについては複数指定に対応してあります。これをバックアップするサーバー側のcronに設定すれば完了です。cronで指定した分だけバックアップスクリプトが走ります。