はじめに
mysqldump
というコマンドを初めて見る機会がありました。
※以下簡略化して記載しています。
mysqldump -h <ホスト名_1> <DB名_1> -u <ユーザー名_1> -p | mysql -h <ホスト名_2> <DB名_2> -u <ユーザー名_2> -p
このコマンドが何をしているのか、分解して把握をしたかったので備忘録として残します。
環境
OS: macOS Catalina 10.15.3
冒頭のコード
mysqldump -h <ホスト名_1> <DB名_1> -u <ユーザー名_1> -p | mysql -h <ホスト名_2> <DB名_2> -u <ユーザー名_2> -p
コマンドの意味
<ホスト名_1>
<DB名_1>
<ユーザー名_1>
※パスワードはプロンプトで入力を促される
のDB内データを
<ホスト名_2>
<DB名_2>
<ユーザー名_2>
※パスワードはプロンプトで入力を促される
のDBに移行する。
気になる方は、以下で詳しく見ていきましょう!
解説
1. パイプ
まずは、ゴニョゴニョしている部分を簡略化したほうが全貌がわかりやすいので、前半をA
、後半をB
とします。
そうして見やすくすると、こうなります。
mysqldump A | mysql B
コマンドラインではパイプ(|
)でつなぐことで、左側の出力結果を右側の入力にすることができます。
つまり、
mysqldump A
の出力を
mysql B
の入力にすることができます。
あとは、A, Bを詳しく見ればいいですね!
2. 前半(A)
mysqldump -h <ホスト名_1> <DB名_1> -u <ユーザー名_1> -p
長いとどうにも見にくいので、分解して見ていきます。
※それぞれMySQL公式の説明を引用します。
mysqldump
mysqldump コマンドは MySQL サーバーにログインして情報を抽出します。
-h <ホスト名_1>
与えられたホスト上の MySQL サーバーからデータをダンプします。デフォルトホストは localhost です。
<DB名_1>
該当のデータベース全体をダンプする
-u <ユーザー名_1>
サーバーへの接続時に使用する MySQL ユーザー名。
-p
サーバーに接続する際に使用するパスワードです。コマンド行で、--password オプションまたは -p オプションに続けて password の値を指定しなかった場合、mysqldump はそれを要求します。
3. 後半(B)
mysql
mysql は、入力行の編集機能を備えた簡単な SQL シェルです。
※オプションは前半と同様のため割愛
補足:別のコマンドで代用するなら
$ mysqldump -u mysql_user_name >> /dump_database/backup
でエクスポートしたbackup
ファイルを、
$ mysql -u mysql_user -p database_name < /dump_database/backup
でインポートする。
普通はこのように2回コマンドを打つわけですが、これを一発で済ませようとすると冒頭のコマンドになるんですね!
以上です!
おわりに
最後まで読んで頂きありがとうございました
どなたかの参考になれば幸いです