从oracle到mysql,主从到分库,一个普通项目数据库架构的变迁

简介:

为了节约成本,也是为了顺应去IOE这个大时代的发展,项目的数据库从最初的Oracle切到了MySQL。

开始切到MySQL的时候项目才上线时间不长,当时数据不多,而且当时预计在较长一段时间内数据也不会发生爆炸式的变化,考虑到大部分是读的请求所以考虑用主从架构。

注:存储引擎用的是InnoDB,当时主要是考虑事物的需求,其实在选择存储引擎的时候没有特殊需求都应该选择InnoDB,关于InnoDB和MyISam的区别可参考:MySQL存储引擎之MyISAM、InnoDB详细对比


市面上目前开源且比较有名字的中间件主要有3种,分别是360的atlas、阿里巴巴的Cobar(目前也有叫MyCat,其实应该都是说同一个东西)、淘宝的TDDL。


Atlas https://github.com/Qihoo360/Atlas/wiki

我们将Atlas作为主从架构的中间件,之所以选择Atlas是因为其简单只是做个纯转发的操作,所以对SQL语句的支持度也是很好的,且具有以下特性能满足我们的需求:

1、实现读写分离;

2、实现分表;

3、主库宕机会被自动摘掉不影响从库的读,从库宕机也会被自动摘掉不影响应用;

4、通过管理接口,简化管理工作,DB的上下线对应用完全透明,同时可以手动上下线;

5、所有MYSQL支持的SQLAtlas都支持。换句话说:Atlas并不分析SQL,只是把SQL语句路由到对应数据库节点;

6、支持事物:事物内SQL全部走写节点;

7、为了解决读写分离存在写完马上就想读而这时可能存在主从同步延迟的情况,Altas中可以在SQL语句前增加 /*master*/ 就可以将读请求强制发往主库;

8、能通过client-ips参数对有权限连接Atlas的ip进行过滤;

9、日志中记录所有通过Atlas处理的SQL语句,包括客户端IP、实际执行该语句的DB、执行结果以及耗费的时间。


Atlas架构图:

wKioL1OkCrigVIqgAC2eeBfNwf0940.jpg


缺点:

1、Atlas在主库或者从库宕机摘掉后不会自动恢复,需要自己手动去或者写心跳脚本去处理;

2、不能实现分布式分表,所有的子表必须在同一台DB的同一个database


Cobar

随着接入应用的激增,token表数据在未来可预计的时间内会发生重大变化,单表数据太大主从明显已经力不从心,故而考虑了分库分表,对于此种业务场景cobar是不二的选择。我们使用cobar的一个很重要的考量是团队中有人阅读过并具有修改相关代码的能力,且公司中其他团队有相关的成功使用经验。

cobar架构图:

wKiom1Oo-vCSI3LdACCeCyv5Xsw195.jpg

优点:

1、Mycat支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分;

2、Mycat支持将不同的表放入不同的库。


缺点:

1、支持标准SQL99语法,不支持部分Mysql特定的SQL

2、分库字段不能UPDATE

3、查询条件中尽量带分库字段,否则扫描所有分库节点合并结果集。

4、数据库中新增表后,Mycat中必须修改配置文件,增加表配置。

5、对事物的支持不够好,不支持SAVEPOINT操作。

6、不支持跨库情况下的join、分页、排序、子查询操作。

7、分库情况下,insert语句必须包含拆分字段列名。

8、分库情况下,update语句不能更新拆分字段的值。


以上的都是基于实际工作中的使用经验总结的,因个人使用场景和个人阅历的关系可能不完全准确,仅供参考。



本文转自 古道卿 51CTO博客,原文链接:http://blog.51cto.com/gudaoqing/1429002


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
216 0
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
783 152
|
3月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
3月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
3月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
SQL Oracle 关系型数据库
Oracle转Mysql总结
参考文档 从Oracle转到Mysql前需了解的50件事 MySQL与Oracle 差异比较之一 数据类型 MySQL与Oracle 差异比较之二 基本语法 MySQL与Oracle 差异比较之三 函数 MySQL与Oracle 差异比较之四 条件循环...
1989 0
|
SQL Oracle 关系型数据库
oracle转mysql总结(转)
ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql。 现对转换过程中出现的问题及经验总结如下: 主键生成策略 创建一个专门记录序列的表sequence,记录有当前序列号,序列的间隔如+1 创建记录当前序列的表 DROP...
2167 0
|
3月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
378 93
|
5月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。

推荐镜像

更多