有什么方法可以强制 MySQL 将特定表存储在 RAM 中(除了使用内存存储引擎)?
我的数据库包含超过 200 GB 的 InnoDB 表(我不想将其存储在 RAM 中)和 10 个使用 MyISAM 引擎的表(~100 MB)。
我的目标是尽可能快地访问 MyISAM 表(如有必要,我可以更改 MyISAM 表的存储引擎或将它们移动到同一服务器上的另一个数据库)。
我的数据库服务器运行的是 Linux 并且有 10 GB RAM。
最佳答案
假设如下:
- 数据目录是/var/lib/mysql
- 你的数据库叫做mydb
- 你在 mydb 中有 MyISAM 表 t1、t2 和 t3
- 您想创建一个名为
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)
服务 mysql 启动
- 步骤 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步之后,应该在information_schema.schemata中注册了memorydb
如果要在 mydb 中保留表的副本,请在步骤 6 之后执行以下操作
- 步骤 07)
mysql> 创建表 memorydb.t1 LIKE mydb.t1;
- 步骤 08)
mysql> INSERT INTO memorydb.t1 SELECT * FROM mydb.t1;
- 步骤 09)
mysql> 创建表 memorydb.t2 LIKE mydb.t2;
- 步骤 10)
mysql> INSERT INTO memorydb.t2 SELECT * FROM mydb.t2;
- 步骤 11)
mysql> 创建表 memorydb.t3 LIKE mydb.t3;
- 步骤 12)
mysql> INSERT INTO memorydb.t3 SELECT * FROM mydb.t3;
只需确保您有足够的 RAM 来容纳您的 MyISAM 表。
试一试!!!
关于mysql - 将 RAM 分配给 MySQL 数据库中的特定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749643/