調査の発端
とある検証のため、運用サーバーのMySQL(データベース名:mysqldb)から出力したダンプファイルを、以下のコマンドで検証サーバーのMySQLにインポートを実施しました。
mysql -u hogehoge -p mysqldb_test < mysqldump_yyyymmdd.sql
比較検証用に新規に作成したデータベース(mysqldb_test)にインポートしたかったのですが、結果として、常に同じデータベース(mysqldb)にインポートされてしまう、という不思議な現象が発生したため、調査した内容と対処方法について記述します。
もし、私と同じ現象が出てしまった方に一助となれば幸いです。
調査内容
mysqldumpコマンドでデータベースを指定する場合、databaseオプション(--database)で指定する方法と指定しない方法で違いがあるか調査しました。
(今回のケースでは、データベースの指定は1つのみとします)
-- (1)データベースオプション指定あり
mysqldump -u hogehoge -p --database mysqldb > mysqldump_yyyymmdd_01_dboption.sql
-- (2)データベースオプション指定なし
mysqldump -u hogehoge -p mysqldb > mysqldump_yyyymmdd_02_nonoption.sql
調査結果
(1)と(2)のmysqldumpコマンドで出力されるdumpファイルの違いは、CREATE DATABASEが出力されるかどうかの違いだけでした。
(1)のdatabaseオプションを明記した場合は、以下の通り、CREATE DATABASEとUSE文が追加されます。
--
-- Current Database: `mysqldb`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqldb` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `mysqldb`;
対処方法
現象の起きたダンプファイルの内容を確認してみると、案の定、上記CREATE DATABASEとUSE文が出力されていたため、viコマンドでダンプファイルを開き、CREATE DATABASEとUSE文を削除し保存しました。
保存したダンプファイルをインポートすることで、期待通り別名のデータベースにインポートすることができました。