
【IT168 技术文档】
“世界上最流行的开源数据库”:MySQL(http://www.mysql.com/)
MySQ自己号称“世界上最流行的开源数据库”。在近期MySQL的官方网站上,顺应“Web 2.0”的潮流,打出了“世界上要求最苛刻的Web 2.0站点运行MySQL”,目前最新的广告语是“世界范围内领先的电信公司都依赖MySQL”。
1979年,一家瑞典公司Tcx欲开发一个快速的多线程、多用户数据库系统。Tcx 公司起初想利用mSQL和他们自己的快速低级例程 (Indexed Sequential Access Method,ISAM)去连接数据库表,然而,在一些测试以后得出结论:mSQL对其需求来说不够快速和灵活。这就产生了一个连接器数据库的新SQL接口,它使用几乎和mSQL一样的API接口。这个API被设计成可以使那些由mSQL而写的第三方代码更容易地移植到MySQL。
“MySQL”的由来已经无从查找,带有前缀“My”的指南资料和大量的数据库产品和工具已经存在10年以上。有趣的是,MySQL AB创始人之一的Monty Widenius的女儿也叫“My”。MySQL的海豚标志的名字叫“Sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供的。根据Ambrose所说,Sakila是来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
MySQL堪称开源数据库领域中的领军人物,其名衔众多:ACM/SIGMOD(美国计算机学会数据库专委会)列出的60种公众可以使用的开放源代码数据库系统中,MySQL居榜首;Linux下最受欢迎的数据库排名中,MySQL居第一(第二位是PostgreSQL,第三位是Oracle 9i);在开源数据库市场占有率中,MySQL居第一;在世界5000家IT企业内,MySQ承担着各种处理任务关键状态的工作。
自MySQL推出开源数据库以来,其下载量据称已经超过1亿次。据2005年Evans Data Corporation的调查,MySQL在开源数据库市场当时已拥有40%的占有率,安装量超过500万套。而MySQL宣称其安装用户目前已经达到了600万,包括了1500 家网上签约客户和合作伙伴,以分发产品和提供服务。Novell、Dell 和HP等公司已经开始出售MySQL的数据库产品,并为其提供支持服务。MySQL同Novell和Dell之间结成的分销伙伴关系将充分拓展它的发行。并且近期还传出,Red Hat正在于MySQL紧密接触,商谈合作事宜。MySQL的客户包括NASA(美国国家航空和宇宙航行局)、Google、Yahoo,国内的有新浪、网易。MySQL的一些大客户中,有一些是MySQL经过长时间的努力从Oracle、IBM等大型商业数据库厂商手中“夺”过来的。尽管MySQL的绝对用户数量不大,但在份额相近的商业数据库市场上已经具有一定冲击力和影响力,此外,MySQL在中小企业和开发人员心目中的超强人气也很有商业价值。
国内的ChinaUnix.net的核心论坛系统,就是建立在MySQL之上。ChinaUnix使用两台硬件服务器,其中一台服务器放置MySQL的Master库,另一台服务器放置MySQL的Slave库;Master库给用户提供注册、发帖、编辑、删除等操作;Slave库提供给用户查看帖子等查询操作。
MySQL可以运行在包括Unix、Solaris、FreeBSD、Linux、Windows、OS/2操作系统中等,所以可以方便地将数据库从一个操作系统转移到另一个操作系统,而数据和应用不需再做修改。
MySQL大约每2年进行一次大的版本升级,每几个月就会有一次小规模的升级,这种小步快跑式的升级模式逐渐拉近了其与商业数据库产品之间的距离。MySQL之前的版本不支持存储过程、触发器,以及视图界面等功能,但随着产品的升级和更新,这些功能会逐渐被添加和晚上。对于MySQL一直被“诟病的”缺乏存储过程的基本功能,一些开发人员认为存储过程虽然提高了效率,却牺牲了一些灵活性,而且不一定是开发人员想要的,一些有经验的开发人员宁愿用函数。一些使用MySQL的中小企业用户表示:“MySQL的维护很容易,任何工程师一经培训都能使用。”
MySQL开源数据库采用的是双重授权策略,对于不愿公开自己源代码的使用者,需要付费使用MySQL, 而对于开放源代码的使用者,可以基于GNU的公共许可协议GPL来使用。使用者利用MySQL所开发出来的产品也应该与MySQL开源数据库共享;对于另一种,开发者付费后,他们所开发的新产品和修改成果与MySQL无关。在MySQL的1000名用户中,有100名用户就反馈源代码,其中也有一名用户向该软件付费。MySQL在2002年的销售收入就已达到500万美元,2003年达到1200万美元。
MySQL 4版本可以运行于多种操作系统平台,支持全文搜索,提供了常见开发语言的编程接口,最大可支持64TB的表空间,而可伸缩的设计体系使得MySQL既能够提供企业级的客户机/服务器工作方式和复杂的集群工作方式, 也能够作为嵌入式的数据库引擎集成到其他的应用系统之中。MySQL从4.0版开始,提供Embedded MySQL来支持应用程序、各种移动电话和其它的嵌入设备。MySQL目前最新的版本为MySQL 5.0, MySQL5.0针对企业级用户,具有更多的企业级特性。MySQL的网络特性使得用户可以通过Internet在任何地方共享数据库,网站的应用系统基于浏览器/服务器的结构运行。在2005年2月,MySQL还发布了基于订阅的MySQL网络,以提供全面支持和公司应用部署。MySQL Network订阅服务从595美元开始,每年、每数据库的全天支持的价格为4,995美元。
MySQL在Web上的应用十分广泛,企业网站采用“Linux+Apache+PHP+MySQL”来建设自己的工作模式。在Web领域的应用种,MySQL的优点和缺点都非常明显,优点指速度快,但是前提是更新不频繁、读取很多并且表比较小。MySQL的缺点就是在更新很频繁的时候造成大量线程的堵塞,而且数据库表很容易损坏,已经有很多网站和应用深受其害,甚至已经有很多人怀疑所有数据库的能力,已经开始考虑直接使用文件系统搭建网站了。MySQL自身和Web用户都这对这些问题提出自己的解决方案和应用功能的完善。
【IT168 技术文档】
MySQL的一些特性总结如下:
1、许可费用
MySQL的普及很大程度上源于它的宽松,除了略显不寻常的许可费用。MySQL的价格随平台和安装方式变化。MySQL的Windows版本(NT和9X)在任何情况下都不免费,而任何Unix变种(包括Linux)的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案庄则必须付许可费。
2、安装
可以在MySQL站点上获得大多数主要的软件包格式(RPM、DBE、TGZ),客户端库和各种语言“包装”(Wrapper)可以分开的RPM格式获得。RPM格式的安装没有多大麻烦,并且无需初始配置。在rc3.d(以RedHat RPM为例)生成一个初始脚本,故MySQL守护进程在多用户模式下重启时被启动运行。MySQL的守护进程(mysqld)消耗很少的内存(在运行RedHat 5.1的奔腾133上,每个守护进程使用500K内存和另外4M共享内存的开销)并且只有在执行真正的查询时才装载到处理器上,这意味着对小型数据库来说,MySQL可以相当轻松地使用而不会对其他系统功能有太大的影响。
3、数据类型
字段支持大量数据类型是件好事。通常的整数、浮点数、字符串和数字均以多种长度表示,并支持变长的BLOB(Binary Large OBject)类型。对整数字段由自动增量选项,日期时间字段也能很好的表示。
MySQL与大多数其他数据库系统不同的是提供两个相对不常用的字段类型:ENUM和SET。ENUM是一个枚举类型,非常类适于Pascal语言的枚举类型,它允许程序员看到类似于'red、'green'、'blue'的字段值,而MySQL只将这些值存储为一个字节。SET也是从Pascal借用的,它也是一个枚举类型,但一个单独字段一次可存储多个值,这种存储多个枚举值的能力也许不会给你一些印象(并可能威胁第三范式定义),但正确使用SET和CONTAINS关键字可以省去很多表连接,能获得很好的性能提高。
4、SQL兼容性
MySQL包含一些与SQL标准不同的转变,他们的大多数被设计成是对SQL语言脚本语言的不足的一种补偿。然而,另一些扩展确实使 MySQL与众不同,例如,LINK子句搜索是自动地忽略大小写的。MySQL也允许用户自定义的SQL函数,换句话说,一个程序员可以编写一个函数然后集成到MySQL中,并且其表现的与任何基本函数如SUM()或AVG ()没有什么不同。函数必须被编译到一个共享库文件中(.so文件),然后用一个LOAD FUNCTION命令装载。
它也缺乏一些常用的SQL功能,没有子选择(在查询中的查询),视图(View)也没了。当然大多数子查询可以用简单的连接(join)子句重写,但有时用两个嵌套的查询思考问题比一个大连接容易。同样,视图仅仅为程序员隐蔽where子句,但这正是程序员们期望的另一种便利。
5、存储过程和触发器
MySQL没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制。多语句SQL命令必须通过客户方代码来协调,这种情形是借助于相当健全的查询语言和赋予客户端锁定和解锁表的能力,这样才允许的多语句运行。
6、参考完整性(Referential Integrity-RI)
MySQL的主要的缺陷之一是缺乏标准的RI机制;然而,MySQL的创造者也不是对其用户的愿望置若罔闻,并且提供了一些解决办法。其中之一是支持唯一索引。Rule限制的缺乏(在给钉字段域上的一种固定的范围限制)通过大量的数据类型来补偿。不简单地提供检查约束(一个字段相对于同一行的另一个字段的之值的限制)、外部关键字和经常与RI相关的“级联删除”功能。有趣的是,当不支持这些功能时,SQL分析器容忍这些语句的句法。这样做目的是易于移植数据库到MySQL中。这是一个很好的尝试,并且它确实未来支持该功能留下方便之门;然而,那些没有仔细阅读文档的的人可能误以为这些功能实际上是存在的。
7、安全性
自始至终人们对MySQL最大的抱怨是其安全系统,它唯一的缺点是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。通常的SQL GRANT/REVOKE 语句到最近的版本才被支持,但是至少现在有了。 MySQL的编写者广泛地记载了其特定的安全性系统,但是它确实需要一条可能是别无它法的学习过程。
8、备份和恢复、数据导入/导出
强制参考一致性的缺乏显著地简化备份和恢复,单靠数据导入/导出就可完美复制这一功能。LOAD DATA INFILE命令给了数据导入很大的灵活性。SELECT INTO命令实现了数据导出的相等功能。另外,既然MySQL不使用原始的分区,所有的数据库数据能用一个文件系统备份保存。数据库活动能被记载,与通常的数据库日志不同(存储记录变化或在记录映像之前/之后), MySQL记载实际的SQL语句。这允许数据库被恢复到失败前的那一点,但是不允许提交(commit)和回卷(rollback)操作。
9、连接性
MySQL客户库是客户/服务器结构的C语言库,它意味着一个客户能查询驻留在另一台机器的一个数据库。然而MySQL真正的强项处于该库中的语言“包装器(wrapper)”, Perl、Pathon和PHP只是一部分。Apache的Web服务器也有许多模块例如目录存取文件等允许各种各样的Apache配置信息(例如目录存取文件)使用MySQL,应用程序接口简单、一致并且相但完整。另外、多平台ODBC驱动程序可自由获得。
10.相关链接
中文MySQL:www.mysql.cn
MySQL论坛:bbs.mysql.cn