Question

J'utiliser ma machine à la maison comme ma base de données personnelle pour mon projet d'analyse de passe-temps. Cette machine dispose d'un SSD pour le lecteur principal où MySQL stocke ses données. Il dispose également d'un disque dur secondaire qui est plus grand et non un SSD. Je suis sur le point de créer une table que je crains peut-être trop grand pour tenir sur mon SSD; est-il possible pour moi de stocker à la place que l'on table sur la plus grande (mais plus lent) d'entraînement? Si cela importe, je suis généralement en utilisant les tables MyISAM, mais pourrait être persuadé d'utiliser InnoDB si cela pouvait aider.

Était-ce utile?

La solution 3

réponse de Rolando fonctionne presque, sauf qu'il exige des liens durs. Pour autant que je le comprends, les liens durs ne sont pas possibles entre 2 différents disques physiques (à l'aide d'un disque physique différent est la seule raison pour laquelle je veux un nouveau répertoire).

Cependant, sa réponse (et de Vladislav) m'a fourni l'inspiration pour trouver

Autres conseils

Comme nous l'avons discuté ici, il n'y a pas de soutien automatique pour des liens symboliques dans MySQL. Cependant, vous pouvez créer des liens symboliques youself.

Déplacer les fichiers du répertoire de données à un autre endroit, en tant qu'administrateur de créer des liens symboliques avec

mklink-chemin original nouveau chemin

Si vous avez un ancien de Windows (XP ou Windows dire 2003), cela ne fonctionnerait pas. le soutien en NTFS symlink a fait ses débuts dans Vista.

Migrer seule table MyISAM de un autre disque est href="http://dev.mysql.com/doc/refman/5.5/en/limits-windows.html" que possible les versions Linux, pas Windows, MySQL avec les clauses DATA DIRECTORY et INDEX DIRECTORY ALTER TABLE sur une table MyISAM.

Cependant, dans Windows, vous pouvez déplacer manuellement les fichiers .MYD et .MYI à l'endroit où vous voulez.

Mise à jour 2012-01-03 22:03 EDT

Interestinging, MySQL 5.5.15 sur mes ordinateurs Windows 7 dit support existe symlink:

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

J'ai aussi découvert que possible dans un lien symbolique de Windows:

Sur mes ordinateurs Windows 7 à la maison, la ligne de commande utilitaire existe 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>

Je suis choqué !!! Cela signifie que vous pouvez expérimenter avec CREATE TABLE ... DATA DIRECTORY='...' INDEX DIRECTORY='...' dans Windows.

Je viens d'essayer ceci:

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';

Je viens de recevoir ceci:

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>

Vous pouvez toujours pas utiliser l'option DATA DIRECTORY ET INDEX DIRECTORY dans CREATE TABLE ou ALTER TABLE.

Mise à jour 2012-01-03 22:45 EDT

J'ai couru ces commandes

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;

J'ai fait deux répertoires

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

J'ai créé ces dossiers et a créé des liens durs pour 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>

Je suis retourné à MySQL et chargé les données de 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>

Ainsi, il peut être fait. Il suffit d'utiliser mklink pour créer des liens durs au lieu de liens symboliques. WOW !!!

Je l'ai appris quelque chose à propos de MySQL pour Windows. Je doute que Oracle mettra en œuvre les options de DATA DIRECTORY et INDEX DIRECTORY depuis le moteur de stockage par défaut est maintenant InnoDB.

Malgré cela, vous créez la table vide, déplacez le .MYD et .MYI à différents dossiers du système d'exploitation, de créer des liens durs, exécutez FLUSH TABLES; et INSERT vos données.

Donnez-lui un essai, et laissez-moi savoir comment ça se passe ...

L'utilisation des liens durs pour cela nécessite la création d'un lien dur pour chaque fichier. Utilisation de la / J sur commande mklink crée un Junction Directory, et après que l'on commande mysql écrirait les fichiers dans le répertoire à l'autre lecteur. Par exemple, vous pouvez créer une jonction C: \ dat sur votre disque plus lent, et laisser C: \ ndx sur le SSD pour un accès plus rapide lorsque les requêtes sont indexées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top