MySQLの魅力の一つは,簡単にレプリケーションを実現できることだ。MySQL自体に含まれているので,設定を行うだけですぐにレプリケーションが開始できる。

 しかし,通常と異なり,2台以上のデータベース・サーバーが連動するため,レプリケーションの動作そのものにエラーが発生する場合もある。すべてのトラブルへの対処方法を記述するのは難しいが,基本的な内容を紹介するので,参考にしてほしい。

レプリケーション環境の構築

 今回,以下のような2台のMySQLサーバーでの運用を想定した。構築方法の詳細は,【MySQLウォッチ】第7回「大規模システムを支えるMySQLのレプリケーション機能」を参考にしてほしい。


表1●MySQLサーバーの設定内容

IPアドレス 環境設定ファイル(my.ini,my.cnf)
マスター 192.168.11.2 server-id = 77
log-bin BinaryLog
スレーブ 192.168.11.4 server-id=7
master-host = 192.168.11.2
master-user= satou
master-password = pass
replicate-do-db = databank

 レプリケーションの対象となるデータベースは,「databank」,1つのテーブル「accesslog」が格納されている。マスタ側で,随時データを追加し,レプリケーションの機能を使用してスレーブに複製を作成する。現時点で,リスト1のようにマスターおよびスレーブにデータが格納されている。


リスト1●テーブル「accesslog」の内容(マスター側)

mysql> select * from accesslog;
+-----+-----+----------+------------+--------------+
| No  | ID  | Name     | Time       | Nemo         |
+-----+-----+----------+------------+--------------+
|   1 | 123 | YAMAHA   | 2005-07-11 | メモ         |
|   2 | 006 | HONDA    | 2005-07-11 | テストデータ |
|   3 | 001 | TOYOTA   | 2005-07-11 | 試験         |
|   4 | 300 | SUZUKI   | 2005-07-11 | Mac          |
|   5 | 999 | NISSAN   | 2005-07-12 | テキスト     |
|   6 | 001 | KAWASAKI | 2005-07-13 | 漢字データ   |
+-----+-----+----------+------------+--------------+
6 rows in set (0.02 sec)
 なお,フィールド「No」は,プライマリ・キーに設定されているので,重複する値は格納できない。

 次に,データベースに対し誤った操作を行ってみる。