Pregunta

Utilizo mi máquina de inicio como mi base de datos personal para mi proyecto Hobby Analytics. Esta máquina tiene un SSD para la unidad principal donde MySQL almacena sus datos. También tiene un disco duro secundario que es más grande y no un SSD. Estoy a punto de crear una mesa que me temo que podría ser demasiado grande para encajar en mi SSD; ¿Es posible para mí almacenar esa mesa en la unidad más grande (pero más lenta)? Si es importante, generalmente estoy usando tablas de Myisam, pero podría ser persuadido para usar innodb si eso ayudara.

¿Fue útil?

Solución 3

Respuesta de Rolando Casi funciona, excepto que requiere enlaces duros. Hasta donde yo entiendo, los enlaces duros no son posibles entre 2 unidades físicas diferentes (usar una unidad física diferente es la única razón por la que quiero un nuevo directorio).

Sin embargo, su respuesta (y Vladislav's) me proporcionó inspiración para encontrar una respuesta Eso parece funcionar para mí. En resumen, crea un database_name.sym archivo y ponerlo en el directorio de database_nameDirectorio de datos. Pon el nombre del nuevo directorio en ese .sym archivo y luego mover el database_name Directorio de datos a la nueva ubicación a la que se hace referencia en el .sym expediente.

Otros consejos

Como ya se discutió aquí, no hay soporte automático para enlaces simbólicos en MySQL. Sin embargo, puede crear enlaces simbólicos.

Mueva los archivos del directorio de datos a otro lugar, ya que el administrador crea enlaces simbólicos con

mklink-patas new-path

Si tiene una antigua ventana (digamos XP o Windows 2003), esto no funcionaría. Symlink Support in NTFS debutó en Vista.

Migrar s única mesa de myisam a otro disco es Solo posible en las versiones de Linux, no en Windows, de MySQL con las cláusulas de directorio de datos y directorio de índice de la tabla alter en una tabla de Myisam.

Sin embargo, en Windows, puede mover manualmente los archivos .myd y .myi a donde desee.

Actualización 2012-01-03 22:03 EDT

Interesante, MySQL 5.5.15 en mis máquinas Windows 7 dice que existe soporte de enlaces simbólicos:

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

También descubrí que el simulacro es posible en Windows:

En mis máquinas de Windows 7 en casa, la utilidad de la línea de comandos mklink existe:

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>

ESTOY IMPACTADO !!! Eso significa que puedes experimentar con CREATE TABLE ... DATA DIRECTORY='...' INDEX DIRECTORY='...' En Windows.

Acabo de intentar esto:

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

Acabo de conseguir esto:

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>

Todavía no puedes usar el DATA DIRECTORY Y INDEX DIRECTORY opción en CREATE TABLE o ALTER TABLE.

Actualización 2012-01-03 22:45 EDT

Ejecuté estos comandos

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;

Hice dos directorios

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

Creé esas carpetas y creé enlaces duros para 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>

Regresé a mysql y cargué los datos 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>

Entonces, se puede hacer. Solo usa mklink Para crear enlaces duros en lugar de enlaces simbólicos. GUAU !!!

Aprendí algo sobre MySQL para Windows. Dudo que Oracle implemente el DATA DIRECTORY y INDEX DIRECTORY Opciones ya que el motor de almacenamiento predeterminado ahora es innodb.

No obstante, crea la tabla vacía, mueve el .myd y .myi a diferentes carpetas desde el sistema operativo, crea enlaces duros, ejecutan FLUSH TABLES; e inserte sus datos.

Pruébalo y hazme saber cómo va ...

El uso de enlaces duros para esto requiere crear un enlace duro para cada archivo. Usar el comando /j en mklink crea una unión de directorio, y después de ese comando mysql escribiría los archivos en el directorio a la otra unidad. Por ejemplo, puede crear una unión para C: dat a su unidad más lenta y dejar C: ndx en el SSD para un acceso más rápido cuando se indexan consultas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top