LoginSignup
7
7

More than 5 years have passed since last update.

Windows環境でMySQLのレプリケーションを設定する

Last updated at Posted at 2015-09-16

環境

Windows7 pro
MySQL5.6

MySQLで複数インスタンスを起動できるように設定する

  • 2つ目のサービスを作成

すでに動いているインスタンスのmy.iniをコピーして下記の箇所を変更する。
※デフォルトでは下記ディレクトリ
C:\ProgramData\MySQL\MySQL Server 5.6

my2.ini
[mysqld]
port=3308
datadir="C:/ProgramData/MySQL/MySQL Server 5.6/Data2/"
# Server Id.
server-id=2

コマンドプロンプトを管理者権限で実行し、下記のコマンドでサービス登録する

command
mysqld --install MySQL2 --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.6\my2.ini"
  • 起動に必要なテーブルをコピーする

すでに動いているインスタンスのdataフォルダから下記2つのフォルダをコピーする。
  mysql
  performance_schema

  • サービスを起動

管理画面からサービスを起動し、正常に起動することを確認する。

レプリケーション設定

  • my.iniに設定を追加する

サービスが動いている場合は、一度停止する。
下記の設定をそれぞれ、追加。

マスター側

my.ini
[mysqld]
#レプリケーション
gtid-mode=ON
log-slave-updates
log-bin=mysql-bin
binlog-do-db=test
enforce-gtid-consistency

スレーブ側

my2.ini
[mysqld]
#レプリケーション
gtid-mode=ON
log-slave-updates
log-bin=mysql-bin
binlog-do-db=test
enforce-gtid-consistency
skip-slave-start

スレーブ側には追加でskip-slave-startを追加で設定

マスター、スレーブのサービスを起動する。

マスター、スレーブのテーブルを同期する

マスター側にすでにデータが存在する場合は、下記の手順を実行しデータの状態を一致させる。

  • マスター側データベースのダンプを取得する

はじめに、マスター側をロックする

mysql
mysql> flush tables with read lock;

次に、masterの現在位置を確認

mysql
mysql> show master status;
+------------------+----------+--------------+------------------+--------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                          |
+------------------+----------+--------------+------------------+--------------------------------------------+
| mysql-bin.000038 |      191 | test         |                  | 71fdb639-209d-11e5-a233-b888e3335e2f:1-599 |
+------------------+----------+--------------+------------------+--------------------------------------------+
1 row in set (0.00 sec)

別窓でmysqldumpコマンドを実行

command
>mysqldump -u root -p --set-gtid-purged=OFF test > test.dump

ロックを解除

mysql
mysql> unlock tables;
  • スレーブ側へデータを入れる

testデータベースを作成

mysql
mysql>CREATE DATABASE test;
command
>mysql -u root -P 3308 -p test< test.dump

スレーブ側の設定を実行する

  • マスターからデータを移した場合、 スレーブ側のMySQLで下記のクエリを実行する。
mysql
mysql> CHANGE MASTER TO 
          MASTER_HOST = '127.0.0.1',
          MASTER_PORT = 3306,
          MASTER_USER = 'root',
          MASTER_PASSWORD = 'root',
          MASTER_AUTO_POSITION = 0,
          MASTER_LOG_POS = 191,
          MASTER_LOG_FILE = 'mysql-bin.000038';

MSTER_LOG_POS と MASTER_LOG_FILE は事前に確認しておいたマスターの現在位置を使用する。

  • マスターが空の場合
mysql
mysql> CHANGE MASTER TO 
          MASTER_HOST = '127.0.0.1',
          MASTER_PORT = 3306,
          MASTER_USER = 'root',
          MASTER_PASSWORD = 'root',
          MASTER_AUTO_POSITION = 1;

スレーブのインスタンスに、マスターの情報を設定する。
設定実行後、スレーブとして動作をさせる。

msyql
mysql> START SLAVE;

OS再起動した場合は、起動後に上記のコマンドを再度実行する。
自動でスタートさせるには、my2.iniのskip-slave-startを削除してください。

レプリケーションのステータス表示

command
# マスターステータスの確認
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000005 |      191 | test         |                  | 71fdb639-209d-11e5-a233-b888e3335e2f:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+

# スレーブステータスの確認
mysql> show slave status;
+----------------------------------+-------------+-------------+-------------+---------------+----------------
| Slave_IO_State                   | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File  | 
+----------------------------------+-------------+-------------+-------------+---------------+---------------- 以下省略
| Waiting for master to send event | 127.0.0.1   | root        |        3306 |            60 | mysql-bin.00000                 
+----------------------------------+-------------+-------------+-------------+---------------+----------------
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7