at_yasu's blog

ロード的なことを

サーバ間のデータ転送

サーバ移行で、事なるサーバ間でデータを転送させるって事になったので、せっかくなのでマニアック?な事を使ってやってみたメモ。

マニアックといっても、やっている事は単純で、(mysql|pg_)dumpで出力させてパイプ渡しでサーバに接続させて流れ込ませているだけです。


なお、IPとかは下記のようになってます。

--- IP
流し込み先 192.168.2.xxx
データ元 192.168.1.xxx

MySQL

まず、流し込む先のサーバにログインできるようにユーザを作成。今回は全てのデータなので、全ての権限を付与。なお、流し込んだら、流し込む前のデータは全て消えます。ご注意下さい。

ハマった所は、Grant文で、ユーザ名はIPv6表記にしなければならない所です。

> Grant All On *.* To `root`@`::ffff:192.168.1.xxx` Identified by 'hNKIeE7tn2uj7up3KBnuJRGk0GiTeFZQSfclaarofXPoEADReZ';

後は、コマンド。これは、ログインしているサーバのデータを、192.168.1.xxxというホストに流し込んでいる事です。つまり、データ元のサーバで実行しています。*1

mysqldump --default-character-set=binary --all-databases -u root -p | mysql --default-character-set=binary  -host=192.168.2.xxx -u root -p

PostgreSQL

ただいま試行錯誤中。うん、FreeBSDだとカーネルのリコンパイルがいるんだ…

流し込み先でコマンドラインを入力してます。何だか、データ元のpostgresのバージョンがぐでぐでになってて、いろいろ面倒な事になってたので。

設定変更が二カ所あります。これは、データ元の設定を変更しています。

  • 「postgresql.conf」にlisten_addresses='*'を追加します。
  • 「pg_hba.conf」に「host all all 192.168.2.xxx/24 trust」を追加。
> pg_dumpall -iU pgsql -h 192.168.1.xxx | psql -U pgsql postgres

*1:パスワードを聞かれるけど、両方とも同じにしてるから、今回は問題無し。ハマるとしたらここもハマるかも