我将家用机器用作我的个人数据库,用于我的爱好分析项目。该计算机具有用于MySQL存储数据的主驱动器的SSD。它还具有更大的次要硬盘驱动器,而不是SSD。我要创建一张桌子,我担心可能太大而无法适合我的SSD;我是否有可能将一张桌子存储在较大(但较慢)的驱动器上?如果重要的话,我通常使用Myisam表,但可以说服使用InnoDB,如果有帮助的话。

有帮助吗?

解决方案 3

罗兰多的答案 几乎有效,除了它需要牢固的链接。据我了解,在2个不同的物理驱动器之间不可能进行硬链接(使用不同的物理驱动器是我想要新目录的唯一原因)。

但是,他的回答(和 弗拉迪斯拉夫的)为我提供了灵感来找到 一个答案 这似乎对我有用。简而言之,创建一个 database_name.sym 提交并将其放在目录中 database_name的数据目录。将新目录的名称放在其中 .sym 文件,然后移动 database_name 数据目录到所引用的新位置 .sym 文件。

其他提示

如这里已经讨论的那样,MySQL中没有自动支持。但是,您可以自己创建符号链接。

将文件从数据目录移至其他地方,因为管理员创建了符号链接

Mklink原始路径新路径

如果您有古老的窗户(例如XP或Windows 2003),那将行不通。 NTF中的Symlink支持在Vista首次亮相。

迁移的单个Myisam表到另一个磁盘是 仅在Linux版本而不是Windows中,MySQL具有数据目录和索引目录条款 在Myisam桌子上的Alter表。

但是,在Windows中,您可以手动将.myd和.myi文件移至想要的位置。

更新2012-01-03 22:03 EDT

有趣的是,我的Windows 7机器上的MySQL 5.5.15表示Symlink支持存在:

mysql> show variables like 'have_sym%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_symlink  | YES   |
+---------------+-------+
1 row in set (0.09 sec)

我还发现在Windows中可以进行同步链接:

在我家里的Windows 7机器上,命令行实用程序 mklink 存在:

C:\Windows\system32>mklink
Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    specifies the new symbolic link name.
        Target  specifies the path (relative or absolute) that the new link
                refers to.

C:\Windows\system32>

我很震惊 !!!这意味着您可以尝试 CREATE TABLE ... DATA DIRECTORY='...' INDEX DIRECTORY='...' 在Windows中。

我只是尝试了:

use test
drop table if exists data_table;
drop table if exists data_table_sharded;
CREATE TABLE data_table (a int,primary key(a)) ENGINE=MyISAM;
CREATE TABLE data_table_sharded LIKE data_table;
ALTER TABLE data_table_sharded DATA DIRECTORY='C:\DAT' INDEX DIRECTORY='C:\NDX';

我刚到这个:

mysql> use test
Database changed
mysql> drop table if exists data_table;
Query OK, 0 rows affected (0.02 sec)

mysql> drop table if exists data_table_sharded;
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE TABLE data_table (a int,primary key(a)) ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE data_table_sharded LIKE data_table;
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER TABLE data_table_sharded DATA DIRECTORY='C:\DAT' INDEX DIRECTORY='C:\NDX';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 2

mysql> show warnings;
+---------+------+----------------------------------+
| Level   | Code | Message                          |
+---------+------+----------------------------------+
| Warning | 1618 | <DATA DIRECTORY> option ignored  |
| Warning | 1618 | <INDEX DIRECTORY> option ignored |
+---------+------+----------------------------------+
2 rows in set (0.00 sec)

mysql>

您仍然无法使用 DATA DIRECTORYINDEX DIRECTORY 选项in CREATE TABLE 或者 ALTER TABLE.

更新2012-01-03 22:45 EDT

我运行了这些命令

use test
drop table if exists data_table;
drop table if exists data_table_sharded;
CREATE TABLE data_table (a int,primary key(a)) ENGINE=MyISAM;
INSERT INTO data_table VALUES (71),(22),(128),(97),(18),(4),(112),(277);
CREATE TABLE data_table_sharded LIKE data_table;

我做了两个目录

  • mkdir C:\dat
  • mkdir C:\ndx

我创建了这些文件夹,并为data_table_sharded创建了硬链接

C:\MySQL\data\test>mklink /H data_table_sharded.MYD C:\dat\data_table_sharded.MYD
Hardlink created for data_table_sharded.MYD <<===>> C:\dat\data_table_sharded.MYD

C:\MySQL\data\test>mklink /H data_table_sharded.MYI C:\ndx\data_table_sharded.MYI
Hardlink created for data_table_sharded.MYI <<===>> C:\ndx\data_table_sharded.MYI

C:\MySQL\data\test>

我回到mySQL,从data_table加载了数据:

mysql> flush tables;
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO data_table_sharded SELECT * FROM data_table;
Query OK, 8 rows affected (0.00 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql> show create table data_table_sharded\G
*************************** 1. row ***************************
       Table: data_table_sharded
Create Table: CREATE TABLE `data_table_sharded` (
  `a` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> select * from data_table_sharded;
+-----+
| a   |
+-----+
|   4 |
|  18 |
|  22 |
|  71 |
|  97 |
| 112 |
| 128 |
| 277 |
+-----+
8 rows in set (0.00 sec)

mysql> flush tables;
Query OK, 0 rows affected (0.00 sec)

mysql>

因此,可以做到。只是使用 mklink 创建硬链接而不是符号链接。哇 !!!

我对Windows了解了一些有关MySQL的知识。我怀疑Oracle是否会实施 DATA DIRECTORYINDEX DIRECTORY 选项由于默认存储引擎现在是InnoDB。

尽管如此,您可以创建空表,将.myd和.myi移动到OS的不同文件夹,创建硬链接,运行 FLUSH TABLES; 并插入您的数据。

尝试一下,让我知道它的发展...

为此使用硬链接需要为每个文件创建一个硬链接。使用 /j上的mklink命令创建一个目录交界处,然后在该命令中,mySQL将在目录中写入文件到另一个驱动器。例如,您可以为C: dat创建一个连接到较慢的驱动器,然后在索引查询时将SSD上的C: ndx留在SSD上,以便更快地访问。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top