Linux の rsync コマンドを使うと、1台のマシンからもう1台リモートの別のマシンにディレクトリ構造(データ)をコピーできる。ゆえに、/var/www あたりをコピーする。
また、mysqldump コマンドはデータベースをファイルに落とすもので、--compress コマンドを付けるとデータを圧縮する。そのデータを mysql コマンドに(パイプ(|)を使って)渡してリモートのデータベースにコピーする。mysql コマンドは、-h オプションを付けるとリモートのホストへの動作となる。気が利いてるね!ここでは、転送元のホスト名を source.yourdomain.com、転送先のリモートのホストを remote.yourdomain.com としよう。
これだけで同期したサイトができあがる(改行されていても、実際には rsync の行と mysqldump の行の 2行のみ)。以下、対象ディストリビューションは、Ubuntu。ディレクトリ構成などは、
Drupal を Ubuntu に楽してインストールする方法を参照のこと。
#!/bin/sh
rsync --progress -avhe ssh --delete /var/www/ root@remote.yourdomain.com:/var/www/
mysqldump --compress -u root -ppassword(←ローカルのパスワード) drupal5(←データベース名) | mysql -h remote.yourdomain.com -u root -ppassword(←リモートのパスワード) drupal5(←リモートのデータベース名)
しかし、上のたった 2行のために次のように少しセットアップしなければならない。
rsync は ssh のコピー版、scp のようなものである。注意としては、自動同期/バックアップする場合は、rsync コマンドはパスワードなしで動いて欲しいので、リモート側のサーバにローカル側に対応した鍵を転送しておく必要がある。鍵の生成と転送は以下のコマンドで行う。
# ssh-keygen -t dsa
# ssh-copy-id -i .ssh/id_dsa.pub user@remote.yourdomain.com
ssh-keygen コマンドを使ってローカルマシンで SSH 鍵を生成し、パスワードの入力を求められたら Enter キーを押す。SSH鍵が生成されたら、ssh-copy-id コマンドでリモートのサーバに鍵を転送する。鍵は決め打ちのディレクトリ .ssh あたりに保存されるから心配ない。
リモートのデータベースの方には、リモートからアクセスできるための権限を持ったユーザーを作成しておかなければならない。phpMyAdmin などから以下の SQL 文を実行しておく。source.yourdomain.com とあるところは、転送元のホスト(サーバ)名であるので、適宜変更する。
CREATE USER 'root'@'source.yourdomain.com(←変更すること)' IDENTIFIED BY 'password(←変更すること)';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'source.yourdomain.com' IDENTIFIED BY '(←変更すること)' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
この後、MySQL のデーモンを再起動する。
# /etc/init.d/mysql restart
または
# service mysql restart
Apache 2 を再起動する。
# /etc/init.d/apache2 restart
または
# service apache2 restart
トラックバック URL:
https://perltips.twinkle.cc/trackback/306