Mysql_主从复制原理

复制的基本原理

slave从master读取binlog来进行数据同步
主从复制原理图
复制过程:

  1. master将改变记录到二进制日志(binary log),这些记录过程叫做二进制日志事件,binary log events;
  2. slave将master的binary log events拷贝到它的中继日志(relay log);
  3. slave重做中继日志中的事件,将改变应用到自己的数据库中,mysql的复制是异步的且串行化的。

复制的基本原则

  • 每个slave只有一个master
  • 每个slave只能由一个唯一的服务器ID
  • 每个master可以有多个slave

一主一从常见配置

  • mysql版本最好一致且后台以服务运行
  • 主从都配置在[mysqld]节点下,都是小写
  • windows主机的my.ini配置文件
server-id=1               # 【必须】主服务器唯一ID
log-bin=自己本地路径/mysqlbin  # 【必须】启用二进制日志
log-err=自己本地路径/mysqlerr  # 【可选】启用错误日志
basedir=自己本地路径          # 【可选】根目录
tmpdir=自己本地路径           # 【可选】临时目录
datadir=自己本地目录/data     # 【可选】数据目录

binlog-ignore-db=mysql   # 【可选】设置不要复制的数据库
binlog-do-db=需要复制的主数据库名   # 【可选】设置需要复制的数据库
binlog-format=STATMENT(以前默认)     # 【可选】设置binlog的记录格式
# STATMENT
# ROW(现在默认)
# MIXED

STATEMENT : 记录每次操作数据库的sql操作,从库按照sql逐次执行,但凡sql中出现了类似now()这种函数,会造成主从数据的不一致情况。
 
ROW : 记录每一行数据的改变,但是如果在主库中一条sql改变了大量的数据,造成行的改变太多,会造成从数据库同步次数太多,同步效率低下。
 
MIXED : 在 STATEMENT 和 ROW 之间灵活切换,如果出现类似@@hos tname这样的系统变量,也可能造成主从数据不一致的情况,无法避免。

  • linux从机的my.cnf配置文件
server-id=2         # 【必须】从服务器唯一ID
relay-log=mysql-relay   # 【可选】设置中继日志文件前缀,不配置会有默认值
log-bin=mysql-bin   # 【可选】启用二进制日志,做从的同时有做主就需要配置

  • 重启mysql服务(主从都要进行),使配置生效

  • 主机上建立账户并授权给slave

grant replication slave on *.* to 'zhangsan'@'从机数据库IP' identified by 'password';
flush privileges;
show master status;

-- 如果数据库被修改了,需要重置一下master状态
reset master;
  • 在从机上配置需要复制的主机
change master to master_host='主机IP',master_port=3306,
master_user='zhangsan', master_password='password',
master_log_file='file名字',master_log_pos=posistion数字;

# 启动IO和 SQL线程thread
start slave;
show slave status \G

-- 如果出现故障,需要重置slave状态后,重新设置master的配置
stop slave;
reset slave;
change master to ...;
start slave;

复制的最大问题

复制的最大问题是“延时“。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值