時雨に舞う

プログラミングや技術情報などの備忘録

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