facebook twitter hatena line email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「マスターipが192.168.1.2 スレーブipが192.168.1.3 として解説 ==master側設定== $ sudo vi /etc/my.cnf [mysqld] # バイナリログの出力先設定...」)
(相違点なし)

2016年1月11日 (月) 20:10時点における版

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

master側設定

$ sudo vi /etc/my.cnf
[mysqld]
# バイナリログの出力先設定
log_bin = /var/lib/mysql/mysql-bin
# レプリケーションサーバーIDの指定
server-id = 2

再起動

$ sudo /sbin/service mysqld start

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

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

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@61.195.96.120 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]
# バイナリログの出力先設定
log_bin = /var/lib/mysql/mysql-bin
# レプリケーションサーバーIDの指定
server-id = 3
# リレーログの出力先設定
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;

stop slave; CHANGE MASTER TO

 MASTER_HOST='121.83.238.175',
 MASTER_PORT=3306,
 MASTER_USER='repl',
 MASTER_PASSWORD='password',
 MASTER_LOG_FILE='mysql-bin.000005', # マスターのbinを入れる
 MASTER_LOG_POS=120; # マスターのポジションidを入れる

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