「Mysql/レプリケーション」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→レプリケーションとは) |
(→master側設定) |
||
(同じ利用者による、間の8版が非表示) | |||
行1: | 行1: | ||
==レプリケーションとは== | ==レプリケーションとは== | ||
− | + | マスターの複製を作成同期する機能 | |
以下用途がある | 以下用途がある | ||
行9: | 行9: | ||
スレーブからマスターにアクセスしに行って複製を行う。 | スレーブからマスターにアクセスしに行って複製を行う。 | ||
− | == | + | ==この記事でのサーバー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側設定== | ||
行18: | 行22: | ||
[mysqld] | [mysqld] | ||
− | # | + | # バイナリログのPATH |
log_bin = /var/lib/mysql/mysql-bin | log_bin = /var/lib/mysql/mysql-bin | ||
− | # | + | # ユニークなサーバーIDを入れる |
server-id = 2 | server-id = 2 | ||
− | # レプリケーション対象データベース | + | # レプリケーション対象データベース(この設定はなくても複製された) |
replicate-do-db='repl_test' | replicate-do-db='repl_test' | ||
− | # レプリケーション対象外データベース( | + | # レプリケーション対象外データベース(この設定を記述したけど複製された・・どういうことか不明です) |
replicate-ignore-db='repl_test3' | replicate-ignore-db='repl_test3' | ||
行43: | 行47: | ||
[mysqld] | [mysqld] | ||
− | # | + | # バイナリログのPATH |
log_bin = /var/lib/mysql/mysql-bin | log_bin = /var/lib/mysql/mysql-bin | ||
− | # | + | # ユニークなサーバーIDを入れる |
server-id = 3 | server-id = 3 | ||
− | # | + | # リレーログのPATH |
relay-log=/var/lib/mysql/mysql-relay-bin | relay-log=/var/lib/mysql/mysql-relay-bin | ||
行90: | 行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;