MySQL搭建主从复制

MySQL主从复制是使用最多的高可用架构,主库写入数据,通过主从复制同步到从库。从库只读,如果配置了读写分离和负载均衡,那么除了写入数据只能在主库进行,读流量完全可以分配到从库上,减少主库的压力。下面将详细介绍MySQL主从复制搭建的过程。

MySQL配置:

  • 开启binlog:log_bin=/mysql/binlog/mysql-bin
  • 开启gtid:gtid_mode=ON

MySQL 5.6 版本引入GTID之后,传统的基于binlog file + position方式的复制已经很少使用,这里不再介绍这种file+position方式的主从复制搭建。

一、创建复制账号

在主、从节点上分别创建复制账号。
set sql_log_bin=0;
create user repl@’%’ identified by ‘password’;
grant  replication slave on *.* to ‘repl’@’%’;
set sql_log_bin=1;

二、空库搭建主从复制

(1)依次在主、从库执行reset master;
(2)在从库执行:
change master to master_host=’主库ip’, master_port=3306,master_user=’repl’,master_password=’password’,master_auto_position=1;
start slave;

三、非空库搭建主从复制

(1)使用xtrabackup或者mysqldump获取主库的备份,同时得到一致性备份点gtid,比如:
7fd59ca1-ef4c-11e7-bdad-fa163e1c09f1:1-36530977
(2)使用备份恢复到从库。
(3)启动从库,在从库执行:
reset master;
set global gtid_purged=’7fd59ca1-ef4c-11e7-bdad-fa163e1c09f1:1-36530977′;
change master to master_host=’主库ip’, master_port=3306,master_user=’repl’,master_password=’password’,master_auto_position=1;
start slave;

四、检查主从复制是否成功

在从库执行:
show slave statusG

观察以下两个字段是否为Yes:
Slave_IO_Running
Slave_SQL_Running

如果都为Yes,说明主从复制正常,否则主从复制有问题,需要进一步排查问题。

五、常见的主从复制问题
  1. 主从网络不通,可以通过主从机器相互ping,来确认网络是否正常。
  2. 端口是否可以访问,可以通过telnet ip 3306,来确认3306端口是否正常。
  3. 复制账号用户名密码、授权是否正常。可以通过在从库上使用复制账号连接主库,来检测复制账号、授权是否正常。
  4. 主从数据冲突,导致主从复制报错。使用备份工具在主库做一次最新的备份,使用该备份重新搭建主从复制即可。
  5. 主库binlog已被清除,导致主从复制报错。同样使用备份工具在主库做一次最新的备份,使用该备份重新搭建主从复制即可。

发表评论