M-S
主服务器: master1
第一步: 打开 bin-log 日志, 设置如下:
- vim /etc/my.cnf
- log_bin
- server-id=1
- gtid_mode=ON
- enforce_gtid_consistency=1
第二步: 进入数据库授权用户
mysql -uroot -p 密码
grant replication slave,replication client no . to rep@域名 identified by 密码;
flush privileges;
查看 slave 状态是否正常:
show slave status\;
第三步: 复制
cd
mysqldump -uroot -p 密码 \
- -A \
- --single-transaction \
- --master-data=2 \
- --flush-logs \
- ./date +%F-all.sql
scp ./-all.sql 域名:/root
从服务器: master2
第一步: 回复之前的数据
mysql -uroot -p 密码
- set sql_log_bin=0;
- source /root/all.sql;
第二步: 设置主服务器
- change master to
- master_host=master1,
- master_user=rep,
master_password = 密码,
master_auto_position=1;
注意; 如果设置错误后可以这样处理 >> stop slave; reset slave ; OK 以后就可以从新在配置一遍, 完好 start slave ; 即可
第三步: 启动 slave;
start slave;
查看状态
show slave status\G;
注意这是接着上一个实验的升级:
如果是做成 M-M 的话, 只需要把上面主服务器上设置一下从服务器的配置即可
mysql -uroot -p 密码
- change master to
- master_host=master2,
- master_user=rep,
master_password = 密码,
master_auto_position=1;
启动 slave;
start slave;
查看状态
show slave status\G;
继续上面的实验环境接着往下完成:
首先去其中任意一个主服务器上备份一个元数据, 完好通过 scp 分别拷贝到另外两台从服务器上, 接下来对从服务器做如下操作:
第一步: 关闭 selinux 关闭 firewalld
第二步: 设置 / etc/my.cnf 中添加
- server-id=3
- gtid_mode=ON
- enforce_gtid_consistency=1
- master_info_repository=TABLE
- relay_log_info_repository=TABLE
第三步: 重启 mysqld
S-S
登录 mysql
进去第一件事就是 把主服务器上发过来的数据恢复:
set sql_log_bin=0;
source 后面更上要恢复的文件路径及名称;
OK 以后, 接下来配置它的 slave:
- change master to
- master_host=master1(这里写主服务器的域名)
- master_user=rep(这里写主服务器上授权的用户名)
- master_password=123(这里写主服务器上授权的密码)
- master_auto_position=1 for channel master1(这里的名字可以自定义);
OK 以后, 如果你有多个主服务器可以在做一次:
- change master to
- master_host=master2(这里写主服务器的域名)
- master_user=rep(这里写主服务器上授权的用户名)
- master_password=123(这里写主服务器上授权的密码)
- master_auto_position=1 for channel master1(这里的名字可以自定义);
这个技术的常见问题点有如下三点:
/etc/selinux/config 中没有关掉 selinux
/etc/my.cnf 中没有打开二进制文件
firewalld 没有关掉
如果另外一台机器是克隆来的话, 就是 uuid 相同的问题, 只需要到
/var/lib/mysql/auto.cnf 中把它的 uuid 改成与其它机器不同即可.
来源: http://www.bubuko.com/infodetail-2536865.html