核心业务系统数据库平台迁移: Oracle -> MySQL

Tuesday, August 24th, 2010

为了对核心技术拥有更多的自主控制能力,为了解决数据库的线性扩展问题,为了尽量减少对商业软件的依赖,为了摆脱对高端硬件的依赖,为了… 基于以上多种原因,2年前,我们计划将公司某核心应用平台进行大手术:数据库平台从软件到硬件全部重构。当然,这其中应用架构的改造也不可避免的进行了大 换血。
这个项目无论是从技术角度还是是业务角度来说,都对我们有着非常大的价值,也必定会带来非常深远的影响。项目历时2年多,分4个阶段才完成:

应用接口统一
这一阶段主要是为了后面真正迁移的时候做准备工作,将该核心应用系统的所有数据访问入口统一到一起,全部以服务化的接口方式呈现给其他有需要的系统,一来方便后续变更的控制,二来也推进了服务化的进程。

Oracle数据库中拆分(1拆16)
这个阶段本不是必要的,但是由于项目启动稍微晚了点,数据出现了爆发性增长,导致该系统的数据表太大(单表不带索引过500GB),原 Oracle 数据库已经快撑不住了。为了安全起见,先在 Oracle 中从一个主表以会员ID进行 hash 运算后再进行水平拆分,从1个表分拆成了16个。附表由于访问量稍小,而且全部是根据主键访问,暂时保留原样。
当然,这样的水平拆分,必然会带来数据访问路由以及数据合并的问题。我们专门为此开发了具有分布式数据库路由/数据合并,数据库读写分离,数据库链接管理等功能的数据访问中间层,专门解决拆分后给应用服务器带来的影响,使得应用服务器完全感受不到后端数据库的变化。
这个数据访问中间层,对前端应用服务器来说,就是一个完整的数据库,所有数据请求都从这里实现,以协议的方式和前端应用服务器的jdbc驱动进行交互,以便让数据库对应用服务器彻底透明。

Oracle迁移至 MySQL(16拆128)
这个阶段是整个阶段中历时最长,复杂度最高,风险系数最高的,未知因素也最多的一个阶段。虽然 MySQL 数据库已经在互联网行业占据了大片江山,但是对于阿里巴巴来说,却仍然是一个新鲜玩意儿,因为之前我们一直都用 Oracle 来提供所有的业务系统的数据库服务。
在此之前,我们从来没有在如此核心业务系统的数据库上使用过 PC Server 和本地硬盘来承载数据库,一直是使用 IBM 小型机和中高端存储设备来解决高性能和高可靠的问题。在更换成 PC Server 和本地硬盘来承载数据库之后,我们就必须面对 PC Server 本身硬件可能存在的不可靠性所带来的 Crash,所以我们必须有一套完善的 HA 切换机制,要比小型机厂商所提供的商业 HA 管理软件更加高效更加自动化更加可控,才能我们降低了设备本身可靠性之后达到原有的可用性要求。
对于一个需要满足 365 * 24 * 7 的核心业务系统来说,肯定是不可能给我们太多时间来进行数据迁移的,所以我们不得不设计出一个对现有系统影响尽可能小的迁移方案,这势必会造成方案的高度复杂化,带来更多的风险。最后的迁移方案要经历如下4个阶段:
1. Oracle 读/写;;MySQL 初始化并增量写
2. Oracle 读/写; MySQL 写
3. Oracle 写; MySQL 读/写
4. Oracle [...]

MySQL Query Cache 小结

Monday, July 5th, 2010

最近经常有人问我 MySQL Query Cache 相关的问题,就整理一点 MySQL Query Cache 的内容,以供参考。
顾名思义,MySQL Query Cache 就是用来缓存和 Query 相关的数据的。具体来说,Query Cache 缓存了我们客户端提交给 MySQL 的 SELECT 语句以及该语句的结果集。大概来讲,就是将 SELECT 语句和语句的结果做了一个 HASH 映射关系然后保存在一定的内存区域中。
在大部分的 MySQL 分发版本中,Query Cache 功能默认都是打开的,我们可以通过调整 MySQL Server 的参数选项打开该功能。主要由以下5个参数构成:

query_cache_limit:允许 Cache 的单条 Query 结果集的最大容量,默认是1MB,超过此参数设置的 Query 结果集将不会被 Cache
query_cache_min_res_unit:设置 Query Cache 中每次分配内存的最小空间大小,也就是每个 Query 的 Cache 最小占用的内存空间大小
query_cache_size:设置 Query Cache 所使用的内存大小,默认值为0,大小必须是1024的整数倍,如果不是整数倍,MySQL 会自动调整降低最小量以达到1024的倍数
query_cache_type:控制 [...]

《MySQL性能调优与架构设计》最新勘误

Monday, July 6th, 2009

推荐序二
“当年加入淘宝的毕业生成了淘宝开发 DBA 的主管,他就是本书的作者” -> “当年加入淘宝的毕业生成了淘宝开发DBA的主管,而当年加入阿里巴巴B2B的毕业生,就是本书的作者”
P90
“假设 id 为 100″ -> “假设 id 为 1″
“取出前20个” -> “取出第100至120个”
“通过调用存储引擎借口来获取” -> “通过调用存储引擎接口来获取”
P91
代码 6-4 的解决方案一中 “LIMIT” 之前增加 “ORDER BY gmt_create desc”, 也就是在 P91 的第2行和第3行之间插入1行:ORDER BY gmt_create DESC
P112
最后一行的 “quuery” -> “query”
P117
“尽两减少大的复杂 Query” -> “尽量减少大的复杂 Query”
P152
“不仅 user_group 表的访问从 ref 变成了 ALL” -> “不仅 group_message_content 表的访问从 ref 变成了 ALL”
P167
代码 8-31 替换成如下:

sky@localhost : example 03:12:45> [...]

《MySQL性能调优与架构设计》推荐序-From 石展

Thursday, June 18th, 2009

即使Oracle收购SUN,将MySQL这只小海豚归于麾下,也未必是件很糟糕的事情,MySQL和Oracle面对的客户群体不同,一个偏重中低端、互联网数据库市场,一个偏重高端、大型企业级数据库市场,有太多的理由相信这一收购不会是MySQL的终点,相反MySQL将会是Oracle产品线的良好补充,也许不久即成为埃里森手中的另一张王牌。
目前MySQL装机量接近1200万,占有全球数据库25%市场份额,互联网公司80%的市场份额,特别近几年的Web 2.0兴起,更是引爆了MySQL的应用。但这些MySQL数据库大部分由开发工程师或系统工程师兼职维护着,国内专职MySQL DBA屈指可数,更别说是MySQL DBA团队。随着MySQL应用的逐步成熟,国内一些重量级互联网公司早已看到其潜力并进行大规模使用,更有一些公司磨刀霍霍却苦于该领域技术人才难求,百度、淘宝等知名的互联网公司都有大半年招不到一名合适MySQL DBA的经历。而系统介绍MySQL的中文书籍非常之少,值得一读的MySQL中文书籍更是少之又少。现在MySQL技术领域确实需要一批从理论与实践中锤炼出来的著作来造就更多更优秀的MySQL技术大师。
从作者撰写此书开始,我就一直关注着,时而与其深夜相遇于MSN,呼之,答曰:写书ing。白天在工作中实践,夜里在灯光下沉淀。当时我就迫不急待地想提前一睹,现有幸如愿,阅后颇有感慨,字里行间可见作者对MySQL理解之深!特别是优化篇的“Query优化”(第8章)和架构篇的“数据切分”(第14章)节,“Query优化”章节结合作者多年的DBA实战经验总结了Query优化的十大原则和优化思路,阐述MySQL Query Optimizer的工作机制,并通过Explain和Profiling进行实例解析,清晰易懂,见解独到。“数据切分”章节提供了垂直切分和水平切分等多种数据量膨胀解决方案,并深入分析了不同方案的优缺点,为提升数据库集群的扩展性,解决数据库瓶颈提供了极有价值的借鉴参考。
相信此书会成为你通往MySQL技术大牛道路上的正确选择。
吴诗展
百度 高级MySQL DBA
http://dbaview.cn
于2009年4月
注:此推荐序版权归 吴诗展 所有

《MySQL性能调优与架构设计》推荐序-From yejr

Wednesday, June 17th, 2009

1995年5月23日,这是一个普通的日子,但对MySQL来说,这是初生的时刻;自此,这个世界上多了一个数据库系统,这就是一开始被人们嘲笑为“玩具”数据库的MySQL。我是在2000年开始接触Linux和MySQL的,那时候国内网络仍然很不发达,想要找到MySQL的学习资料太不容易了,唯一可用的就是MySQL手册,而且还是英文的。就这样懵懵懂懂直到工作,这种情况仍未得到太大改善。这时候,我就在想,有朝一日我也要学习开源社区的精神,为开源社区做出一定的努力。此后,我利用业余时间翻译了不少MySQL的英文手册,以及不少优秀的技术材料,期间也有出版社联系我商谈出书事宜,虽未出过书,但深知写书的艰辛,因此也没敢答应下来,至今仍为一大遗憾。
2008年2月26日,Sun收购了MySQL,可爱的小海豚差点就此走上了封闭的道路,幸好有开源社区各知名人士的奔走,才使得它仍然活跃在开源社区里,这让我们对MySQL的未来充满了信心。2009年4月20日,Oracle收购Sun后,我们却已不再担心MySQL的未来,因为我们坚信有开源社区的努力,即使Oracle想要扼杀它,也不会得逞的。
随着互联网的发展,电子商务、Web 2.0等的崛起,一大批以LAMP技术为依托的企业如雨后春笋,这也大大刺激了MySQL DBA这个职位的需求。从前大家都把MySQL不当回事,认为普通的PHP程序员或系统管理员就可以搞定,但随着数据量和访问量的双重暴增,术业有专攻这句老话得到验证了,没有专业的MySQL DBA,想要再把LAMP架构做好是不可能的事。本书的出现为我们提供了一个机会,它可以帮助初级MySQL DBA迅速成长起来,让我们在面对负载日渐严重的数据库服务器时不至于心慌气短,手忙脚乱。
本书由阿里巴巴的高级DBA简朝阳先生呕心沥血编著而成,我想它应该是目前国内最好的MySQL技术书籍了。它适用读者范围广,是初级DBA到LAMP架构设计师手头必不可少之利器。本书由易到难,不仅阐述了基础知识,同时深入剖析了MySQL的内部工作机制及其原理,最后针对LAMP架构中的各种常用技术做了详细分析。想成为优秀DBA或LAMP的话,它会是你的良师益友,我们强力推荐此书。
叶金荣(http://imysql.cn)
搜狐公司高级DBA
MySQL 专家组(http://mysqlmeg.cn)
注:此推荐序版权归 叶金荣(yejr) 所有

《MySQL性能调优与架构设计》推荐序-From 翟振兴

Tuesday, June 16th, 2009

四年前,当我第一次接触MySQL时,版本还是4.1。当时的感觉这个数据库怎么这么“小”:安装文件小,只有不到20M;支持功能少,连基本的视图、过程、分区等功能都不支持;入门简单,几乎一天就可以熟练使用。不仅如此,而且使用起来感觉比较“怪异”,创建表时还要指定“MyISAM”、“InnoDB”这样奇怪的“存储引擎”,表名还要分大小写。这对当时已经习惯ORACLE这样“大型”数据库的自己来说,简直就像退回到了旧石器时代,心想虽然免费,但这样的数据库能用吗?
随着工作的需要,慢慢的对MySQL的了解多了起来,原来的一些观念也逐渐发生了改变:虽然功能少,但占用磁盘空间小,而且对于开发使用来说,主要的功能基本都有,尤其是在MySQL5.0发布之后,一些常用功能更加完善,而对于功能庞大的ORACLE来说,近一个G的安装文件中,可能真正经常使用到的功能最多也就20%;虽然使用时要指定各种各样的“存储引擎”,但这些存储引擎却是八仙过海,各有各的”神通“,在不同的使用场景中,我们可以灵活的按需进行选择,使得我们的数据库性能尽可能的优化;尤其是对于MySQL的开源策略,越来越觉得是MySQL能够普及的一个最大特点。首先,在满足GPL协议下,MySQL可以任意下载并可以商用,这使得企业信息化建设的成本大大降低,这也是近几年互联网行业发展极快的原因之一;其次,开源的特性使得大家都可以对数据库源码进行一些个性化的修改,用来提高数据库的性能或者增加新的功能,而这些改进反过来也使得更多使用者能够从中受益。
目前在互联网行业,MySQL已经使用非常广泛,但相关的资料和书籍却一直比较缺乏。在目前已出版的中文图书中,MySQL相关的书屈指可数,专门介绍MySQL的书更是凤毛麟角。一年前,我和几位同事一起合作写了一本<<深入浅出MySQL>>,当时写书的初衷是将工作中使用MySQL的一些经验记录下来,希望使更多的MySQL初学者少走些弯路。出版之后,市场的反应有点出乎我们意料,关注度一直比较高,细想之下,原因也许就是系统介绍MySQL的中文书籍和资料实在太少。很多读者看过后提了不少批评和建议,其中比较多的是MySQL的架构设计和优化内容偏少。熟悉MySQL的读者一般都知道,MySQL最大的问题就是在大数据量和高并发环境下和商业数据库的性能差别较大,因此对MySQL的优化更多的不在于数据库本身,而在于架构的设计,即如何通过分表、分库、复制、Cache等技术使得数据库能合理分配访问压力。如何来进行架构设计则更多的取决于设计者的经验,市场上相关资料很少能够见到,而本书恰恰弥补了这一空白。
虽素未谋面,却早已得知作者在写一本MySQL的大作,内容主要是MySQL架构设计和优化方面的。有幸提前看到了部分原稿,感觉文笔流畅、思路严谨、图文并茂,最重要的是内容很实用,相信此书的出版对广大互联网朋友来说会带来很多收获!
在写本文的前一天,业界发生了一个令人震惊的收购,ORACLE将以74亿美元的价格收购SUN,这也使得昔日数据库领域的两个重要竞争对手ORACLE和MySQL成为了一家,数据库的市场格局因此也将发生重大改变,MySQL能否会在 ORACLE 这样一个对数据库系统有着极深理解的公司的主导下给大家带来更多的惊喜呢?让我们都拭目以待吧!
翟振兴
网易高级DBA
《深入浅出MySQL》一书主要作者
Blog:http://zhaizhenxing.blog.51cto.com/
注:此推荐序版权归 翟振兴 所有

《MySQL性能调优与架构设计》推荐序-From Piner

Monday, June 15th, 2009

2006年,阿里巴巴B2B与淘宝DBA团队第一次引入了校园招聘的毕业生,2年半的时间过去了,当年加入淘宝的毕业生成了淘宝开发DBA的主管,而当年加入阿里巴巴B2B的毕业生,就是本书的作者。第一次听别人说起作者的时候,有2点给我的印象是比较深的,一是有误传该学生毕业于军校,以至于后来,又误传他曾经加入过海军陆战队;二是该学生目标非常清晰,就是一定要做DBA,对于其它职位不予考虑。至于更后来,又知道他是我老乡,甚至春节一起回家,那就是后话了。
作者刚毕业的时候其实学的是Oracle,后来,一是因为工作本身的需要,二来在我的建议下,改走了MySQL这条路。我很高兴作者能做出这个选择,并能在MySQL这条路上持之以恒的坚持下来。在当时,做MySQL DBA,其实是一个非常好的机会,也是一个新的切入点。Oracle从2001年在国内开始起步,2005年左右达到鼎盛的辉煌时期,同时造就了一大批大师级别的Oracle DBA,也成为后来者难以逾越的一道高墙。MySQL则不一样,这1-2年刚起步,未来2年左右如果能达到鼎盛时代的话,同样应当能成就一批大师,作者有可能就能成为其中的一员。
在这么一个浮躁的年代,一个物质欲横流的时代,作者能持续保持学习的动力,并且不断进步提升,是非常不容易的。这本书,既是作者这几年来DBA成长之路的一个总结,更是非常好的一个经验借鉴,特别是对于那些刚走出校园的毕业生,这本书或者能让你们少走很多的弯路。很多毕业生,或者是渴望成功的普通工程师,总是把眼光放在别人成功的路上,但是,实际上,更容易成功的地方,是从来没有人成功过的地方。
我写过书,深知写书的难度,把知识与经验从点汇总到面的艰辛,但是,更值得兴奋的,其实是那种艰辛之后的收获,一通百通之后的成就。我对MySQL的研究不是很深入,但是,从我对作者本人的熟知,对作者做过的实际案例的了解,我相信本书能给大家带来耳目一新的感觉。同时,也感谢作者的辛苦工作,能把自己的知识与经验分享给大家,感谢作者能给大家带来如此好的一本书。
陈吉平
淘宝首席DBA,Oracle ACE
《搭建oracle高可用环境》一书作者
注:此推荐序版权归 陈吉平(Piner)所有

《MySQL性能调优与架构设计》推荐序-From Fenng

Sunday, June 14th, 2009

《MySQL性能调优与架构设计》一书很快就会在各书店上架了,这里帖出几位好友为此书所写的推荐序,分别是:冯大辉,陈吉平,冯春培,翟振兴,叶金荣,吴诗展,再次在此感谢几位了。(按照出版社要求以各位的年龄为序排列)
第一篇先列出冯大辉(Fenng)的推荐序,如下:
拥抱MySQL数据库技术
时至今日,恐怕已经没有人再把 MySQL 当成一个玩具性质的软件产品,即使是数据库市场执牛耳者如Oracle公司也不得不正式面对来自MySQL的冲击。如果说几年前,还有人对使用MySQL有所疑虑么? 经过几年来互联网的高速发展,无数大型网站用其成功案例证明,以MySQL为基础的数据层解决方案已经成为互联网应用不可或缺的一个重要组成部分。
当下也是数据库技术应用处于激烈变革的时期。这并不是说传统的关系数据库技术在这两年有了多大的新突破,而是用户的需求在迅速变化。更多时候,用户不再需要单一的软件产品,而是灵活、高效、可靠、可控、低廉的解决方案。很多大型站点甚至根据自己的需求来改进 MySQL,进而回馈给开源社区,这也是开放的魅力所在,对于传统的商业数据库软件商来说,这是不可想象的事情。
MySQL早已不再是单一的数据库软件,以其为基础发展起来的各种开源组件令人目不暇接,而用这些组件构成的解决方案也是层出不穷。如何能够把以MySQL为核心的这一系列软件充分运用,构建大型可扩展性网站,正是不少LAMP架构体系的网站开发者乃至架构师一直关心的问题。现在中文图书市场上 MySQL相关的书籍并不在少数,但放眼看去,绝大多数是教程类的内容,这本《MySQL性能调优与架构设计》则主要着眼于性能与架构这两个当下大家更为关注的话题,结合作者几年来的实战经验与研究心得,相信能让不少网站少走弯路。
期待这本书让更多人受益。如果读者朋友们也能把自己的心得分享出来,那是再好不过的事情了。经常有即将毕业的学生以及网络上的朋友给我发来邮件,表示对数据库技术有兴趣,但是不知道如何切入,我的建议是,从学习MySQL开始吧!
冯大辉
支付宝(中国)网络技术有限公司 数据架构师,Oracle ACE
个人技术Blog: http://dbanotes.net
注: 此推荐序版权归 冯大辉(Fenng)所有

阿里巴巴DBA出品