BDB引擎介绍
Sleepycat Software给MySQL提供Berkeley DB事务性存储引擎。这个存储引擎典型被简称为BDB。对BDB存储引擎的支持包括在MySQL源码分发版里,在MySQL-Max二进制分发版里被激活。
BDB表可能有一个更大的崩溃幸存机会,并且也具有对事务COMMIT和ROLLBACK操作的能力。MySQL源码分发版和被补丁过可以与MySQL一起工作的BDB分发版一起提供。你不能使用一个未补丁过的BDB版本与MySQL一起工作。。
我们在MySQL AB上与Sleepycat紧密合作工作以保持MySQL/BDB接口的质量在高水平。(即使Berkeley DB其本身是非常能经受考验和非常可靠的。MySQL接口仍然被认为是第三等质量的。我们将继续改善和优化它)。
当它达到对所有涉及BDB表的问题的支持之时,我们答应负责帮助我们的用户定位问题并创建可重复产生的测试案例。任何这样的测试案例被转交给Sleepycat,它反过来帮助我们找到并解决问题。因为这是一个二阶段的操作,任何关于BDB表的问题我们可能要花比对其它存储引擎稍微更长一点的时间来解决它。可是,我们期望这个过程没有显著的困难,因为Berkeley DB 代码本身被用在MySQL之外许多的应用中。
要获得关于Berkeley DB的一般信息,请访问Sleepycat网站,http://www.sleepycat.com/。
我的配置
在我的机器上安装了Xampp套装,最初是用来运行BugFree,配置MySQL 5.0.18。这个Xampp版本是ApacheFriends XAMPP (basic package) version 1.5.1,你可以到网上获取更新的版本。
第1次尝试使用
将mysqld注册为服务并启动,用mysql连接进入数据库,然后在test库下建立一个BDB的表。通常情况下创建会成功,但实际上该表未真正套用BDB引擎。
net start mysql # 启动mysql服务
mysql -r root -p # 在命令行下登录mysql服务器
use test # 使用mysql下的test数据库
create table testbdb (id int) type=BDB; # 创建BDB表
在information_schema数据库中查询该表的引擎时,其结果为NULL。显然这种情况下无法创建BDB表。
第2次尝试
依据上面的做法重来,不过将mysqld-max-nt注册为服务。嗯,此时又可以建立BDB表了。难道只有mysqld-max和mysqld-max-nt才能支持BDB数据库引擎吗?
第3次尝试
难道只有mysqld-max才能支持BDB数据库引擎吗?于是我查了下mysqld的帮助(mysqld --verbose --help),发现mysqld用--bdb参数是可以支持BDB的。于是我将mysql/bin目录下的5个服务器程序全部列举出来,分别以标准模式启动。结果发现mysqld、mysqld-nt是不支持BDB的。
070429 9:53:40 [Warning] this binary does not contain BDB storage engine
D:Xamppxamppmysqlbin>mysqld-nt --bdb --standalone
070429 9:58:01 [Warning] this binary does not contain BDB storage engine
而其他几个服务器程序则可以使用BDB数据库引擎,而且不用配置my.ini脚本。不过,这并不是说mysqld重新配置了my.ini脚本(即在my.ini中的[mysqld]中增加bdb),然后注册为服务后就能支持bdb,如果你真那么做——服务将不能启动,而且会给你返回一个1067的错误。
请注意上面的Warning信息,即“此二进制版本不包括BDB引擎”,那么你不管怎么配mysqld和my.ini,都不能使用BDB引擎的。
小结
因此,Windows XP、MySQL 5.0.18的情况下服务器程序mysqld和mysqld-nt是不支持BDB数据库引擎的,因此若要支持应选择mysqld-max或mysqld-max-nt为服务。此外,要查看当前数据库支持哪些引擎,可以使用show engines命令。举例如下:
+------------+---------+----------------------------------------------------------------+
| Engine | Support | Comment |
+------------+---------+----------------------------------------------------------------+
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys |
| BerkeleyDB | NO | Supports transactions and page-level locking |
| BLACKHOLE | NO | /dev/null storage engine (anything you write to it disappears) |
| EXAMPLE | NO | Example storage engine |
| ARCHIVE | YES | Archive storage engine |
| CSV | NO | CSV storage engine |
| ndbcluster | NO | Clustered, fault-tolerant, memory-based tables |
| FEDERATED | NO | Federated MySQL storage engine |
| MRG_MYISAM | YES | Collection of identical MyISAM tables |
| ISAM | NO | Obsolete storage engine |
+------------+---------+----------------------------------------------------------------+
后经搜索发现BDB数据库引擎已被Oracle收购,并将其纳入自己嵌入式数据库的产品线。而这明显和mysql有冲突,故而mysql不再从底层支持BDB数据库引擎,转而使用插件的形式。而此点,则可在《mysql 5.1参考手册-中文版》里查到,章节为<第16章:编写自定义存储引擎>。