データベースを複製する最も一般的な方法は、更新ログを使用することです。
「更新ログ」節参照 。これは、あるデータベースがマスター(主)として動作して
(全てのデータ変更がここで行われます)、一つ以上の他のものがスレーブ(従)と
して動作することを要求します。スレーブを更新するには
mysql < update_log
を実行します。
削除を行わないのであれば、タイムスタンプを使用できます。
更新ログ(削除のため)とタイムスタンプ(両側で)の両方を使用する2つの方法の 更新システムを作ることができます。しかしこの場合は、同じデータが両側で変 更された時に、あなたが衝突を操作できなければなりません。あなたはおそらく 何が更新されたかを決定するのを助けるために、古いバージョンを保持したいで しょう。
この場合の複製は SQL ステートメントで行われるため、データベースを更新す るステートメント中で次の関数は使ってはいけません。これらは他の MySQL サーバでは異なる値を返すからです:
全ての時刻関数は、必要な場合にミラーにタイムスタンプを送るようにして、安 全に使用できます。LAST_INSERT_ID() も安全に使用できます。
MySQL テーブルはファイルとして格納されるため、バックアップを行
うのは簡単です。矛盾のないバックアップを得るためには、LOCK TABLES
を関連するテーブルで行ってください。 「LOCK TABLES
構文」節参照 。読み込みロックだ
けが必要なので、そのテーブルでデータベースディレクトリのファイルのコピー
が行われている間も、他のスレッドはクエリを継続できます。もしくは、SQL レ
ベルのバックアップを行いたいのであれば、SELECT INTO OUTFILE
を使
用できます。
他の方法は mysqldump
プログラムを使用することです。
mysqldump --tab=some-dir --lock-tables --quick
または、サーバが
何も更新していない時に、単に全てのテーブルファイル(.frm, .ISM, .ISD)をコ
ピーします。
mysqld
を --log-update
で起動します。
何かをリストアしなければならない時 (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.