将内存分配给MySQL数据库中的特定表

将内存分配给MySQL数据库中的特定表

问题描述:

有什么办法可以强制MySQL在RAM中存储特定的表(除了使用内存存储引擎)?将内存分配给MySQL数据库中的特定表

我的数据库在InnoDB表(我不希望存储在RAM中)和10个使用MyISAM引擎的表(〜100 MB)中包含+ 200 GB。

我的目标是获得尽可能最快的存取权限的MyISAM表(如果需要的话我可以改变MyISAM表的存储引擎或将其移动到另一个数据库在同一台服务器上)。

我的数据库服务器正在运行Linux并具有10 GB RAM。

+0

[将MySQL innodb数据库加载到内存中]的可能的重复(http://stackoverflow.com/questions/2486092/load-a-mysql-innodb-database-into-memory) – 2012-01-05 21:00:36

假设如下:

  • DATADIR是/ var/lib中/ MySQL的
  • 你的数据库称为MYDB
  • 你MyISAM表T1,T2和T3 MYDB
  • 你想创建一个名为memorydb的内存数据库

您可能有以下几种:

  • 步骤01)service mysql stop
  • 步骤02)创建RAM磁盘
  • 步骤03)mkdir /var/lib/mysql/memorydb
  • 步骤04)chown mysql:mysql /var/lib/mysql/memorydb
  • 步骤05)的RAM磁盘安装到/var/lib/mysql/memorydb
  • 步骤06 )service mysql start
  • 步骤07)mysql> ALTER TABLE mydb.t1 RENAME memorydb.t1;
  • 步骤08)mysql> ALTER TABLE mydb.t2 RENAME memorydb.t2;
  • 步骤09)mysql> ALTER TABLE mydb.t3 RENAME memorydb.t3;

第6步之后,memorydb应在INFORMATION_SCHEMA.SCHEMATA

注册。如果你想保持表的副本早在MYDB,之后做以下步骤6

  • 步骤07)mysql> CREATE TABLE memorydb.t1 LIKE mydb.t1;
  • 步骤08)mysql> INSERT INTO memorydb.t1 SELECT * FROM mydb.t1;
  • 步骤09)mysql> CREATE TABLE memorydb.t2 LIKE mydb.t2;
  • 步骤10)mysql> INSERT INTO memorydb.t2 SELECT * FROM mydb.t2;
  • 步骤11)mysql> CREATE TABLE memorydb.t3 LIKE mydb.t3;
  • 步骤12)mysql> INSERT INTO memorydb.t3 SELECT * FROM mydb.t3;

只要确保你有足够的内存来保存你的MyISAM表。

试试吧!