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.切换快(秒级切换)。
阅读(2415) | 评论(1) | 转发(0) |