MySQLのmysqldumpのエクスポートとインポート

ダンプはバックアップやテストに大活躍してくれます。
しかし、データベース単位でエクスポートしても、インポートには随分時間がかかったりします。
その辺は別の機会にしますが、今回は基本コマンドのまとめです。

エクスポート

・ダンプですべてのデータベースを取得する
# mysqldump -u USER -pPASSWORD --all-databases > /出力先

・データベース単位でダンプを取得する
# mysqldump -u USER -pPASSWORD --database DATABASENAME > /出力先

・複数のデータベースのダンプを取得する(スペース区切り)
# mysqldump -u USER -pPASSWORD --databases DATABASENAME1 DATABASENAME2 > /出力先

・テーブル単位でダンプを取得する
# mysqldump -u USER -pPASSWORD --database --table TABLENAME > /出力先

・複数のテーブルのダンプを取得する(スペース区切り)
# mysqldump -u USER -pPASSWORD --database --tables TABLENAME1 TABLENAME2 > /出力先

・条件を付けて取得する
#mysqldump --opt -u USER -pPASSWORD DATABASENAME TABLENAME "-w 100 <= id and id <= 200" > /出力先
(注意)
・-pとパスワードの間は開けてはいけません。-pのあとパスワードを記入しなければ、パスワードの問い合わせがあります。
・出力先に指定するファイルの拡張子は何でもいいと思いますが、私はよくデータベース名yyyymmdd.dmpなんてしてます。
 ダンプの中身はテキストなので、自分で編集もできますよ。

インポート

インポートするときは、ただのmysqlコマンドになります。

mysql -u USER -pPASSWORD DATABASENAME < /[ダンプ]
(注意)
・データベースを複数指定して取得したダンプでも、インポートする際は、1つ1つデータベースを指定してインポートします。
・エクスポートしたデータベース名と、インポートするデータベース名は一致している必要があります。
 もし一致していなければダンプの中の名称を変更するか、新しくデータベースを作成する必要があります。
 インポート時にデータベースを指定しても、ダンプの中にUSE コマンドがついているわけです。
・–database DATABASENAME –table TABLENAME で取得したダンプにデータベース名はつかないので、どのデータベースにも入れやすいです。
 テーブル名を複数スペース区切りでいれた場合も同じです。
・データベース単位で取得したダンプはテーブル単位では復元できなさそうです。ダンプの編集等が必用とおもわれます・・・
・ダンプにはdrob-tableがあるので、データが一旦消えてダンプの状態になるので注意!
・ダンプのインポート中にはLOCK TABLES `TABLENAME` WRITE; ~ UNLOCK TABLES; となるので注意!

デフォルトの設定のままダンプのインポートはレコードサイズにもよりますが、○百万行になってくるととにかく時間がかかります。
本番データの復旧で初めてこの症状にあったらショック死確実です。

mysqldump –opt …

–optコマンドをつけてダンプを出力すれば、多少は早くなるかもしれませんが、全然十分じゃありません。

テストが可能な方は、実際のデータ量を使ってチューニングをしておくことを激しくお勧めします。
その方法は別の機会にでも。

タイトルとURLをコピーしました