Chinaunix首页 | 论坛 | 博客
  • 博客访问: 646029
  • 博文数量: 66
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 2204
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-26 21:43
个人简介

曾就职于阿里巴巴担任Oracle DBA,MySQL DBA,目前在新美大担任SRE。[是普罗米修斯还是一块石头,你自己选择!] 欢迎关注微信公众号 “自己的设计师”,不定期有原创运维文章推送。

文章分类

全部博文(66)

文章存档

2017年(2)

2016年(3)

2015年(7)

2014年(12)

2013年(42)

分类: Mysql/postgreSQL

2014-01-08 14:49:17

1.复制原理
2.二进制日志及日志模式
3.Async vs Sync replication
4.master-slave架构解决问题
5.MM架构解决问题及潜在的问题
6.MySQL vs Oracle

什么是复制?
 1.MySQL Replication
一台mysql数据库服务器(master)的数据可以传输到一台或多台数据库服务器(slave)




1.目前使用的Asynchronous(semi-sync在5.5及5.5之后支持,目前使用较少),在主库crash的情况下,不能保证主备数据一致。
2.只有单个sql线程进行relay log的解析和重演,在主库dml比较频繁的情况下,备库恢复的速度可能滞后主库。(5.6之后支持多线程)。
二进制日志


什么是Binlog?
1.主备之间通过binlog保持数据同步,何为binlog?
2.binlog!=transaction log(redo log).
3.包括数据所有的write(ddl/dml)的日志记录。
4.支持两种模式格式化的数据statement/row。
5.relay logs同样是binlog
Binlog_format=1.Statement :master执行的dml/ddl写入binlog,在slave执行相同的sql.
  statement优点:
   (1) 从mysql 3.23开始一直使用的模式,技术成熟。
   (2) 由于binlog 仅写入执行的sql,所以占用的空间少,意味着在做从备份中做restore需要的时间更短 。
   (3) 包含在数据库上执行的所有的dml/ddl,可用于对数据库的审计。
缺点:
   (1) statement可能不能正确地复制,及存在主备库数据不一致的情况:
   (1.1)在dml中使用一些包含不确定返回值的用户自定义函数或存储过程。
   (1.2)delete/update  与limit一起使用但未使用order by 的sql。
   (1.3)在dml中使用uuid(), USER(), SYSDATE(), VERSION()等等函数。
   (2)insert ..select 需要更多的 锁资源(相对于row模式)。
   (3)update 可能会锁住更多的记录 。
  ………..
 Row:所以的dml都拆分成对每条记录(涉及到的)的dml。
   优点:
     1.对于使用不确定函数的dml语句,将函数的返回值带入dml,写入binlog,确保主备数据一致。
     2.对于批量操作,需要的锁资源更少。
   ….
缺点:
1. 对于dml影响大量记录的语句,需要更多的空间(需要将每一条记录的改变拆分出来),可能会导致binlog长时间锁住,从而带来并发问题 ?
2.对于使用UDF产生BLOB的dml,需要更长时间的复制 。
3.不能在binlog中精确定位执行的dml语句。
4.对于myisam的insert不支持并发插入。

Mysql Async Replication

Mysql不关心binlog是否传到备库,是否被应用,继续做自己的事情。在主库写比较频繁的情况下,而备库跟不上主库的情况较为常见,目前看来。

Semi-sync

Semi-sync介于sync和async之间 。
Master commit后等待,直到至少有一个slave接收到相关events,并刷到relay log,并不保证binlog 被应用并commit到slave。
1.优点
 当事务返回客户端成功后,则日志一定在至少两台主机上存在。
2.缺点
单条事务的延迟增加了,延迟的程度取决于网络的好坏 。
备库crash时,主库会在某次等待超时后,关闭semi-sync,降级到async.
可以设置多个备库,任何一个备库接受完日志后,即返回给客户端 ,减少事务的平均延迟。

master-slave常见搭建 
1.master-salve


2.Master->mult-slaves



Master-slave/multi-slaves
有效的解决读是瓶颈的问题。
将大批量的读放在不同的slave进行。
ddl操作可以放在slave进行。
Note:
 对于写比较频繁的系统(比如记录流水的应用),并没有很好的缓解系统的压力。

Master-Master

使用场景:(1)高可用(一台主库挂掉的情况可以快速切换) 。
                 (2)日常的维护(ddl).  
                 (3)是否可以提供双写 ???   

Master-Master(DDL)       
step1:


step2:

至此ddl完成,对业务完全没有影响 。

Master-Master提供双写带来的问题
1.主键冲突
2.其他唯一索引/约束冲突
3.数据不一致
导致复制终止。

多台MM的环状结构(提供读写)MM提供双写存在的问题:
1.存在数据不一致的情况。
2.会发生记录冲突,导致复制终止。

MySQL vs Oracle
Mysql与Oracle相比:
1.比较灵活,轻,小。
2.主备都可提供访问,支持双master。
3.开源,免费。
4.切换快(秒级切换)。
5.消耗资源相对较少。
6.Bug修复快。

阅读(2370) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

zxszcaijin2014-01-10 10:51:12

我的图片怎么看不到了。。。