MySQL基于日志点的复制操作

操作系统: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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值