Могу ли я указать другой диск для конкретной таблицы MySQL?

dba.stackexchange https://dba.stackexchange.com/questions/10108

Вопрос

Я использую свою домашнюю машину в качестве своей личной базы данных для моего проекта Hobby Analytics. Эта машина имеет SSD для основного диска, где MySQL хранит свои данные. Он также имеет вторичный жесткий диск, который больше, а не SSD. Я собираюсь создать стол, которого я боюсь, может быть слишком большим, чтобы вписаться на мой SSD; Возможно ли я вместо этого хранить этот таблицу на более широком (но медленном) диске? Если это важно, я обычно использую таблицы Myisam, но его можно убедить использовать Innodb, если это поможет.

Это было полезно?

Решение 3

Ответ Роландо Почти работает, за исключением того, что это требует жестких ссылок. Насколько я понимаю, жесткие ссылки невозможны между двумя разными физическими дисками (использование другого физического диска - единственная причина, по которой я хочу новый каталог).

Однако его ответ (и Владислав) дал мне вдохновение найти Ответ Кажется, это работает для меня. Короче, создайте database_name.sym подайте и поместите его в каталог database_nameСправочник данных. Поместите название нового каталога в это .sym файл, а затем переместите database_name каталог данных в новое местоположение, упомянутое в .sym файл.

Другие советы

Как уже обсуждалось здесь, в MySQL нет автоматической поддержки символиков. Однако вы можете создавать символические ссылки.

Переместите файлы из каталога данных в другое другое, так как администратор создает символические ссылки с

Mklink Original-Path New-Path

Если у вас есть древние окна (скажем, XP или Windows 2003), это не сработает. Symlink Support в NTFS дебютировала в Vista.

Мигрирование одиночного таблицы Myisam на другой диск Возможно только в версиях Linux, а не в Windows, из MySQL с предложениями каталога данных и индекса альтер -таблицы на столе Myisam.

Однако в Windows вы можете вручную перемещать файлы .myd и .myi туда, где вы хотите.

Обновление 2012-01-03 22:03 EDT

Интересно, MySQL 5.5.15 на моих машинах Windows 7 говорит, что Symlink Support существует:

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='...' в окнах.

Я только что попробовал это:

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 DIRECTORY А ТАКЖЕ INDEX DIRECTORY вариант в 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 создавать жесткие ссылки вместо символических ссылок. ВОТ ЭТО ДА !!!

Я узнал кое -что о MySQL для Windows. Я сомневаюсь, что Oracle внедрит DATA DIRECTORY а также INDEX DIRECTORY Параметры, так как двигатель хранения по умолчанию теперь innodb.

Несмотря на это, вы создаете пустую таблицу, перемещаете .myd и .myi в разные папки из ОС, создаете жесткие ссылки, запустите FLUSH TABLES; и вставьте свои данные.

Попробуйте, и дайте мне знать, как это происходит ...

Использование жестких ссылок для этого требует создания жесткой ссылки для каждого файла. Использование /J в команде Mklink создает перекресток каталога, и после этой одной команды MySQL записывает файлы в каталоге на другой диск. Например, вы можете создать соединение для C: DAT на ваш более медленный диск и оставить C: NDX на SSD для более быстрого доступа, когда запросы индексируются.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top