mysql复制

mysql的复制是异步的,所以slave机器不是一直连接来接受master上的更新,在5.6版本支持半同步复制,在半同步中master在至少一个slave接收更新并写入中继日志返回确认信息后才会提交,5.6也支持延时复制,slave的机器故意的延时至少指定的时间来复制。5.6.5之后开始支持基于全局事务标识符的事务的复制,当使用这种方式的复制时候,不必直接的使用log 文件或这些文件中的位置,很大的简化了任务。

基于语句与基于行的复制的优势与劣势

基于语句的复制的优势:

1更少的数据写入日志文件

2日志文件中是语句,可以用来审计数据库

基于语句的复制的劣势:

1语句是不安全的,并不是所有的语句都能被复制,任何不确定的行为都是有风险的,例如:

依赖UDF的语句或存储过程

delete update没有加order by 的limit语句

使用下面函数的语句不能被安全的复制


now()能够被正确的复制。如果有语句可能不会被正确的复制,那么在日志中会有下面的提示信息:

[Warning] Statement is not safe to log in statement format.
insert ...select要求更多的行锁

对innodb,使用auto_increment的insert语句阻塞别的非冲突的insert语句

对复杂的语句,语句在slave上必须要被评估和执行,基于行的复制,slave只修改受影响的行,不执行全部的语句。


基于行复制的优势:

1所有的改变被复制

2在master上需要更少的锁

3在slave上对dml语句需要更少的行锁

基于行复制的劣势:

1可能产生更多需要被记录的数据,行复制写每个改变到二进制日志,如果语句改变了很多的行,基于行的复制可能写大量的数据到二进制日志中,也就是说备份和恢复要很多的时间。二进制日志会被锁很长的时间,可能引起并发的问题,使用binlog_row_image=minimal来明显的减少不利条件。

2不能再slave上看到语句,可以使用带--base64-output=DECODE-ROWS和--verbose选项的mysqlbinlog来查看数据的改变。

3使用MyISAM的行复制,并发插入是不被支持的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值