MariaDB:真正的实时同步数据库,MySQL要当心了

1、背景介绍

不管是采用binlog或者GTID的方式,其本质都是经过I/O_thread和sql_thread的形式进行的同步,由于没法避免复制延迟而饱受诟病,基于上述MariaDB引入了Galera Cluster来解决此问题。mysql

2、Galera Cluster介绍

Galera Cluster与传统的复制方式不一样,不经过I/O_thread和sql_thread进行同步,而是在更底层经过wsrep实现文件系统级别的同步,能够作到几乎实时同步,而其上的MySQL对此一无所知sql

这就要求MySQL可以调用wsrep提供的API来完成,在Mariadb10.1以前的版本,支持Galera Cluster的版本是与Mariadb分开发行的,其版本名称就成为Mariadb-Galera,Mariadb10.1之后的版本中MariaDB Galera Cluste再也不单独发行,而是以galera-25.3.12-2.el7.x86_64包的形式出现方面都强过MySQL。数据库

MariaDB Galera Cluster主要功能服务器

同步复制:真正的multi-master,即全部节点能够同时读写数据库自动的节点成员控制,失效节点自动被清除新节点加入数据自动复制真正的并行复制,行级用户能够直接链接集群,使用感觉上与MySQL彻底一致网络

MariaDB Galera Cluster的优缺点并发

1.优点:异步

  • 由于是多主,因此不存在Slavelag(延迟)
  • 不存在丢失事务的状况
  • 同时具备读和写的扩展能力
  • 更小的客户端延迟
  • 节点间数据是同步的,而Master/Slave模式是异步的,不一样slave上的binlog多是不一样的

2.缺点:分布式

  • 加入新节点时开销大,须要复制完整的数据
  • 不能有效地解决写扩展的问题,全部的写操做都发生在全部的节点
  • 有多少个节点,就有多少份重复的数据
  • 因为事务提交须要跨节点通讯,即涉及分布式事务操做,所以写入会比主从复制慢不少,节点越多,写入越慢,死锁和回滚也会更加频繁
  • 对网络要求比较高,若是网络出现波动不稳定,则可能会形成两个节点失联,Galera Cluster集群会发生脑裂,服务将不可用

还有一些地方存在局限:ide

  1. 仅支持InnoDB/XtraDB存储引擎,任何写入其余引擎的表,包括mysql.*表都不会被复制。可是DDL语句能够复制,可是insert into mysql.user(MyISAM存储引擎)之类的插入数据不会被复制
  2. Delete操做不支持没有主键的表,由于没有主键的表在不一样的节点上的顺序不一样,若是执行select … limit …将出现不一样的结果集
  3. LOCK/UNLOCK TABLES/FLUSH TABLES WITH READ LOCKS不支持单表所锁,以及锁函数GET_LOCK()、RELEASE_LOCK(),但FLUSH TABLES WITH READ LOCK支持全局表锁
  4. General Query Log日志不能保存在表中,若是开始查询日志,则只能保存到文件中
  5. 不能有大事务写入,不能操做wsrep_max_ws_rows=131072(行),且写入集不能超过wsrep_max_ws_size=1073741824(1GB),不然客户端直接报错
  6. 因为集群是乐观锁并发控制,所以,在commit阶段会有事务冲突发生。若是两个事务在集群中的不一样节点上对同一行写入并提交,则失败的节点将回滚,客户端返回死锁报错
  7. XA分布式事务不支持Codership Galera Cluster,在提交时可能会回滚
  8. 整个集群的写入吞吐量取决于最弱的节点限制,集群要使用同一的配置

3、 MariaDB与Mysql的对比

1.MariaDB发展趋势和更新频率

毕竟基于MySQL创始人领衔开发的MariaDB数据库,确定是知道MYSQL数据库存在的弱项,而后提供更好的兼容性和扩展性,咱们基本上彻底能够将MYSQL数据库建议到MariaDB数据库中,并且MariaDB发展速度和升级速度远远优先。函数

2.MySQL封闭且发展缓慢

因为MySQL在被收购以后更新速度与性能的优化很是的缓慢,并且是闭源的,彻底没有Oracle以外的人参与进来,不少须要解决的问题都没有升级进去,反之不少公司虽然也有利用本身开发的分支Mysql版本。

3.MariaDB的特色和优点

MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,MariaDB默认的存储引擎是Aria,不是MyISAM。Aria能够支持事务,可是默认状况下没有打开事务支持,由于事务支持对性能会有影响。MariaDB是一个采用Maria存储引擎的MySQL分支版本,是由原来 MySQL 的做者Michael Widenius创办的公司所开发的免费开源的数据库服务器。

4.MariaDB与MySQL对比

这个直观的区别在于MariaDB可以快速的查询和处理数据,且占用资源相对是少于MySQL数据库的,并且在运行速度、以及支持对 Unicode 的排序问题优于MYSQL数据库。

相关文章
相关标签/搜索