coreserverをリモートから自動バックアップするメモ
10月 10th, 2008 admin Posted in linux, Ruby | コメントは受け付けていません。
coreserverというレンタルサーバのデータのバックアップをとるようにしたメモ。
シェルが使えるのでファイルとかはrsyncでとれるのだけど、DBのファイルはみれないのでmysqldump(mysqlhotcopyは使えない。)などを使ってユーザのディレクトリにデータをもってくる必要がある。シェルスクリプトをcoreserverにおいてcronでバックアップしてもいいのだけど、バックアップ関連のスクリプト類は手元で一括管理したいのでRuby経由でSSHしてmysqldumpをするようにした。
シェルが使えて年間5000円のcoreserverはすごいとおもう。
(1)DBのデータを全部ダンプ
RUBY:
-
require 'rubygems'
-
require 'net/ssh'
-
-
host = "ホスト名"
-
user = "ユーザ名"
-
key = "秘密鍵の場所"
-
mysqldump = "/usr/local/mysql/bin/mysqldump"
-
path = "/virtual/username/"
-
databases = [
-
{:db_name => "aaaa", :id => "username", :password => "pass"},
-
{:db_name => "bbbb", :id => "username2", :password => "pass2"},
-
]
-
-
-
Net::SSH.start(host, user, :keys => [key], :passphrase => "") do |ssh|
-
databases.each do |db|
-
command = sprintf('%s -u %s --password=\'%s\' %s> %s/%s.dump ',mysqldump, db[:id], db[:password], db[:db_name], path, db[:db_name])
-
ssh.exec!(command)
-
end
-
end
(2)rsyncでファイルをローカル(バックアップマシン)に移動
CODE:
-
rsync -av username@example.com:remote_directory local_directory
まとめ
・公開鍵認証を使っているのでSSHのパスワードは聞かれない。(作業メモ)
・mysqldumpを絶対パスで指定しないと駄目らしい。
さらにローカルにrsyncされたデータをpdumpfsで毎日バックアップして、さらにpdumpsf-cleanでローテートしている。なんだか面倒なので、みんなどうやってやってるのか教えてほしいなぁ