mysqldumpしたファイルを圧縮しつつ他のサーバーに飛ばす
とあるサーバー上でmysqldumpしたいけど、そのサーバーはHDDの容量が少なくて(この時点で問題があるように思うが…)他のサーバーに保存したい時のお話です。
相変わらずlinuxのストリーミング処理には関心させられますね。大助かりです。
コマンド例としては以下の通り
mysqldump -udbuser -pdbpass dbname | gzip | ssh -l username 123.123.123.123 'cat > ~/dump.sql.gz'
パラメータについて
dbにアクセス可能なユーザー名:dbuser
上記ユーザーのパスワード:dbpass
dumpするDB名:dbname
転送先サーバーのIPアドレス:123.123.123.123
転送先サーバーのユーザー名:username
転送先サーバー上の保管先:~/dump.sql.gz(ホームディレクトリ直下ですね)
mysqldumpした内容をgzipで圧縮しつつsshで接続先に飛ばしてその内容を保存するという流れですね。この例ではsshでパスワード認証を想定しており、コマンド実行後はパスワードを入力する必要があります。
ちなみにmysqldump側で-pの直後にDB側のパスワードを指定しない場合、最初のDBのパスワード、次にsshのパスワードを入力する必要があります。私の環境だけかもしれませんが、DBのパスワードを入れた直後は何も表示されなくなり、Enterを押すと「もう一度sshのパスワード入れて」と表示され、そこでsshのパスワードを入れると処理が開始されます。何かやり方を間違えているのでしょうかね…。
あと、このやり方だと、sshで鍵認証を使っている場合は秘密鍵をmysqldumpする側のサーバーに持って来て、ssh の -i で指定する必要がありそうですね。転送先のサーバーにログインして、取りに来るというやり方も出来るかと思いますが、結局転送元が鍵認証だったら同じ事になるので、まぁ臨機応変にという感じでしょうか。
著者:t.n