分享MYSQL中的各种高可用技术(源自姜承尧大牛)
分享MYSQL中的各种高可用技术(源自姜承尧大牛)
图片和资料来源于MYSQL大牛姜承尧老师( MYSQL技术内幕作者 )
姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发
mysql高可用各个技术的比较
数据库的可靠指的是数据可靠
数据库可用指的是数据库服务可用
可靠的是数据 :例如工商银行,数据不能丢失
可用的是服务 :服务器不能宕机
方案一:MYSQL主从复制(单活)
投票选举机制,较复杂
MySQL本身没有提供replication failover的解决方案,自动切换需要依赖 MHA脚本
可以有多台从库,从库可以做报表和备份
方案二:双主(单活),failover比单主简单
同样,自动切换需要 MMM脚本
缺点是某个主挂掉了,他下面的slave同样挂掉
方案三:双主配SAN存储(单活)
这个架构跟方案二是一样的,只不过两个master之间不需要同步数据,因为他们用的是共享磁盘
这个方案是 有钱人方案 ,无论哪个主挂掉都不会引起其他的slave挂掉,但是SAN存储死贵。。
像通信行业中国联通这些公司有用到
某个主挂掉了,下面的slave不会挂掉
注意:failover之后不会预热,数据没有预先加载到内存中,切换之后一段时间内存储会有一定的性能影响
方案四:DRBD 双主配 DRBD (单活)
结构跟方案三一样,唯一不同的是没有使用SAN网络存储 ,而是使用 local disk
由于是实时复制磁盘数据,性能会有影响
人们把DRBD称为 “屌丝的SAN”
POOR MAN'S SAN:穷人的SAN
方案五:NDB CLUSTER
国内用NDB集群的公司很少,貌似有些银行有用
NDB集群不需要依赖第三方组件,全部都使用官方组件,能保证数据的一致性
某个数据节点挂掉,其他数据节点依然可以提供服务
管理节点需要做冗余以防挂掉
缺点是:管理和配置都很复杂,而且某些SQL语句例如join语句需要避免
方案六:第三方的Tungsten软件
使用java编写,不是MYSQL内置的
同样是MYSQL数据库复制,不过他不是用MYSQL内置的组件来做的
不但支持MYSQL数据库复制也支持异构数据库的复制,而且对异构数据库复制支持较好,例如MYSQL复制到ORACLE
方案七:网易的INNOSQL
类似于SQLSERVER的 镜像高安全模式
High Safety 模式 (也就是同步模式)没有 witness服务器
数据库在Principle的事务, 需要马上得到mirror的确认,才能完成 。这种情况下,Mirror和Principle的数据是同步的。
但是因为所有的事务需要mirror的确认,所以性能可能会有所影响。
区别:innosql的slave可以读,镜像的slave(从库)不可读
保证数据不会丢失,数据的高可靠性
mysql5.7开始支持这种模式
总结
每种方案都有不同的特点,配置和应用场景也各有不同
有些偏向于成本低的,有些偏向于成本高的,有些偏向于数据的可靠性,有些则偏向于数据库的可用性
反正各个方案都各有优缺点,DBA要结合自己公司的业务情况进行选择合适自己业务情况的高可用方案
更多参考资料:
读写分离:Amoeba
Ubuntu10下MySQL搭建Amoeba系列(文章索引)
集群技术:数据库集群技术漫谈
如有不对的地方,欢迎大家拍砖o(∩_∩)o

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

InnoDB使用redologs和undologs确保数据一致性和可靠性。1.redologs记录数据页修改,确保崩溃恢复和事务持久性。2.undologs记录数据原始值,支持事务回滚和MVCC。

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

MySQL在数据库和编程中的地位非常重要,它是一个开源的关系型数据库管理系统,广泛应用于各种应用场景。1)MySQL提供高效的数据存储、组织和检索功能,支持Web、移动和企业级系统。2)它使用客户端-服务器架构,支持多种存储引擎和索引优化。3)基本用法包括创建表和插入数据,高级用法涉及多表JOIN和复杂查询。4)常见问题如SQL语法错误和性能问题可以通过EXPLAIN命令和慢查询日志调试。5)性能优化方法包括合理使用索引、优化查询和使用缓存,最佳实践包括使用事务和PreparedStatemen

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL索引基数对查询性能有显着影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL适合小型和大型企业。1)小型企业可使用MySQL进行基本数据管理,如存储客户信息。2)大型企业可利用MySQL处理海量数据和复杂业务逻辑,优化查询性能和事务处理。
