DataBase MySQL

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

投稿日:2012年12月8日 更新日:

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

エクスポート

・ダンプですべてのデータベースを取得する
# 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コマンドをつけてダンプを出力すれば、多少は早くなるかもしれませんが、全然十分じゃありません。

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

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

mysql

MySQL ERROR: Can’t connect to MySQL server on ‘xxx.xxx.x.xx’ (13)

MySQL ERROR: Can’t connect to MySQL server on ‘xxx.xxx.xxx.xxx’ (13) はSELinuxによる接続 …

mysql

MySQLのwait_timeout

データベースやWebサーバーは、実際に稼働してから問題が多発します。 データ量が増えてきたり、アクセスが増えてきたらまずレスポンスの問題が発生するでしょう。 経験のあるエンジニアがいれば、十分なテスト …

sqlserver

application log ってどこ?

SQLSERVERのメンテナンスプランを使用してバックアップを取得していたのですが、取得できていませんでした。 SQL Serverログには下記メッセージが表示されていました。 BACKUP fail …

mysql

SQLで時間の重複をチェックする

同じ期間のデータは事前にチェックしてエラーにするという処理は、 あらゆる場面で想定されそうなことですが、 以外と難しかったのでここに方法をのこしておきます。 他にも素晴らしい方法があると思いますが、 …

mysql

MySQLの連続INSERTを高速にする

もししらなければ確実に、そして恐ろしく効果を発揮できると思います。 INSERTを連続実行する際にボトルネックとなるのはコミットです。 オートコミットをオフにするという手もあるのですが、 INSERT …