Frage

Ich benutze meine Heimmaschine als meine persönliche Datenbank für mein Hobby -Analyseprojekt. Diese Maschine verfügt über eine SSD für das Hauptlaufwerk, bei dem MySQL ihre Daten speichert. Es hat auch eine sekundäre Festplatte, die größer und keine SSD ist. Ich bin dabei, einen Tisch zu erstellen, von dem ich befürchte, dass er zu groß sein könnte, um auf meine SSD zu passen. Ist es mir möglich, diesen einen Tisch auf dem größeren (aber langsameren) Laufwerk zu speichern? Wenn es wichtig ist, verwende ich im Allgemeinen MyISAM -Tabellen, könnte aber überredet werden, InnoDB zu verwenden, wenn dies helfen würde.

War es hilfreich?

Lösung 3

Rolandos Antwort Fast funktioniert, außer dass es harte Links erfordert. Soweit ich es verstehe, sind harte Verbindungen zwischen 2 verschiedenen physischen Laufwerken nicht möglich (die Verwendung eines anderen physischen Antriebs ist der einzige Grund, warum ich ein neues Verzeichnis wünsche).

Seine Antwort jedoch (und Vladislav) gab mir Inspiration zu finden eine Antwort Das scheint für mich zu funktionieren. Kurz gesagt, erstellen Sie a database_name.sym Datei filmen und in das Verzeichnis von stecken database_nameDatenverzeichnis. Geben Sie den Namen des neuen Verzeichnisses darin ein .sym Datei und dann das verschieben database_name Datenverzeichnis auf den neuen Ort, auf den in der verwiesen wird .sym Datei.

Andere Tipps

Wie bereits hier erläutert, gibt es in MySQL keine automatische Unterstützung für Symlinks. Sie können sich jedoch symlinks erstellen.

Verschieben Sie die Dateien vom Datenverzeichnis auf woanders, da Administrator symbolische Links erstellt

MKLink Original-Path New-Path

Wenn Sie ein altes Fenster haben (z. B. XP oder Windows 2003), würde dies nicht funktionieren. Symlink -Unterstützung in NTFs debütierte in Vista.

Migrieren S einzelner MyIsam -Tabelle auf eine andere Festplatte ist Nur in Linux -Versionen, nicht in Windows, von MySQL mit dem Datenverzeichnis- und Indexverzeichnisklauseln von Altertisch auf einem MyISAM -Tisch.

In Windows können Sie jedoch die .myd- und .myi -Dateien auf die gewünschte Stelle verschieben.

Update 2012-01-03 22:03 EDT

Interessant, MySQL 5.5.15 auf meinen Windows 7 -Maschinen sagt, dass Symlink -Unterstützung existiert:

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

Ich stellte auch fest, dass Symloinking in Windows möglich ist:

Unter meinen Windows 7 -Maschinen zu Hause, dem Befehlszeilen -Dienstprogramm mklink existiert:

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>

ICH BIN SCHOCKIERT !!! Das heißt, Sie können mit experimentieren CREATE TABLE ... DATA DIRECTORY='...' INDEX DIRECTORY='...' in Fenstern.

Ich habe es gerade versucht:

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

Ich habe gerade das bekommen:

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>

Sie können das immer noch nicht verwenden DATA DIRECTORY UND INDEX DIRECTORY Option in CREATE TABLE oder ALTER TABLE.

Update 2012-01-03 22:45 EDT

Ich habe diese Befehle ausgeführt

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;

Ich habe zwei Verzeichnisse gemacht

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

Ich habe diese Ordner erstellt und harte Links für data_table_sharded erstellt

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>

Ich kehrte zu MySQL zurück und lud die Daten von 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>

Es kann also getan werden. Benutz einfach mklink Harte Links anstelle von Symlinks zu erstellen. WOW !!!

Ich habe etwas über MySQL für Windows gelernt. Ich bezweifle, ob Oracle die implementieren wird DATA DIRECTORY und INDEX DIRECTORY Optionen Da die Standard -Speicher -Engine jetzt innoDB ist.

Ungeachtet dessen erstellen Sie die leere Tabelle, verschieben die .myd und .myi aus dem Betriebssystem in verschiedene Ordner, erstellen Sie harte Links, führen Sie aus FLUSH TABLES; und fügen Sie Ihre Daten ein.

Probieren Sie es aus und lassen Sie mich wissen, wie es geht ...

Um harte Links zu verwenden, müssen für jede Datei ein harter Link erstellt werden. Durch die Verwendung des Befehls /j auf MKLink wird eine Verzeichnisanbindung erstellt, und danach schrieb MySQL die Dateien im Verzeichnis auf das andere Laufwerk. Zum Beispiel können Sie eine Übermittlung für C: DAT zu Ihrem langsameren Laufwerk erstellen und C: ndx auf der SSD für einen schnelleren Zugriff lassen, wenn die Abfragen indexiert sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top