强制整个MySQL数据库在内存中

时间:2011-02-04 05:26:40

标签: mysql database linux unit-testing

为了运行大量与数据库交互的测试,我想做两件事:

  1. 我想复制数据库的架构而不复制其数据。我可以使用一个脚本来捕获数据库中每个表的CREATE TABLE语句。

  2. 创建此数据库后,我想强制它在内存中100%。

  3. 我坚持如何做第2部分 - 除了指定每个表的引擎之外,还有更简单的方法吗?不知何故,这似乎是一种糟糕的做法。

4 个答案:

答案 0 :(得分:11)

/dev/shm(ubuntu | debian)中创建数据库,它将在RAM中。它可以增长到0.5的可用内存。

答案 1 :(得分:2)

正如 dtmilano 所说,你可以把它放在一个tmpfs挂载的文件系统上。它不一定是/ dev / shm,但这是通常安装tmpfs的地方。

您可以在任何地方创建新的:

mount none -t tmpfs /path/to/dir

如果它填满了所有可用的RAM,它将使用swap作为备份。

将它放在/ etc / fstab中以在引导时重新挂载。请记住,它是一个ram磁盘,所以每次重启时它都会空出来。请参阅:http://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs

或者,正如 yuxhuang 所建议的那样,您可以创建一个MEMORY类型的表。虽然表定义仍然存在,但它也会在重启时清空。但MEMORY表类型有一些限制。例如,它使用固定大小的行,因此不允许textblob列,varchar不是可变长度。请参阅:http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

答案 2 :(得分:1)

SET storage_engine=MEMORY;

这将设置当前会话的默认存储引擎。

答案 3 :(得分:0)

如果您使用的是Windows,则可以在数据库创建脚本中创建添加MEMORY参数的表,如下所示:

CREATE TABLE IF NOT EXISTS `user` (
  `id` varchar(23) NOT NULL,
  `username` varchar(250) NOT NULL,
  ...
) ENGINE=MEMORY DEFAULT CHARSET=utf8;