サーバ間のデータ転送
サーバ移行で、事なるサーバ間でデータを転送させるって事になったので、せっかくなのでマニアック?な事を使ってやってみたメモ。
マニアックといっても、やっている事は単純で、(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:パスワードを聞かれるけど、両方とも同じにしてるから、今回は問題無し。ハマるとしたらここもハマるかも