1. 环境
操作系统:CentOS-7
MySQL:mysql-5.6
一台虚拟机又克隆了两台
192.168.102.31 master
192.168.102.56 slave
192.168.102.36 slave
启动/停止
service mysqld start|stop|restart
systemctl start|stop|restart mysqld
本机的话,直接mysql就可以进去了
2. 主数据库配置
第1步:编辑/etc/my.cnf文件,在[mysqld]下增加如下两行设置:
[mysqld]
server-id=1 #必须,其他可不写,有默认
log_bin=mysql-bin
#binlog-do-db=kevin #需要同步的数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
第2步:创建用于数据同步的账户
CREATE USER 'repl'@'192.168.102.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.102.%';
FLUSH PRIVILEGES;
第3步:查看master状态
show master status;
3. 从数据库配置
第1步:编辑/etc/my.cnf文件,设置server-id
[mysqld]
server-id=2 #必须
log_bin=mysql-bin
#replicate-do-db=kevin #需要同步的数据库名。如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。
replicate-ignore-db=mysql
slave-skip-errors = all
第2步:执行同步语句,并启动slave
change master to master_host='192.168.102.31', master_user='repl', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=514;
第3步:查看slave状态
show slave status;
另外一台从数据库也是这样设置
4. 验证是否同步成功
在主数据上操作,从数据库中查看
5. 设置只读账户
mysql> create user 'pig'@'%' identified by '123456';
mysql> grant select on test.* to 'pig'@'%';
mysql> flush privileges;
6. start slave 报错 1872 - Slave failed to initialize relay log info structure from the reposito
my.cnf 未指定 relay_log,mysql 默认产生的 relay_log名 被 server 上的另一个mysql slave 占用
解决办法:
(1)reset slave all #清空从库主从信息
(2)指定 relay_log:在 my.cnf 中添加 relay_log=/db/mysql56/logs/relay_98_3326
7. 参考
https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html
http://www.cnblogs.com/gl-developer/p/6170423.html