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」は,プライマリ・キーに設定されているので,重複する値は格納できない。
次に,データベースに対し誤った操作を行ってみる。