将内存分配给MySQL数据库中的特定表
问题描述:
有什么办法可以强制MySQL在RAM中存储特定的表(除了使用内存存储引擎)?将内存分配给MySQL数据库中的特定表
我的数据库在InnoDB表(我不希望存储在RAM中)和10个使用MyISAM引擎的表(〜100 MB)中包含+ 200 GB。
我的目标是获得尽可能最快的存取权限的MyISAM表(如果需要的话我可以改变MyISAM表的存储引擎或将其移动到另一个数据库在同一台服务器上)。
我的数据库服务器正在运行Linux并具有10 GB RAM。
答
假设如下:
- 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表。
试试吧!
[将MySQL innodb数据库加载到内存中]的可能的重复(http://stackoverflow.com/questions/2486092/load-a-mysql-innodb-database-into-memory) – 2012-01-05 21:00:36