MySQL主从复制实践

一、为什么要用主从复制

在小型单机应用中,往往所有服务都是部署在一台服务器上的,这时候的流量一般也不高。可是当产品不断发展,流量越来越多的情况下,服务器IO性能有限,单机肯定就扛不住了,这时候就只能增加服务器,随之而来的问题就是2台服务器的mysql数据肯定不一致,这时就需要用到主从复制了。

二、主从复制的大致流程

  • master节点在增删改数据后会将操作记录到二进制日志中
  • slave节点的IO线程在连接到master节点后会将二进制日志复制到自己的replay log中。
  • slave节点的SQL线程检测到replay log中增加内容,然后重现其中的操作更新数据
image

三、实现一主一从

MySQL主从复制有多种形式,这里以一主一从的实现过程为例

master的设置

编辑my.cnf

#需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可                  
binlog-do-db=demo
# 二进制存放的目录和名字
log-bin=demo-bin-log
#binlog记录格式,这个参数有3个值
#基于SQL语句的复制(statement-based replication,SBR),对应STATEMENT
#基于行的复制(row-based replication,RBR),对应ROW
#混合模式复制(mixed-based replication,MBR),对应MIXED。
binlog_format=mixed
# 标志 master的唯一标识
server-id=1

重启mysql

输入show master status查看服务器状态

image

一般会选择创建一个有权限同步数据的账号提供给slave使用

#replication slave:表示将同步复制权限授予给用户。
#on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,*表示所有。
#  此外需要说明的是replication slave是全局权限(Global privilege),不能单独指定给数据库级别
#to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制。
#identified by:指定用户的登录密码
grant replication slave on *.* to 'wrath'@'%' identified by '123456';

#重新加载一下权限,将权限信息从内存中写入数据库。
flush privileges;

slave开始同步

#执行同步命令,设置主服务器ip,同步账号密码,同步位置
mysql>change master to master_host='mysql_m',master_user='wrath',master_password='123456',master_log_file='demo-bin-log.000001',master_log_pos=154;
#开启同步功能
mysql>start slave;

查看slave状态

image

Slave_IO_Running及Slave_SQL_Running为Yes状态说明同步正常

Comments

No Data
Total 0
  • 1