Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制整个MySQL数据库位于内存中_Mysql_Database_Linux_Unit Testing - Fatal编程技术网

强制整个MySQL数据库位于内存中

强制整个MySQL数据库位于内存中,mysql,database,linux,unit-testing,Mysql,Database,Linux,Unit Testing,为了运行大量与数据库交互的测试,我想做两件事: 我希望复制数据库的模式,而不复制其数据。我可以使用一个脚本来实现这一点,该脚本从数据库中的每个表中获取CREATETABLE语句 在创建这个数据库时,我想强制它100%在内存中 我一直在讨论如何执行第2部分-除了指定每个表的引擎之外,还有更简单的方法吗?不知何故,这似乎是一种糟糕的做法 SET storage_engine=MEMORY; 这将为当前会话设置默认存储引擎。在/dev/shm(ubuntu | debian)中创建数据库,它将位于R

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

  • 我希望复制数据库的模式,而不复制其数据。我可以使用一个脚本来实现这一点,该脚本从数据库中的每个表中获取CREATETABLE语句

  • 在创建这个数据库时,我想强制它100%在内存中

  • 我一直在讨论如何执行第2部分-除了指定每个表的引擎之外,还有更简单的方法吗?不知何故,这似乎是一种糟糕的做法

    SET storage_engine=MEMORY;
    

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

    /dev/shm
    (ubuntu | debian)中创建数据库,它将位于RAM中。它可以增加到0.5个可用内存。

    正如dtmilano所说,您可以将它放在安装了tmpfs的文件系统上。它不必是/dev/shm,但这是一个通常安装tmpfs的地方

    您可以在任何地方创建一个新的,但是:

    mount none -t tmpfs /path/to/dir
    
    如果它填满了所有可用的RAM,它将使用交换作为备份

    将其放入/etc/fstab以在引导时重新装载。请记住,它是一个ram磁盘,所以每次重新启动时它都是空的。见:


    或者,按照yuxhuang的建议,您可以创建一个类型为
    MEMORY
    的表。它也会在重新启动时清空,尽管表定义仍然保留。不过,
    内存
    表类型有一些限制。例如,它使用固定大小的行,因此不允许使用
    text
    blob
    列,并且
    varchar
    不是可变长度。请参阅:

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

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

    内存表的大小是有限制的。数据库中的所有表是否都能成为内存表是值得怀疑的(但有可能),内存表的元数据仍然存储在磁盘上,并且它们的行为与其他引擎不同。进一步扩展@MarkR comment:
    MyISAM
    Innodb
    已经非常不同,可能导致不同的行为,导致只发生在一台发动机上的故障。因此,我建议不要将您的数据库引擎更改为
    内存
    ,因为它很可能会引入特定于引擎的错误。这听起来不错,但CentOS是否有类似的解决方案?请检查是否有:$mount | grep shm。否则,您可以在/dev/ram*之一上创建一个文件系统,并将其装载到某个位置。Centos 5.0+总是装载/dev/shm。但是,您可以在任何地方安装tmpfs。tmpfs已经有一段时间了。伙计们,不知道它是否可以,只是试了一下:mv/usr/local/mysql/data/blah/dev/shm。。。。ln-s/dev/shm/blah->data/blah。。。。重新启动mysql。。。它在飞翔