Edited at

MySQL(MariaDB)で別データベースへまるごとデータコピーするワンライナー

データベース間でデータをまるまるコピーしたい(要は同じ状態にしたい)ということがあります。

特に本番環境と開発環境を同じ状態にしたいということはよくあるでしょう。

どのDBMSでもエクスポート→インポートするのが一般的だと思います。

さて、MySQLの場合ですが

もちろん単純にmysqldumpでファイルにエクスポート、その後インポートでもできますが

実はファイルに出力しなくても一行でできてしまいます。ファイル消したりしなくていいので楽です。

mysqldump -uユーザー名 -pパスワード 移行元データベース名 | mysql -uユーザー名 -pパスワード 移行先データベース名

エクスポートツールmysqldumpの出力をそのままパイプで移行先に渡してやればいいだけです。

なぜこれができるかというと

・mysqldumpコマンドが出力しているのは単なるSQLである

・mysqlコマンドはSQLを受け取るとそれをそのまま実行してくれる

からです。

mysqldumpで出力されるSQLはCREATE TABLE+INSERTですが

CREATE TABLEの前にDROP TABLE IF EXISTがあるので移行先に同じテーブルがあっても予め削除しておく必要はありません。(TABLE以外、VIEWやPROCEDUREも同様)

Oracleなんかは予め同じテーブルを削除しておく必要があるので、この点MySQLは楽です。