2005-02-16
バックアップ:Export Option
データバックアップの際、オプションの意味を知らなければなんもできんということで、MySQL と phpMyAdmin の公式のドキュメントから調べてみた。こうして人は Geek になるのねん
SQLオプション一覧
- ヘッダーへカスタムコメントを追加 (\n で改行):
- トランザクションでエクスポートを囲む
- 外部キーの検査を無効に
- データベースエクスポートオプション:
- 「DROP DATABASE」を追加
- 構造:
- 「DROP TABLE」を追加
- 「IF NOT EXISTS」を追加
- 「AUTO_INCREMENT」値を追加
- 逆クオートでテーブル名やフィールド名を囲む
- コメント追加
- 作成/更新/検査の日付を追加
- データ:
- 完全な INSERT 文を作成する
- 長い INSERT 文を作成する
- 遅延インサートを使用する
- 「INSERT IGNORE」を使用する
- バイナリフィールドは 16 進数を使用する
- エクスポート形式(INSERT/UPDATE/REPLACE)
ヘッダーへカスタムコメントを追加 (\n で改行):
任意のコメントを追加するオプション。SQL言語との兼ね合いがあるのであまり変な記号は使わないのがbetterと思われる。
トランザクションでエクスポートを囲む
SET AUTOCOMMIT=0;
START TRANSACTION;
…
COMMIT;
エクスポートしたデータが上記のコマンド(クエリ?)で囲まれる。効果については調査中。トランザクションってなんじゃ。
外部キーの検査を無効に
調査中
データベースエクスポートオプション:
- 「DROP DATABASE」を追加:Importの開始時に、データベース内にある全てのテーブルが削除される。複数のTextpatternをインストールしている場合、これは使っちゃだめっぽい。『このコマンドの使用時には、十分に注意してください』ということらしい。とかなんとか書いてみたけど、ロリポの場合は、データベース全体に対する権限がないからこのオプションもなかったわ。スマソ。
構造:
テーブルの構造をエクスポートするオプション。とりあえずチェックを入れる。
- 「DROP TABLE」を追加:Import時に、1 つ以上のテーブルが削除される。
微妙だ……『このコマンドは慎重に使用してください』らしい。インポートしてみた感じ、チェックを入れておいた方がよさげ。 - 「IF NOT EXISTS」を追加:『サブクエリで値がまったく返らない場合、EXISTS <subquery> は TRUE になり、NOT EXISTS <subquery> は FALSE になります』とのことだが、さっぱりわからん! 『重要ではありません』とも書いてるけど、びみょ〜。ここ見れ→MySQL リファレンスマニュアル :: 6.4.2.6 EXISTS と NOT EXISTS
- 「AUTO_INCREMENT」値を追加:『新しく追加するレコードを識別するための一意な値を生成できます』とのことだけどやっぱりさっぱりだ!ここ見れ→MySQL リファレンスマニュアル :: 3.6.9 AUTO_INCREMENT の使用
- 逆クオートでテーブル名やフィールド名を囲む
- コメント追加(作成/更新/検査の日付を追加)
- 上の2つは読んだままっぽい。エクスポートしたデータをテキストエディタで編集するときに可読性を向上させるくらいの意味だと思う。
データ:
データの中身自体をエクスポートするオプション。とりあえずチェック。
- 完全な INSERT 文を作成する
- 長い INSERT 文を作成する
- それぞれのオプションにチェックを入れてエクスポートしたファイルを読んでみた結果、『完全な〜』では(’値1’, ‘値2’, ‘値3’, …)INSERT INTO(’項目A’, ‘項目B’, ‘項目C’, …)となっている。一方、『長い〜』では(’値1’, ‘値2’, ‘値3’, …)となっている。好きな方を使えばよいっぽい。
- 遅延インサートを使用する:上記のINSERT文の該当箇所が、INSERTではなく「INSERT DELAYED」になる。インポートの速度を向上させるためのものらしい。以下、MySQLリファンレンスマニュアルより引用。
サーバはレコードをバッファに挿入する。その後、INSERT DELAYED ステートメントを発行したクライアントは処理を続行することができる。テーブルが使用されていると、サーバはレコードを保持する。テーブルが解放されると、サーバはレコードの挿入を開始し、そのテーブルに対する新しい読み取り要求がないか定期的にチェックする。新しい読み取り要求があると、そのテーブルが再び解放されるまで、遅延されたレコードのキューの処理は中断される。
- 「INSERT IGNORE」を使用する:上記のINSERT文の該当箇所が、INSERTではなく「INSERT IGNORE」になる。『IGNORE が指定されていると、テーブルの既存の PRIMARY または UNIQUE キーと重複するレコードはすべて無視され、挿入されない』ということらしい。データが重複したときに、インポートが止まるのを防止する。
- バイナリフィールドは 16 進数を使用する:そのまんまぽいがどう違うのか分からん。
- エクスポート形式(INSERT/UPDATE/REPLACE):データをインポートするときにMySQLにどのような操作をさせるかを選択するオプション。
- INSERT:既存のテーブルに新しいレコードを挿入する
- UPDATE:既存のテーブルレコードのカラムを新しい値で更新する
- REPLACE:既存のテーブルを上書きする。
弄くりまわした結果……
デフォルトでチェックが入っているものはそのままにしておいて。必要に応じてオプションを追加する感じで良さげ。
TsumuRiセッティング
- ヘッダーへカスタムコメントを追加: OFF
- トランザクションでエクスポートを囲む: OFF
- 外部キーの検査を無効に: OFF
- 構造: ON
- 「DROP TABLE」を追加: ON
- 「IF NOT EXISTS」を追加: ON
- 「AUTO_INCREMENT」値を追加: ON
- 逆クオートでテーブル名やフィールド名を囲む: ON
- コメント追加
- 作成/更新/検査の日付を追加: OFF
- データ: ON
- 完全な INSERT 文を作成する: ON
- 長い INSERT 文を作成する: OFF
- 遅延インサートを使用する: OFF
- 「INSERT IGNORE」を使用する: OFF
- バイナリフィールドは 16 進数を使用する: ON
- エクスポート形式: INSERT
とりあえずこれでうまく行っているらしい。もっとよいオプションのセッティングがあったら教えて下さい。
参考
共にLocalized Documentationとして日本語版もある。
ありがたう orz
#Own Liskでヨロシク。データベースが壊れたっつっても責任は取れませんので。
トラックバック - http://d.hatena.ne.jp/TsumuRi/20050216/p2
リンク元
- 3 http://www.google.co.jp/search?hl=ja&source=hp&q=遅延インサート&btnG=Google+検索&aq=f&aqi=&aql=&oq=&gs_rfai=
- 3 http://www.google.co.jp/search?q=遅延インサートを使用する&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 3 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLL_jaJP304JP304&q=mysql エクスポート形式 replace
- 2 http://ezsch.ezweb.ne.jp/search/?sr=0101&query=エクスポート 意味
- 2 http://spherical-moss.net/page/72/
- 2 http://www.google.co.jp/hws/search?hl=ja&q=遅延インサート&client=fenrir&adsafe=off&safe=off&lr=lang_ja
- 2 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=遅延インサート&aq=f&aqi=&aql=&oq=&gs_rfai=
- 2 http://www.google.co.jp/search?hl=ja&q=mysql+エクスポート オプション&aq=f&aqi=&aql=&oq=&gs_rfai=
- 2 http://www.google.co.jp/search?hl=ja&rls=com.microsoft:ja:IE-SearchBox&rlz=1I7ADFA_ja&q=IF+NOT+EXISTS+を追加++phpmyadmin&aq=f&aqi=&aql=&oq=&gs_rfai=
- 2 http://www.google.co.jp/search?q=完全な+INSERT+文を作成する&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a


