当前位置: 首页 > 科技观察

MariaDB:真正的实时同步数据库,MySQL一定要小心

时间:2023-03-11 23:28:42 科技观察

1.背景介绍不管是binlog还是GTID,本质都是I/O_thread和sql_thread形式的同步,因为replicationdelay是避免不了的有饱受诟病,在上述MariaDB的基础上,引入了GaleraCluster来解决这个问题。2.GaleraCluster简介GaleraCluster不同于传统的复制方式。它不通过I/O_thread和sql_thread同步,而是通过更底层的wsrep实现文件系统层面的同步,几乎可以做到实时同步。MySQLonit对此一无所知,需要MySQL能够调用wsrep提供的API。在Mariadb10.1之前,支持GaleraCluster的版本是从Mariadb中单独发布的,其版本名称变成了Mariadb-Galera,Mariadb10。1之后的版本不再单独发布MariaDBGaleraCluste,而是以galera-25.3.12-2.el7.x86_64包的形式发布,比MySQL更强大。MariaDBGaleraCluster同步复制的主要功能:真正的多主,即所有节点可以同时读写数据库自动节点成员控制,自动清除无效节点,新节点添加数据,自动复制真正的并行复制,行级用户可以直接连接Cluster,使用体验和MySQL完全一样MariaDBGaleraCluster的优缺点1.优点:因为是多master,所以没有Slavelag(延迟),没有事务丢失,同时具有读写可扩展性。较小的客户端延迟节点之间的数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能不同。2.缺点:增加新节点时,开销大,需要复制完整的数据,不能有效解决写扩展问题,所有写操作发生在所有节点上,有多少节点就复制多少数据.由于事务提交需要跨节点通信,即涉及分布式事务操作,写入会比主从复制慢很多。越多,写入越慢,死锁和回滚越频繁。对网络要求比较高。如果网络波动不稳定,可能会导致两个节点失去连接,GaleraCluster集群会出现脑裂,服务会失败。不可用有一些限制:仅支持InnoDB/XtraDB存储引擎,任何写入其他引擎的表,包括mysql.*表,都不会被复制。但是DDL语句可以复制,但是insertintomysql.user(MyISAM存储引擎)等插入数据不会被复制。删除操作不支持没有主键的表,因为没有主键的表在不同的节点上顺序不同。IfExecutingselect...limit...会有不同的结果集globaltablelocks一般查询日志不能保存在表中。如果开始查询日志,只能保存在文件中。不能写入大事务,不能操作wsrep_max_ws_rows=131072(rows),writeset不能超过wsrep_max_ws_size=1073741824(1GB),否则客户端直接报错。由于集群处于乐观锁并发控制下,在commit阶段会发生事务冲突。如果两个事务在集群中的不同节点上写入并提交同一行,失败的节点将被回滚,客户端将返回一个死锁错误。XA分布式事务不支持CodershipGaleraCluster,提交时可能会回滚整个集群的写入吞吐量取决于最弱节点的限制。集群必须使用相同的配置。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的原作者MichaelWidenius创立的公司开发的免费开源数据库服务器。4、MariaDB和MySQL的直观区别是MariaDB可以快速查询和处理数据,相对MySQL数据库占用资源少,在运行速度和对Unicode排序的支持方面优于MYSQL数据库。