coreserverをリモートから自動バックアップするメモ

10月 10th, 2008 admin Posted in linux, Ruby | コメントは受け付けていません。

coreserverというレンタルサーバのデータのバックアップをとるようにしたメモ。

シェルが使えるのでファイルとかはrsyncでとれるのだけど、DBのファイルはみれないのでmysqldump(mysqlhotcopyは使えない。)などを使ってユーザのディレクトリにデータをもってくる必要がある。シェルスクリプトをcoreserverにおいてcronでバックアップしてもいいのだけど、バックアップ関連のスクリプト類は手元で一括管理したいのでRuby経由でSSHしてmysqldumpをするようにした。

シェルが使えて年間5000円のcoreserverはすごいとおもう。

(1)DBのデータを全部ダンプ

RUBY:
  1. require 'rubygems'
  2. require 'net/ssh'
  3.  
  4. host = "ホスト名"
  5. user = "ユーザ名"
  6. key = "秘密鍵の場所"
  7. mysqldump = "/usr/local/mysql/bin/mysqldump"
  8. path = "/virtual/username/"
  9. databases = [
  10.   {:db_name => "aaaa", :id => "username", :password => "pass"},
  11.   {:db_name => "bbbb", :id => "username2", :password => "pass2"},
  12. ]
  13.  
  14.  
  15. Net::SSH.start(host, user, :keys => [key], :passphrase => "") do |ssh|
  16.   databases.each do |db|
  17.     command = sprintf('%s -u %s --password=\'%s\' %s> %s/%s.dump ',mysqldump, db[:id], db[:password], db[:db_name], path, db[:db_name])
  18.     ssh.exec!(command)
  19.   end
  20. end

(2)rsyncでファイルをローカル(バックアップマシン)に移動

CODE:
  1. rsync -av username@example.com:remote_directory local_directory

まとめ

・公開鍵認証を使っているのでSSHのパスワードは聞かれない。(作業メモ
・mysqldumpを絶対パスで指定しないと駄目らしい。

さらにローカルにrsyncされたデータをpdumpfsで毎日バックアップして、さらにpdumpsf-cleanでローテートしている。なんだか面倒なので、みんなどうやってやってるのか教えてほしいなぁ

参考サイト

Pure Ruby な SSH クライアントライブラリ「Net::SSH」 - WebOS Goodies

Comments are closed.