BLOG ENTRY

MySQLのレプリケーション設定[replication][MySQL]

mysql

Windows上にセットアップしたVMのCentOS2台でMysqlのレプリケーションを行う。
Mysqlバージョンは2台とも5.0.45です。

・マスターとスレーブのIPはそれぞれこんな感じです
192.168.1.178←マスタ
192.168.1.179←スレーブ

では作業開始。

1.ユーザー作成

マスタ・スレーブ共通

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY '1234';
mysql> GRANT ALL ON *.* TO repl@localhost IDENTIFIED BY '1234';

2.my.cnfに追記

・192.168.1.178(マスタ)

# vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1

・192.168.1.179(スレーブ)

# vi /etc/my.cnf
[mysqld]
server-id=2
(デフォルトでファイル内にserver-id = 1と書いてある場合に注意)

3、データ共有

・マスタ側にテーブルロックをかけて、マスタからdumpしてスレーブへリストアしてロック解除する

マスターのテーブルロック(テーブルへの書込み禁止)

mysql> FLUSH TABLES WITH READ LOCK;

マスターでdump

# mysqldump --all-databases --lock-all-tables >dbdump.db

スレーブでリストア

# mysql --all-databases < dbdump.db

ロック中にマスターにて以下を実行

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      535 |              |                  |
+------------------+----------+--------------+------------------+
※この結果はスレーブ側の設定に使用します。

4.スレーブにsqlを実行

・スレーブ

CHANGE MASTER TO
    MASTER_HOST='192.168.1.178',        //マスターのホスト
    MASTER_USER='repl',                 //作成したユーザ名
    MASTER_PASSWORD='1234',             //ユーザーのパスワード
    MASTER_PORT=3306,                   //マスターのポート番号
    MASTER_LOG_FILE='mysql-bin.000002', //上で出力したマスターのFile名を代入
    MASTER_LOG_POS=535;                 //上で出力したマスターのPositionの値を代入
この内容はこのファイルに記載されます
/var/lib/mysql/master.info

マスターロック解除
mysql> UNLOCK TABLES;

スレーブにて
mysql> start slave;

ここまでで作業は終了。で、レプリケーションがスタートします。
マスター側で試しに、insert文を打ってみてスレーブで確認してみる。

レプリケーションを落とすときは、スレーブ側で
STOP SLAVE;
(master側は特に何もしなくていいみたい)。

リセットするときは
RESET SLAVE;
RESET MASTER;

その他もろもろメモです。
スレーブで
mysql> SHOW SLAVE STATUS;
を叩いて

             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.1.178
                Master_User: repl
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000001
        Read_Master_Log_Pos: 514
             Relay_Log_File: mysqld-relay-bin.000005
              Relay_Log_Pos: 235
      Relay_Master_Log_File: mysql-bin.000001
           Slave_IO_Running: Yes
          Slave_sql_Running: Yes

こんな感じであればちゃんと動いてくれるはず。
なぜかユーザー名にtestって入ってることに気づかなくてハマりました。sql文でtestとは打ってないのにw

正常に動いているときの実行結果はこんな感じです。

マスター側で、

mysql> SHOW PROCESSLIST;
+----+------+---------------------+-----------+-------------+------+----------------------------------------------------------------+------------------+
| Id | User | Host                | db        | Command     | Time | State                                                          | Info             |
+----+------+---------------------+-----------+-------------+------+----------------------------------------------------------------+------------------+
| 21 | root | localhost           | exampledb | Query       |    0 | NULL                                                           | SHOW PROCESSLIST |
| 48 | repl | 192.168.1.179:54314 | NULL      | Binlog Dump |  476 | Has sent all binlog to slave; waiting for binlog to be updated | NULL             |
+----+------+---------------------+-----------+-------------+------+----------------------------------------------------------------+------------------+
2 rows in set (0.00 sec)

スレーブ側で、

mysql> SHOW PROCESSLIST;
+----+-------------+-----------+-----------+---------+------------+-----------------------------------------------------------------------+------------------+
| Id | User        | Host      | db        | Command | Time       | State                                                                 | Info             |
+----+-------------+-----------+-----------+---------+------------+-----------------------------------------------------------------------+------------------+
|  1 | system user |           | NULL      | Connect |        318 | Waiting for master to send event                                      | NULL             |
|  2 | system user |           | NULL      | Connect | 4294962714 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
|  4 | root        | localhost | exampledb | Query   |          0 | NULL                                                                  | SHOW PROCESSLIST |
+----+-------------+-----------+-----------+---------+------------+-----------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

こまめにSHOW SLAVE STATUSの内容をチェックする必要があるみたいです。

終わり。

No related posts.

WRITE COMMENT


(required)


(required)


(required)

MENU

veltica creative of twitter