mysql:15601
From: Seiichirou Hiraoka <Seiichirou Hiraoka <flathill@xxxxxxxxxx>>
Date: Mon, 06 Jun 2011 10:56:48 +0900 (JST)
Subject: [mysql 15601] レプリケーション用スレーブの構築方法
平岡と申します。
2 台の MySQL でマスタ、スレーブ運用をしております。スレーブで何らかの問題
が起きて再度スレーブを構築する手順についてコメントを頂けますと幸いです。
- 環境
. server1 (マスタ)
OS: CentOS 5.5 (共通)
MySQL 5.5.12 (共通) (手動でコンパイル)
/etc/my.cnf
server-id = 1001
レプリケーション用ユーザ repl を登録。
. server2 (スレーブ)
/etc/my.cnf
server-id = 1002
レプリケーション用ユーザ repl を登録。
- 手順
時間を短縮するため、mysqldump によるダンプリストアではなくディレクトリを直接
コピーする方法で以下のようにテストを行っています。
1) スレーブ
MySQL を停止。
/etc/init.d/mysql top
2) マスタ
FLUSH TABLES WITH READ LOCK;
3) マスタ
Filename と Position を確認。
SHOW MASTER STATUS;
4) スレーブ
データベースディレクトリを削除。
rm -Rf /usr/local/mysql/data
5) スレーブ
バックアップをスレーブにコピー
ssh master "(cd /usr/local/mysql; tar cvfp - data)" | (cd /usr/local; tar xvfp -)
6) マスタ
UNLOCK TABLES;
7) スレーブ
不要なファイルを削除。
rm /usr/local/mysql/data/*.err
rm /usr/local/mysql/data/*.pid
8) スレーブ
MySQL を起動。
/etc/init.d/mysql start
9) スレーブ
バイナリログの適用。 ← (a)
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.0* | \
/usr/local/mysql/bin/mysql -u root -p
10) スレーブ
STOP SLAVE;
CHANGE MASTER TO .... (上で確認した Filename と Position を指定)
SET GLOBAL READ_ONLY = 1;
START SLAVE;
このようにする事でうまく動いているように見えますが、上記 (a) の箇所に
ついてコメントを頂きたく思います。
(a) の箇所にて、バイナリログを適用する必要はあるのでしょうか。
バイナリログに記録されている内容は既にデータベースに反映されているので
あれば、二重に適用するようになってしまうと考えています。
その他手順中で問題と思われる箇所がありましたら、教えて下さい。
以上、よろしくお願いします。
- flathill
-> 15601 2011-06-06 10:56 [Seiichirou Hiraoka <] レプリケーション用スレーブの構築方法 15602 2011-06-06 14:02 ┗[Seiichirou Hiraoka <]