首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将InnoDB表移动到另一个驱动器?

如何将InnoDB表移动到另一个驱动器?
EN

Stack Overflow用户
提问于 2016-01-10 22:25:46
回答 2查看 4.5K关注 0票数 1

我在SSD上运行MySQL,我即将耗尽空间的SSD。我的used主机对SSD收费过高,MySQL中的大多数数据都是“归档”数据(即没有积极使用的数据)。我有更大的HDD可以保存这些数据。因此,我希望能够将特定的InnoDB表从SSD移动到HDD。

我已经考虑和研究过的一个解决方案是将特定表的单个.ibd文件(我已经启用了innodb_file_per_table )移动到HDD,然后是符号链接。然而,对此进行研究,对InnoDB来说似乎是个坏主意。

我还看到,从5.6开始,MySQL支持数据目录命令:

若要在InnoDB数据目录之外的特定位置创建新的每个表表空间,请使用create语句的数据目录= absolute_path_to_directory子句。 预先计划位置,因为不能在ALTER语句中使用数据目录子句。您指定的目录可能位于另一个具有特定性能或容量特性的存储设备上,例如快速SSD或高容量HDD。

问题是,它似乎只支持新表。我想为现有的桌子做这个。怎么做有什么建议吗?如果有帮助的话,我正在运行Percona MySQL。

谢谢!

更新:这里是我尝试过的,但是我得到了一个语法错误:

CREATE TABLE abc_2 LIKE abc ENGINE=InnoDB DATA DIRECTORY='/xxx/mysql/archive/'

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-10 23:46:25

显然,CREATE ... LIKE ... DATA DIRECTORY ...是一个不受支持的组合。

执行SHOW CREATE TABLE以获得当前定义。编辑它以添加DATA DIRECTORYINDEX_DIRECTORY。然后使用编辑的文本创建新表。

然后INSERT INTO new_tbl SELECT * FROM real_tbl;和洗牌名称:RENAME TABLE real_tbl TO old_tbl, new_tbl TO real_tbl;

验证结果,最后进行DROP old_tbl

票数 2
EN

Stack Overflow用户

发布于 2018-03-01 14:28:48

我自己解决了这个问题,最终找到了一个比“创建新拷贝开关”更优雅的解决方案:分离、移动和重新导入底层表空间文件。这在大型和/或索引较重的表上效率要高得多,因为MySQL不必重做它已经完成的工作。

简而言之,它可以归结为以下步骤:

代码语言:javascript
复制
FLUSH TABLES `table_name` FOR EXPORT;

在保持连接打开的同时,将表空间文件移动到shell中:

代码语言:javascript
复制
$ mv /var/lib/mysql/database_name/table_name.{ibd,cfg} ~

现在回到MySQL中,释放锁,删除表,用正确的DATA DIRECTORY重新创建它,并丢弃其表空间:

代码语言:javascript
复制
UNLOCK TABLES;
SHOW CREATE TABLE `table_name`;
DROP TABLE `table_name`;
CREATE TABLE `table_name` /* ... */ DATA DIRECTORY='/path/to/desired/location';
ALTER TABLE `table_name` DISCARD TABLESPACE;

现在,将移动的表空间文件复制到所需的位置:

代码语言:javascript
复制
$ cp -a ~/table_name.{ibd,cfg} /path/to/desired/location

并进口:

代码语言:javascript
复制
ALTER TABLE `table_name` IMPORT TABLESPACE;

更多的背景和动机,为什么‘创建新的复制开关’是低效的,可以在我写的关于这个主题的博客:https://www.moxio.com/blog/28/moving-individual-mysql-tables-on-disk

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34711518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档