mysql> show variables like 'have_sym%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_symlink | YES |
+---------------+-------+
1 row in set (0.09 sec)
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>
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>
然而,他的回答(和Vladislav 的)给了我灵感,让我找到了一个似乎对我有用的答案。简而言之,就是创建一个database_name.sym文件,放到database_name's data 目录下。将新目录的名称放在该.sym文件中,然后将database_name数据目录移动到文件中引用的新位置.sym。
将单个 MyISAM 表迁移到另一个磁盘只能在 MySQL 的 Linux 版本而不是 Windows 中使用 MyISAM 表上的 ALTER TABLE 的 DATA DIRECTORY 和 INDEX DIRECTORY 子句进行。
但是,在 Windows 中,您可以手动将 .MYD 和 .MYI 文件移动到您想要的位置。
更新 2012-01-03 22:03 EDT
有趣的是,我的 Windows 7 机器上的 MySQL 5.5.15 说存在符号链接支持:
我还发现在 Windows 中可以进行符号链接:
在我家里的 Windows 7 机器上,
mklink
存在命令行实用程序:我很震惊 !!!这意味着您可以
CREATE TABLE ... DATA DIRECTORY='...' INDEX DIRECTORY='...'
在 Windows 中进行试验。我刚试过这个:
我刚得到这个:
您仍然不能在or中使用
DATA DIRECTORY
ANDINDEX DIRECTORY
选项。CREATE TABLE
ALTER TABLE
更新 2012-01-03 22:45 EDT
我运行了这些命令
我做了两个目录
mkdir C:\dat
mkdir C:\ndx
我创建了这些文件夹并为 data_table_sharded 创建了硬链接
我回到 MySQL 并从 data_table 加载数据:
所以,是可以做到的。只需用于
mklink
创建硬链接而不是符号链接。哇 !!!我学到了一些关于 Windows 的 MySQL 的知识。我怀疑 Oracle 是否会实施
DATA DIRECTORY
andINDEX DIRECTORY
选项,因为默认存储引擎现在是 InnoDB。尽管如此,您还是创建了空表,将 .MYD 和 .MYI 从操作系统移动到不同的文件夹,创建硬链接,运行
FLUSH TABLES;
和插入数据。试一试,告诉我进展如何...
正如这里已经讨论过的,MySQL 中没有对符号链接的自动支持。但是,您可以自己创建符号链接。
将文件从数据目录移动到其他地方,因为管理员创建符号链接
mklink 原始路径 新路径
如果你有一个古老的 Windows(比如 XP 或 Windows 2003),这是行不通的。NTFS 中的符号链接支持在 Vista 中首次亮相。
罗兰多的答案几乎可以工作,只是它需要硬链接。据我了解,两个不同的物理驱动器之间不可能进行硬链接(使用不同的物理驱动器是我想要一个新目录的唯一原因)。
然而,他的回答(和Vladislav 的)给了我灵感,让我找到了一个似乎对我有用的答案。简而言之,就是创建一个
database_name.sym
文件,放到database_name
's data 目录下。将新目录的名称放在该.sym
文件中,然后将database_name
数据目录移动到文件中引用的新位置.sym
。为此使用硬链接需要为每个文件创建一个硬链接。在 mklink 命令上使用 /J 创建一个目录连接,然后一个命令 mysql 会将目录中的文件写入另一个驱动器。例如,您可以为 C:\dat 创建一个与较慢驱动器的连接,并将 C:\ndx 保留在 SSD 上,以便在索引查询时更快地访问。