私としましては、いろいろと出費が嵩むことがありまして、2年連続で家計は火の鳥となっておりますが故、「ちょっと長めないつもの週末」を謳歌しております。ていうか結婚した輩ってホント付き合ってくれなくなりますね!
さて、「レプリケーション環境構築手順」とかほざいておきながら、レプリケーションのレの字も無かった前回の続きです。Google Analyticsで検索ワード確認してみたら「MySQL レプリケーション」といったワードが幾つか見つかり、非常に心苦しい限りです詐欺師です…
というわけで今回のテーマは「脱・詐欺師」、要するに「タイトルに即した内容を書く」です。
ちなみに人から時々「話が長い」と言われます。
試した環境
- CentOS 5.6(64bit), 6.2
- MySQL 5.1.61
マスター
my.cnf設定
最低限、サーバーIDとバイナリログ名を設定。サーバーIDは他のサーバーとかぶらない値に。[mysqld] server-id=1 log-bin=mysql-bin # dataディレクトリ以外に作成したけりゃ以下のように絶対パスで指定 # log-bin=/var/lib/binlog/mysql-bin設定したら再起動。
レプリケーション専用ユーザー作成
マスターデータのスナップショットを作成
レプリケーションを開始するに当たって、当然マスタとスレーブのデータを同一にしておく必要がある。まず、設定作業中にマスターデータが更新されてしまわないよう、書き込みロックをかける。
mysql> FLUSH TABLES WITH READ LOCK;
そしてマスターデータのスナップショットを作成。データフォルダをアーカイブしてしまえ。
# cd /var/lib/mysql/ # tar cpf /tmp/master_snapshot.tar .
バイナリログのPositionをメモ
「スレーブが起動した際、バイナリログの読み込み開始位置」を表す。mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 106 | | | +------------------+----------+--------------+------------------+
書き込みロック解除
バイナリログのPositionさえメモしてしまえば、スレーブの設定完了前にいくら更新かかろうが恐くない。mysql> UNLOCK TABLES;
スレーブ
マスターデータを展開
展開前にスレーブ停止するのをお忘れ無く。もしマスターでバイナリログなどをデータフォルダ配下に出力していた場合は、スレーブ側では当然不要なので削除しちゃってください。
# /etc/init.d/mysqld_slave stop # cd /usr/local/mysql/var # rm -rf * # tar xpf /tmp/master_snapshot.tar -C /usr/local/mysql/var/ # rm msyql-bin.00000X mysql-bin.index
my.cnf設定
最低限サーバーIDを設定。[mysqld] server-id=2 # スレーブのバイナリログやリレーログの名称やパスを指定したけりゃ以下のように # log-bin=/usr/local/mysql/mysql-bin # relay-log=/usr/local/mysql/mysql-relay-bin # relay-log-index=/usr/local/mysql/mysql-relay-bin
マスター情報セット
ここでの肝は「MASTER_LOG_FILE」と「MASTER_LOG_POS」です。メモした値を設定してください。mysql> CHANGE MASTER TO -> MASTER_HOST='localhost' -> , MASTER_PORT=3306 -> , MASTER_USER='repl' -> , MASTER_PASSWORD='password' -> , MASTER_LOG_FILE='mysql-bin.000001' -> , MASTER_LOG_POS=106; mysql> START SLAVE;
起動!
mysql> START SLAVE;
動作確認
「Slave_IO_Running」「Slave_SQL_Running」が「Yes」で、「Last_IO_Error」が空ならOKです。mysql> SHOW SLAVE STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.XX.XX Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 257 Relay_Log_File: virtualbox-relay-bin.000002 Relay_Log_Pos: 402 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes …
それでは良きレプリケーションライフを!
0 件のコメント:
コメントを投稿