AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 10108
Accepted
Michael McGowan
Michael McGowan
Asked: 2012-01-04 16:07:24 +0800 CST2012-01-04 16:07:24 +0800 CST 2012-01-04 16:07:24 +0800 CST

我可以为特定的 MySQL 表指定不同的磁盘吗?

  • 772

我将家用机器用作我的爱好分析项目的个人数据库。这台机器有一个 SSD 用于 MySQL 存储其数据的主驱动器。它还有一个更大的辅助硬盘驱动器,而不是 SSD。我即将创建一个我担心可能太大而无法放入我的 SSD 的表;我是否可以将一张表存储在更大(但更慢)的驱动器上?如果重要的话,我通常使用 MyISAM 表,但如果有帮助的话,我可以说服使用 InnoDB。

mysql windows
  • 4 4 个回答
  • 7694 Views

4 个回答

  • Voted
  1. RolandoMySQLDBA
    2012-01-04T16:23:25+08:002012-01-04T16:23:25+08:00

    将单个 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 说存在符号链接支持:

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

    我还发现在 Windows 中可以进行符号链接:

    • http://en.wikipedia.org/wiki/NTFS_symbolic_link
    • http://en.wikipedia.org/wiki/Symbolic_link#Windows_7_.26_Vista_symbolic_link

    在我家里的 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>
    

    您仍然不能在or中使用DATA DIRECTORYANDINDEX DIRECTORY选项。CREATE TABLEALTER 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 DIRECTORYandINDEX DIRECTORY选项,因为默认存储引擎现在是 InnoDB。

    尽管如此,您还是创建了空表,将 .MYD 和 .MYI 从操作系统移动到不同的文件夹,创建硬链接,运行FLUSH TABLES;和插入数据。

    试一试,告诉我进展如何...

    • 3
  2. Vladislav Vaintroub
    2012-01-04T18:32:22+08:002012-01-04T18:32:22+08:00

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

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

    mklink 原始路径 新路径

    如果你有一个古老的 Windows(比如 XP 或 Windows 2003),这是行不通的。NTFS 中的符号链接支持在 Vista 中首次亮相。

    • 3
  3. Best Answer
    Michael McGowan
    2012-01-10T17:53:14+08:002012-01-10T17:53:14+08:00

    罗兰多的答案几乎可以工作,只是它需要硬链接。据我了解,两个不同的物理驱动器之间不可能进行硬链接(使用不同的物理驱动器是我想要一个新目录的唯一原因)。

    然而,他的回答(和Vladislav 的)给了我灵感,让我找到了一个似乎对我有用的答案。简而言之,就是创建一个database_name.sym文件,放到database_name's data 目录下。将新目录的名称放在该.sym文件中,然后将database_name数据目录移动到文件中引用的新位置.sym。

    • 1
  4. packmul3
    2016-12-23T09:44:35+08:002016-12-23T09:44:35+08:00

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

    • 0

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve