本小节回答这样的问题:“MySQL的稳定程度?”和 “我能在本项目中依赖MySQL吗?”。这里我们将试图澄清一些问题并且回答似乎很多人关心的更重要的问题。本节已经与从邮件列表(它在报导错误是很活跃的)收集了的信息综合在一起。
对TcX,MySQL在我们自1996中期开始的计划中运行没有发生任何问题。当MySQL被更公开地发布时,我们注意到了有一些 “未测试代码”片断很快地被不同于我们的查询方式的新用户发现。每个新版本比前一个都有更少的可移植性问题(尽管每个发行有许多新功能),并且我们希望有可能把下一个版本之一标记为“稳定”的。
每个MySQL的发行都是可用的,并且只有当用户使用从“灰色地带”来的代码时才有问题,当然,不知情的用户不能知道灰色地带是什么;本小节尝试揭示我们目前已知的东西。这里的描述涉及MySQL 3. 22.x 版本。所有已知和报告的错误都会在最新的版本被更正,除了在错误小节中列出的与“设计n”有关的错误。详见E MySQL已知的错误和设计缺陷。
MySQL以多层结构和不同的独立模块编写,这些模块列举在下面以表明它们中的每一个是如何很好地被测试过:
- ISAM表处理器--稳定
- 它管理所有在MySQL 3.22和早期版本中的数据的存储和检索。在所有MySQL版本中,代码中已经没有一个单独(报告的)错误。得到一个损坏的数据库表的唯一已知方法是在一个更新中途杀死服务器,即使这样也不大可能破坏任何数据而不能挽救,因为所有数据在每个查询之间被倒入(flush)到磁盘,而且从来没有一个有关由于MySQL中的错误而丢失数据的错误报告。
- MyISAM 表处理器-- Beta
- 这是 MySQL 3.23的新功能,它大部分是基于ISAM表代码但有很多新的有用的功能。
- 语法处理器和词法分析器 --稳定
- 很长时间没有一个在这个系统中的错误报告。
- C 客户代码--稳定
- 没有已知的问题。在早期的 3. 20版本中,在发送/接收缓冲器的大小上有一些限制。 3.21.x后,现在缓冲器的大小是动态的,可到一个24M的缺省值。
- 标准客户程序--稳定
- 这些包括
mysql
、mysqladmin
和mysqlshow
、mysqldump
及mysqlimport
。 - 基本结构式查询语言--稳定
- 基本SQL函数系统、字符串类和动态内存处理,本系统中未见单独报告的错误。
- 查询优化程序--稳定
- 范围优化程序-- Gamma
- Join优化器--稳定
- 锁定-- Gamma
- 这是非常依赖于系统的,在某些系统上,用标准操作系统锁定(
fcntl()
)有很大问题,在这些情况下,你应该用选项--skip-locking
运行MySQL守护程序。当使用NFS挂载的文件系统,已知在一些 Linux 系统上和SunOS上出现问题。 - Linux 线程-- Gamma
- 唯一发现的问题式
fcntl()
调用,它通过使用mysqld
的--skip-locking
选项解决。一些人已经报告了0.5版中的锁定问题。 - Solaris 2.5 + pthreads --稳定
- 我们在我们的开发工作中使用。
- MIT-pthreads (其他系统)-- Gamma
- 自从 3.20.15版以来,没有报告的错误,而且从3.20.16开始没有已知的错误。在一些系统上,在一些操作是相当慢时(在每查询之间有 1/20秒的睡眠 )有一个“功能失效”。当然,MIT-pthreads 可能使任何事情慢一点,但是基于索引
的SELECT
语句通常在一个时帧内完成,因此不应该有一个mutex 锁定/线程的把戏。 - 其他线程实现 -- Alpha - Beta
- 移植到其他系统仍然是很新的并且可能有错误,可能是在MySQL中,但是最通常的是线程实现本身。
LOAD DATA ...
,INSERT ... SELECT
--稳定- 一些人已经认为他们在这里发现了错误,但是这些经常多是误解。请在报告问题前检查手册!
ALTER TABLE
--稳定- 在 3.22.12中有小的改变。
- DBD --稳定
- 现在由 Jochen Wiedmann 维护了。
mysqlaccess
--稳定- 由 Yves Carlier 编写并维护。
GRANT
-- Gamma- MySQL 3.22.12.做了很大改变。
- MyODBC (使用 ODBC SDK 2.5 )-- Gamma
- 它与一些程序似乎工作得很好。
TcX 为付费客户提供电子邮件的支持,但是MySQL邮件列表通常提供常见问题的答案,错误通常马上用一个补丁修补,对严重的错误,几乎总是有新的版本发行。