drop databaseをつけてダンプ
mysqldumpで、drop databaseを付けてデータベースをダンプするコマンドを解説する。
コマンド
コマンドは下記のとおりである。
mysqldump -u username -ppassword --add-drop-database --all-databases > dumpfilename.sql
具体例
少し具体的に書こう。DB情報等が下記であったとする。
項目 | 値 |
---|---|
DBユーザ名 | pudding |
DBパスワード | qwerty123456 |
(ダンプファイル名) | alldatabases.sql |
このDB情報等を反映すると、下記のように書くことになる。 --add-drop-database
がポイントだ。
mysqldump -u pudding -pqwerty123456 --add-drop-database --all-databases > alldatabases.sql
ダンプファイルの内容
上記コマンドを実行した際のダンプファイルの記述は以下の通り。抜粋である。
-- -- Current Database: `zipcode` -- /*!40000 DROP DATABASE IF EXISTS `zipcode`*/; CREATE DATABASE /*!32312 IF NOT EXISTS*/ `zipcode` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `zipcode`;
ちなみに、 --add-drop-database を使わずに普通にダンプした場合は以下の通り。
違いは、
/*!40000 DROP DATABASE IF EXISTS `zipcode`*/;
が無いことである。
-- -- Current Database: `zipcode` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `zipcode` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `zipcode`;
なお、SQLを知っている人は、
/* */;
で囲まれた部分はコメント欄なのだから、実行されないではないか、と思うであろう。しかし、これは「拡張コメント」といい、MySQLのバージョンを判定して実行されるか否かを操作できるコマンドである。今回出力された
/*!40000 DROP DATABASE IF EXISTS `zipcode`*/;
は、ほとんどの環境では、drop databaseが実行される構文である。すごく古いMySQLのバージョンにも対応するための細かな仕様なのだ、とだけ理解いただきたい。
注意点
エクスポートする対象のデータベースが単体のデータベースの場合、そもそもmysqldumpの仕様として、出力されるSQLファイルにはdrop databaseはつかないようになっている。そのため、DB指定のmysqldumpの場合は、この --add-drop-database をつけてもつけなくても、出力されるSQLファイルは全く同じになる。
用途
用途としては、
- 開発環境DBへ本番環境DBを丸ごと移行する
- 壊れた本番環境へ、バックアップを戻す
というような用途が考えられるだろう。