facebook twitter hatena line email

「Mysql/レプリケーション」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(master側設定)
 
(同じ利用者による、間の13版が非表示)
行1: 行1:
 +
==レプリケーションとは==
 +
マスターの複製を作成同期する機能
 +
 +
以下用途がある
 +
*バックアップ
 +
*負荷分散
 +
 +
==仕組み==
 +
スレーブからマスターにアクセスしに行って複製を行う。
 +
 +
==この記事でのサーバーIP例==
 
マスターipが192.168.1.2
 
マスターipが192.168.1.2
 
スレーブipが192.168.1.3
 
スレーブipが192.168.1.3
 
として解説
 
として解説
 +
 +
==環境==
 +
*MySQL 5.6.28
 +
*GTIDは使用してない
  
 
==master側設定==
 
==master側設定==
行7: 行22:
  
 
  [mysqld]
 
  [mysqld]
  # バイナリログの出力先設定
+
  # バイナリログのPATH
 
  log_bin = /var/lib/mysql/mysql-bin
 
  log_bin = /var/lib/mysql/mysql-bin
  # レプリケーションサーバーIDの指定
+
  # ユニークなサーバーIDを入れる
 
  server-id = 2
 
  server-id = 2
 +
# レプリケーション対象データベース(この設定はなくても複製された)
 +
replicate-do-db='repl_test'
 +
# レプリケーション対象外データベース(この設定を記述したけど複製された・・どういうことか不明です)
 +
replicate-ignore-db='repl_test3'
  
 
再起動
 
再起動
行28: 行47:
  
 
  [mysqld]
 
  [mysqld]
  # バイナリログの出力先設定
+
  # バイナリログのPATH
 
  log_bin = /var/lib/mysql/mysql-bin
 
  log_bin = /var/lib/mysql/mysql-bin
  # レプリケーションサーバーIDの指定
+
  # ユニークなサーバーIDを入れる
 
  server-id = 3
 
  server-id = 3
  # リレーログの出力先設定
+
  # リレーログのPATH
 
  relay-log=/var/lib/mysql/mysql-relay-bin
 
  relay-log=/var/lib/mysql/mysql-relay-bin
  
行67: 行86:
 
  mysql -urepl -p -h 192.168.1.2
 
  mysql -urepl -p -h 192.168.1.2
  
==mysqlで入れないときはマスター側のファイアウォールが邪魔してないか確認する==
+
==mysqlで入れないときは==
 +
マスター側のファイアウォールが邪魔してないか確認する
 
  $ sudo vi /etc/sysconfig/iptables
 
  $ sudo vi /etc/sysconfig/iptables
 
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
 
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
行74: 行94:
 
==レプリーケーション設定を変更する場合はslaveを一旦止める==
 
==レプリーケーション設定を変更する場合はslaveを一旦止める==
 
  mysql> stop slave;
 
  mysql> stop slave;
 +
 +
==参考==
 +
http://mocmooz.blogspot.jp/2014/03/replication.html
 +
 +
http://qiita.com/suzutsuki0220/items/e5be03ea8f44ad2f6533

2018年1月10日 (水) 15:00時点における最新版

レプリケーションとは

マスターの複製を作成同期する機能

以下用途がある

  • バックアップ
  • 負荷分散

仕組み

スレーブからマスターにアクセスしに行って複製を行う。

この記事でのサーバーIP例

マスターipが192.168.1.2 スレーブipが192.168.1.3 として解説

環境

  • MySQL 5.6.28
  • GTIDは使用してない

master側設定

$ sudo vi /etc/my.cnf
[mysqld]
# バイナリログのPATH
log_bin = /var/lib/mysql/mysql-bin
# ユニークなサーバーIDを入れる
server-id = 2
# レプリケーション対象データベース(この設定はなくても複製された)
replicate-do-db='repl_test'
# レプリケーション対象外データベース(この設定を記述したけど複製された・・どういうことか不明です)
replicate-ignore-db='repl_test3'

再起動

$ sudo /sbin/service mysqld start

スレーブからアクセスするための権限をマスターに追加(パスは適宜変更)

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@192.168.1.3 IDENTIFIED BY 'password';

マスターのポジションidを確認しておく

mysql> show master status;
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     120 |              |                  |                   |

slave側設定

$ sudo vi /etc/my.cnf
[mysqld]
# バイナリログのPATH
log_bin = /var/lib/mysql/mysql-bin
# ユニークなサーバーIDを入れる
server-id = 3
# リレーログのPATH
relay-log=/var/lib/mysql/mysql-relay-bin

再起動

$ sudo /sbin/service mysqld start

レプリーケーション設定実行

mysql> CHANGE MASTER TO
 MASTER_HOST='192.168.1.2',
 MASTER_PORT=3306,
 MASTER_USER='repl',
 MASTER_PASSWORD='password',
 MASTER_LOG_FILE='mysql-bin.000001', # マスターのbinを入れる
 MASTER_LOG_POS=120; # マスターのポジションidを入れる
mysql> start slave;
mysql> show slave status; # ポジションidが同じか確認

サンプル

マスター側で実行

create database repl_test default character set utf8;
create table users(id int unsigned primary key auto_increment, name varchar(127));
insert into users(name) values('taro');

スレーブ側で参照

select * from users;
+----+--------+
| id | name   |
+----+--------+
|  1 | taro   |
+----+--------+

うまくいかないとき

スレーブのdbからマスターのdbに入れるか確認する
mysql -urepl -p -h 192.168.1.2

mysqlで入れないときは

マスター側のファイアウォールが邪魔してないか確認する

$ sudo vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
$ sudo /etc/rc.d/init.d/iptables restart

レプリーケーション設定を変更する場合はslaveを一旦止める

mysql> stop slave;

参考

http://mocmooz.blogspot.jp/2014/03/replication.html

http://qiita.com/suzutsuki0220/items/e5be03ea8f44ad2f6533