mazeltov7のweb断片

備忘録的なテキトーなことを書きます。(技術記事はQiitaに移行しました http://qiita.com/mazeltov7 )

サーバー間でmysqlデータをバックアップ・更新する

this is what

サーバーAにあるデータベース1を、サーバーBに持っていて同期(更新)する、というのをしたい。
定期的にするようにcronに登録する。

this is how

*今回はexpectコマンドを使った。expect入れてない場合はyum install expectで入れる。
まずDBをダンプする。

$ mysqldump -u root --password="hoge" db_name > db_name.sql

サーバーAからBへ送る

# ssh ver2使ってる場合は`-2`オプション
$ scp -2 -P 1111 db_name.sql user@serverB:/home/username/db_name.sql

な感じだけど、途中ssh鍵のパスワード求めらたりするので、cron出する場合はexpect使う。
スクリプト書く。

#!/bin/sh
HOST=serverB
PASS=hogehoge
IDENT=/home/username/.ssh/id_rsa

expect -c "
        set timeout -1
        spawn scp -2 -i $IDENT -P 1111 /home/username/db_name.sql  user@$HOST:/home/username/db_name.sql
        expect \"Enter passphrase for key\"
        send \"${PASS}\r\"
        expect eof
"

で、これをcronに登録して回すとdumpしたファイルをサーバーBに送ってくれる。

*参考
expectコマンドをcronで使うためときのポイント | thiroyoshi.blog
シェル以外からexpectしててハマったメモ | ブログ :: Web notes.log

以上