Могу ли я указать другой диск для конкретной таблицы MySQL?
-
16-10-2019 - |
Вопрос
Я использую свою домашнюю машину в качестве своей личной базы данных для моего проекта 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 возможны символики:
- 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='...'
в окнах.
Я только что попробовал это:
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 для более быстрого доступа, когда запросы индексируются.