我在 SSD 上运行 MySQL,SSD 上的空间即将耗尽。我的虚拟主机对 SSD 收费过高,而 MySQL 中的大部分数据是“存档”数据(即未被积极使用的数据)。我有更大的 HDD 可以保存这些数据。因此,我希望能够将特定的 InnoDB 表从 SSD 移动到 HDD。
我考虑并研究过的一个解决方案是将相关特定表的单个 .ibd 文件(我启用了 innodb_file_per_table)移动到 HDD,然后是符号链接(symbolic link)。然而,对此进行研究,这对 InnoDB 来说似乎是个坏主意。
我也看到MySQL从5.6开始支持DATA DIRECTORY命令:
To create a new InnoDB file-per-table tablespace in a specific location outside the MySQL data directory, use the DATA DIRECTORY = absolute_path_to_directory clause of the CREATE TABLE statement.
Plan the location in advance, because you cannot use the DATA DIRECTORY clause with the ALTER TABLE statement. The directory you specify could be on another storage device with particular performance or capacity characteristics, such as a fast SSD or a high-capacity HDD.
问题是,这似乎只支持新 表。我想对现有表执行此操作。关于如何的任何提示?如果有帮助,我正在运行 Percona MySQL。
谢谢!
更新:这是我尝试过的方法,但出现语法错误:
CREATE TABLE abc_2 LIKE abc ENGINE=InnoDB DATA DIRECTORY='/xxx/mysql/archive/'
最佳答案
显然 CREATE ... LIKE ... DATA DIRECTORY ...
是不受支持的组合。
执行 SHOW CREATE TABLE
以获取当前定义。编辑它以添加 DATA DIRECTORY
和 INDEX_DIRECTORY
。然后使用编辑后的文本创建新表。
然后 INSERT INTO new_tbl SELECT * FROM real_tbl;
并打乱名称:RENAME TABLE real_tbl TO old_tbl, new_tbl TO real_tbl;
。
验证结果,最后DROP old_tbl
;
关于mysql - 如何将 InnoDB 表移动到另一个驱动器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34711518/