操作系统:CentOS7.2 64bit
1.确认是否开启二进制日志
2.在Master端建立复制用户
3.备份Master端的数据, 并在Slave端恢复
4.使用Change master命令配置复制
假设IP如下(注:我使用的是阿里云,IP指的是私有IP)
Master:172.18.43.91
Slave: 172.18.43.90
// 查看是否开启log_bin
mysql> show variables like 'log_bin';
// 开启
shell> vim /etc/my.cnf
before:
# log_bin
after:
log_bin=mysql-bin
server_id=67 //主要Master和Slave的server_id不能一直,比如Master设置为67,Slave设置为68.这个数字代表的是集群中的编号
//修改配置文件后,重启mysql
shell> service mysqld restart
// 创建用户dba, 注意IP是Slave的私有IP
mysql> create user 'dba'@'172.18.43.90' identified by '123456';
// 赋权限
mysql> grant replication slave on *.* to dba@'172.18.43.90';
// 创建数据库dba
mysql> create database dba;
mysql> use dba;
mysql> create table t(id int, c1 varchar(10), primary key (id));
mysql> insert into t values(1, 'aa'), (2, 'cc') , (3, 'dd');
Master: 备份Master端数据
// dump备份
shell> mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases -uroot -p > all.sql
// 将all.sql文件从master端传送到slave端
shell> scp all.sql root@172.18.43.90:/tmp
Slave:slave端恢复数据
shell> mysql -uroot -p < all.sql
//打开all.sql文件,查看MASTER_LOG_FILE和MASTER_LOG_POS数据
// 使用Change master命令配置复制
mysql> change master to master_host='172.18.43.91', master_user='dba', master_password='123456', master_log_file='mysql-bin.000004'(根据all.sql获得), master_log_pos=1687(根据all.sql获得)
// 查看slave的状态
mysql> show slave status \G;
查询发现Slave_IO_Running和Slave_SQL_Running都是No的状态, 那么启动它
mysql> start slave;
提示一个错误:error connecting to master 'dba@192.168.3.100:3306' - retry-time: 60 retries: 11181
//一种可能是防火墙
查询一下:
shell> iptables -L
发现有很多过滤规则,限制了3306端口的连接,因此关闭防火墙设置,
通过iptables-service来设置防火墙
shell> yum install -y iptables-services
shell>systemctl status firewalld.service #检测是否开启了firewall
shell>systemctl stop firewalld.service #关闭firewall
shell>sytsemctl disable firewalld.service #禁止firewall开机自启
//还有一种就是账号权限问题
之前在创建数据库用户的时候,IP使用的是Master的,导致报错。现在想想其实理解起来很简单,因为我们设置的user主要是slave端访问的,因此IP使用Slave的
mysql> show slave status;
最后的显示结果都为Yes,表示成功了
测试
//在Master插入一条数据,查看Slave端是否同步
mysql> insert into t values (4, 'eee'), (5, 'ddd');
// 查看Slave是否存在两条记录
mysql> select * from t;
错误处理及记录:
在查看slave状态的时候,如果报错误:
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file n
可能原因是Master服务器发生了重启,master_log_file的位置有变动,需要更新
1.查看Master当前日志位置
mysql> show master status;
mysql> flush logs; //可选,但是记住如果运行日志file的位置会+1,比如show master status查询的结果为mysqld-bin.000010,那么flush后为mysqld-bin.000011
2.更新Slave
mysql> change master to master_host='10.92.38.23' ,
master_user='dba',
master_password ='123456',
master_log_file ='mysql-bin.000011',
master_log_pos =120;
3.重启即可
mysql> start slave;