Go to the first, previous, next, last section, table of contents.


MySQL でのよくあるいくつかの問題の解決

データベースの複製

データベースを複製する最も一般的な方法は、更新ログを使用することです。 「更新ログ」節参照 。これは、あるデータベースがマスター(主)として動作して (全てのデータ変更がここで行われます)、一つ以上の他のものがスレーブ(従)と して動作することを要求します。スレーブを更新するには mysql < update_log を実行します。

削除を行わないのであれば、タイムスタンプを使用できます。

更新ログ(削除のため)とタイムスタンプ(両側で)の両方を使用する2つの方法の 更新システムを作ることができます。しかしこの場合は、同じデータが両側で変 更された時に、あなたが衝突を操作できなければなりません。あなたはおそらく 何が更新されたかを決定するのを助けるために、古いバージョンを保持したいで しょう。

この場合の複製は SQL ステートメントで行われるため、データベースを更新す るステートメント中で次の関数は使ってはいけません。これらは他の MySQL サーバでは異なる値を返すからです:

全ての時刻関数は、必要な場合にミラーにタイムスタンプを送るようにして、安 全に使用できます。LAST_INSERT_ID() も安全に使用できます。

データベースのバックアップ

MySQL テーブルはファイルとして格納されるため、バックアップを行 うのは簡単です。矛盾のないバックアップを得るためには、LOCK TABLES を関連するテーブルで行ってください。 「LOCK TABLES 構文」節参照 。読み込みロックだ けが必要なので、そのテーブルでデータベースディレクトリのファイルのコピー が行われている間も、他のスレッドはクエリを継続できます。もしくは、SQL レ ベルのバックアップを行いたいのであれば、SELECT INTO OUTFILE を使 用できます。

他の方法は mysqldump プログラムを使用することです。

何かをリストアしなければならない時 (isamchk -r が全てのデータをリ ストアできない場合。99.9% の場合は可能です):

最後のコマンドの ls は、全てのログファイルを正しい順で得るために行われま す。

select * into outfile from table での選択的バックアップと LOAD DATA FROM INFILE 'file_name' REPLACE ... でのリストアを行う こともできます。重複レコードを避けるためには、テーブル内に PRIMARY KEY が必要です。REPLACE は、'重複インデックス' 衝突があった場合、 新しいレコードを挿入する時に古いレコードが新しいものに置き換えられること を意味します。


Go to the first, previous, next, last section, table of contents.