さくらのレンタルサーバーを外部からバックアップする方法のメモ。
現在私はさくらのレンタルサーバーのスタンダードコースを利用していますが、このサーバーのデータを外部、具体的にはローカルにある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で指定した分だけバックアップスクリプトが走ります。