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

标签 mysql innodb percona

我在 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 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;

关于mysql - 如何将 InnoDB 表移动到另一个驱动器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34711518/

相关文章:

mysql - Node : Getting the values from the result of a multiple statement MySQL query

php - 使用 mysqli 类在 PHP 中返回 MySQL 查询

MySQL 启动失败 |如何从Config中删除Db?

mysql - 如何允许 percona 以本地主机上的非 sudo 用户身份与 root 连接?

Mysql:在Mysql View 中添加主键?

php - mysql 错误 2003 [HY000] - 当我尝试连接到远程 mysql 时

mysql - 在大型 MySQL 表中修剪一列数据的最快方法

mysql - 如何正确使用 sum (case ... when ... then ...) ?

mysql - 新的 MySQL 服务器比旧的慢

mysql - 是否可以仅从 .ibd 文件重新创建表模式?