質問

私は趣味分析プロジェクトの個人データベースとしてホームマシンを使用しています。このマシンには、MySQLがデータを保存するメインドライブ用のSSDがあります。また、SSDではなく大きくて大きいセカンダリハードドライブもあります。私は、SSDに収まるには大きすぎるのではないかと恐れているテーブルを作成しようとしています。代わりに、その1つのテーブルをより大きな(しかし遅い)ドライブに保存することは可能ですか?それが重要な場合、私は一般的にMyisamテーブルを使用していますが、それが役立つ場合はInnodbを使用するように説得される可能性があります。

役に立ちましたか?

解決 3

ローランドの答え ハードリンクが必要であることを除いて、ほとんど機能します。私が理解する限り、2つの異なる物理ドライブの間でハードリンクは不可能です(異なる物理ドライブを使用することが、新しいディレクトリが必要な唯一の理由です)。

しかし、彼の答え(そして Vladislav's)私にインスピレーションを見つけることができました 答え それは私のために働いているようです。要するに、aを作成します database_name.sym ファイルして、ディレクトリに配置します database_nameのデータディレクトリ。その中に新しいディレクトリの名前を入れます .sym ファイルしてから移動します database_name で参照されている新しい場所へのデータディレクトリ .sym ファイル。

他のヒント

ここですでに説明したように、MySQLにはSymlinksの自動サポートはありません。ただし、シンリンクを作成することができます。

管理者がシンボリックリンクを作成すると、ファイルをデータディレクトリから他の場所に移動します

Mklinkオリジナルパスニューパス

古代の窓(XPやWindows 2003など)がある場合、これは機能しません。 VistaでデビューしたNTFSのSymlinkサポート。

Sシングルミサムテーブルを別のディスクに移行します データディレクトリとインデックスディレクトリ条項を備えたMySQLのWindowsではなくLinuxバージョンでのみ可能 myisamテーブルのアルターテーブルの。

ただし、Windowsでは、.mydおよび.myiファイルを必要な場所に手動で移動できます。

更新2012-01-03 22:03 EDT

興味深い、私のWindows 7マシンのMySQL 5.5.15は、Symlinkサポートが存在すると言っています。

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

また、Windowsでシンリンクが可能であることも発見しました。

自宅のWindows7マシンでは、コマンドラインユーティリティ 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='...' Windowsで。

私はこれを試しました:

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

私は2つのディレクトリを作りました

  • 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 Symlinksの代わりにハードリンクを作成します。おお !!!

WindowsのMySQLについて何かを学びました。 Oracleが実装するかどうかは疑わしい DATA DIRECTORYINDEX DIRECTORY オプションデフォルトのストレージエンジンはInnodbになりました。

それにもかかわらず、空のテーブルを作成し、.mydと.myiをOSから異なるフォルダーに移動し、ハードリンクを作成し、実行します FLUSH TABLES; データを挿入します。

試してみて、どうなるか教えてください...

これにハードリンクを使用するには、各ファイルにハードリンクを作成する必要があります。 MKLINKコマンドで /jを使用すると、ディレクトリジャンクションが作成され、その後、1つのコマンドMySQLがディレクトリ内のファイルを他のドライブに書き込みます。たとえば、c: datのジャンクションをより遅いドライブに作成し、クエリがインデックス付けされたときにより速いアクセスを得るためにSSDにC: ndxを残すことができます。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top