環境
Windows7 pro
MySQL5.6
MySQLで複数インスタンスを起動できるように設定する
- 2つ目のサービスを作成
すでに動いているインスタンスのmy.iniをコピーして下記の箇所を変更する。
※デフォルトでは下記ディレクトリ
C:\ProgramData\MySQL\MySQL Server 5.6
[mysqld]
port=3308
datadir="C:/ProgramData/MySQL/MySQL Server 5.6/Data2/"
# Server Id.
server-id=2
コマンドプロンプトを管理者権限で実行し、下記のコマンドでサービス登録する
mysqld --install MySQL2 --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.6\my2.ini"
- 起動に必要なテーブルをコピーする
すでに動いているインスタンスのdataフォルダから下記2つのフォルダをコピーする。
mysql
performance_schema
- サービスを起動
管理画面からサービスを起動し、正常に起動することを確認する。
レプリケーション設定
- my.iniに設定を追加する
サービスが動いている場合は、一度停止する。
下記の設定をそれぞれ、追加。
マスター側
[mysqld]
#レプリケーション
gtid-mode=ON
log-slave-updates
log-bin=mysql-bin
binlog-do-db=test
enforce-gtid-consistency
スレーブ側
[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> flush tables with read lock;
次に、masterの現在位置を確認
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コマンドを実行
>mysqldump -u root -p --set-gtid-purged=OFF test > test.dump
ロックを解除
mysql> unlock tables;
- スレーブ側へデータを入れる
testデータベースを作成
mysql>CREATE DATABASE test;
>mysql -u root -P 3308 -p test< test.dump
#スレーブ側の設定を実行する
- マスターからデータを移した場合、
スレーブ側の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> CHANGE MASTER TO
MASTER_HOST = '127.0.0.1',
MASTER_PORT = 3306,
MASTER_USER = 'root',
MASTER_PASSWORD = 'root',
MASTER_AUTO_POSITION = 1;
スレーブのインスタンスに、マスターの情報を設定する。
設定実行後、スレーブとして動作をさせる。
mysql> START SLAVE;
OS再起動した場合は、起動後に上記のコマンドを再度実行する。
自動でスタートさせるには、my2.iniのskip-slave-start
を削除してください。
レプリケーションのステータス表示
# マスターステータスの確認
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
+----------------------------------+-------------+-------------+-------------+---------------+----------------