カスタム検索
このエントリーをはてなブックマークに追加
tomo.gif (1144 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)To previous pageTo home pageMailing to me

MySQLのレプリケーションの実験

Created: 23 August 2008

以下で説明されている内容をみて実験してみました。
http://www.irori.org/doc/mysql-rep.html


レプリケーションの小技 (23 August 2008

マスタサーバーの設定 (23 August 2008
スレーブサーバーの設定 (
23 August 2008
同期を取ってレプリケーションを開始する (23 August 2008


 レプリケーションの小技 

状態を確認する方法

マスター側の状態は、以下のコマンドで確認できます。

mysql> show master status;

スレーブ側の状態は、以下のコマンドで確認できます。

mysql> show slave status;


バイナリーログを削除する方法

マスター側の状態は、以下のコマンドで確認できます。

mysql> purge master logs to 'tomo-bin.0003';

 指定した'tomo-bin.0003'が消えるのではなく、それより古い、'tomo-bin.0001'や'tomo-bin.0002'が消えるそうです。


 マスタサーバーの設定 

作業の概要

スレーブサーバーは、マスタサーバーのバイナリログを取得して機能を果たしますので、マスタサーバーは、バイナリログを出力する必要があります。

また、スレーブサーバーからの接続を許可するための権限を設定する必要があります。

稼働中のデータベースにほとんど影響を与えることなく、設定ができます。


バイナリログの設定

"/etc/my.cnf"に以下の設定を加えて、再起動します。

"log-bin"で、バイナリ出力を指定します。"server-id=10"でサーバーIDを指定します。

[mysqld]
log-bin
server-id=10


バイナリログの確認

mysqldを再起動して、"/var/lib/mysql"を確認します。

# ls -l /var/lib/mysql/
   :
-rw-rw---- 1 mysql mysql 79 Aug 21 00:08 tomo-bin.000001
-rw-rw---- 1 mysql mysql 19 Aug 21 00:08 tomo-bin.index
   :
# 

上記のように、"/var/lib/mysql"に、"xxxx-bin.000001"や、"xxxx-bin.index"ができておればOKです。


接続許可の設定

スレーブからの接続を許可します。

mysql> GRANT REPLICATION SLAVE ON *.* TO repl@192.168.0.0/24 IDENTIFIED BY 'repl'; 

 スレーブサーバーの設定 

作業の概要

バイナリログを取得する設定をします。


設定する

"/etc/my.cnf"に以下の設定を加えて、再起動します。

[mysqld]
server-id=11
master-host=192.168.83.1
master-user=repl
master-password=repl

複数のスレーブを動作させる場合、"server-id"に固有の番号を割り振ればOKです。
 

バイナリログの確認

mysqldを再起動して、"/var/lib/mysql"を確認します。

# ls -l /var/lib/mysql/
   :
-rw-rw---- 1 mysql mysql 82 Aug 23 07:49 tomo-relay-bin.000002
-rw-rw---- 1 mysql mysql 32 Aug 21 09:46 tomo-relay-bin.index
   :
# 

 同期を取ってレプリケーションを開始する 

作業の概要

マスターがすでに稼働中で、後からスレーブを起動させる場合の設定です。

マスターもスレーブも"my.cnf"には、必要な設定はされているものとします。

まずマスタ側で以下の手順を実行します。

  1. マスタの更新を一旦停止します
  2. データベースをtarでコピーします
  3. 停止時点のバイナリーログの位置(Position)をメモします
  4. マスタの更新停止を解除し、通常動作に復帰します

 マスタ側が、サービス中であれば、すばやく実行します。

次に、スレーブ側で以下の手順を実行します。

  1. mysqlを停止し、"my.cnf"を一旦コメントアウトします。
  2. tarを解凍しデータベースイメージを作ります
  3. mysqlを起動して、マスタ情報を設定します
  4. mysqlを停止し、"my.cnf"を有効にします
  5. mysqlを起動します

 スレーブ側は、「バイナリーログの位置(Position)」をメモしておけば、たとえ1日後であっても、起動すればいいです。


マスターのデータの事前取得

以下のコマンドで、データベースのイメージを取得しますが、停止時間を把握するため事前に実行してみます。

データベースを稼動したまま以下を実行します。

# tar cpf /root/mysql-images.tar .
tar: ./mysql.sock: socket ignored
#

同じく2回実行すると、キャッシュ効果で、1回目より早くなるようですので、その意味からも事前に実行しておくのは有益なようです。

"tar: ./mysql.sock: socket ignored"は無視してかまいません。


マスターのデータ取得の実行

端末は2つ必要です。

片方では、MySQLを起動し、"flush tables with read lock" を実行します。


mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

mysql>
 

端末を切り替えて、データ取得を実行します。

# tar cpf /root/mysql-images.tar .
tar: ./mysql.sock: socket ignored
#

終了後、端末を戻して、以下を実行します。


mysql> show master status;
+------------------+-----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| tomo-bin.000001  | 104926   |              |                  |
+------------------+-----------+--------------+------------------+
1 row in set (0.02 sec)

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql>
 


スレーブにデータイメージ解凍

以下のように、まず、MySQLを停止し、既存イメージを削除し、コピーしてきたマスターに入れ替えます。
そして、マスターのバイナリログなどの不要なファイルを削除します。

# service mysqld stop
# cd /var/lib/mysql
# rm -fr *
# tar xpf /root/mysql-images.tar
# rm *-bin.* *.pid *.err

スレーブを正確に同期させるため、"/etc/my.cnf"を以下のようにコメント付にします。

[mysqld]
server-id=11
#master-host=master.good-stream.com
#master-user=slave1
#master-password=slave1

MySQLを起動します。

# service mysqld start
# mysql

バイナリログの位置を指定して、スタートされれば、同期動作の開始です。

mysql> change master to
-> master_host='master.good-stream.com',
-> master_user='slave1',
-> master_password='slave1',
-> master_log_file='tomo-bin.000001',
-> master_log_pos=104926;
Query OK, 0 rows affected (0.16 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql>

しばらくして、一旦停止します。

# service mysqld stop

"/etc/my.cnf"のコメントをはずして、再起動後に、自動的にレプリケーション動作するようにします。

[mysqld]
server-id=11
master-host=master.good-stream.com
master-user=slave1
master-password=slave1

再び起動します。

# service mysqld start

To previous pageTo home pageMailing to meJump to Top of pageline.gif (927 ツバツイツト)line.gif (927 ツバツイツト)tomo.gif (1144 ツバツイツト)
カスタム検索



このエントリーをはてなブックマークに追加