mysql(mysqldump)でデータをバックアップ & 復元(リストア)。where条件も付けてみたい。

よく構文を忘れるので健忘録として。

mysqlでデータをバックアップ&復元するには通常、mysqldumpを使用しますね。

先ずは

ダンプ

指定されたデータベース全てをダンプする場合

$ mysqldump -u user_name -p DB_NAME_1 > DB_NAME_1.sql

DB_NAME_1にバックアップを行いたいデータベース名を指定。

結果としてリダイレクトされるファイルはリストアする場合の読み込みSQLになるので通常は拡張子を.sqlで。

もちろんリストアファイル名はなんでも良いですよ。

これをやるとDB_NAME_1.sqlにはDBを構成するcreate文も全て出力されます。

ちなみにダンプする場合の文字コードは指定は

MySQLのmysqldumpの文字コード

にも書いていますが一応。

ダンプする場合の文字コード指定

–default-character-set=binary

を指定すればOK。

具体的には、

mysqldump -u ユーザー名 -p データベース名 –default-character-set=binary > データベース名.sql

この例ではbinaryを使用しています。

これはリストアする場合にDB稼働環境等色々な要因で文字化けしたりするのが嫌なのでbinaryでダンプしてbinaryでリストアする為に指定しています。

もちろんダンプ&リストアの環境が統一されてる場合や管理できているのなら無しでもOKだと思いますが。

指定されたデータベース内の任意のテーブルのみダンプする場合

$ mysqldump -u user_name -p DB_NAME_1  TABLE_NAME_1  TABLE_NAME_2 > DB_NAME_1.sql

TABLE_NAME_1、TABLE_NAME_2 の様にDB名の後にそのDBに含まれるテーブル名をスペースを空けて指定してあげます。

もちろんDB_NAME_1の後のテーブル名は好きなだけ指定できます。

create文は要らない場合

-t オプションを指定してあげます。

$ mysqldump -u user_name -p -t DB_NAME_1 > DB_NAME_1.sql

これで純粋にデータのみの出力になります。

通常のmysqldumpコマンドだとその出力にはDBやテーブルのcreateコマンドまで出力されてしまいます。

リダイレクトされたSQLをみればわかりますが最初に該当するテーブルなりDBをドロップしてから新たに作成する記述になっています。

全く何もない状態から作るのであれば良いですがデータだけを純粋にリストアしたいのであればそれらの制御文は必要ないのでダンプ時にオプションを指定してから出力されない様にしてあげましょう。

逆に、

DBやテーブルの作成だけ行いたい場合

-dオプションを指定してあげます。

$ mysqldump -u user_name -p -d DB_NAME_1 > DB_NAME_1.sql

これでcreate分のみの出力になります。

基本的なオプション

代表的なオプション

オプション 意味 説明
-u ユーザー名 サーバに接続するユーザー名
-p パスワード パスワードを指定してログイン
-h ホスト情報 接続先DBのホスト名。未指定時はlocalhost
-B データベース 複数のデータベースを名前を指定してダンプ
-A すべてのデータベース 複数のデータベースを名前を指定してダンプ
-d 定義のみ create文のみ
-n データベースは無視 データベースを作成せずにダンプ
-t テーブルは無視 データのみ

ダンプ時に条件を付けたい場合

–where ‘条件となるWHERE句’ を指定する。

$ mysqldump -u user_name -p DB_NAME_1  TABLE_NAME_1 –where ‘ID > 50001’ > DB_NAME_1.sql

これでDB_NAME_1 の TABLE_NAME_1 のカラム名、IDの値が50001以上の物だけがダンプされます。

復元(リストア)

すべてのデータベースのバックアップを復元する

$ mysql -u user_name -p < DB_NAME_1.sql

DB_NAME_1.sqlは既にダンプしているデータ。

任意データベースのみの復元

$ mysql -u user_name -p DB_NAME_1 < DB_NAME_1.sql

シェアする

  • このエントリーをはてなブックマークに追加

フォローする