Open Source WEB

オンラインマニュアルで、innodb_data_file_pathで検索したら、 15.4. InnoDB Configuration が見つかった。 InnoDBの構成に関して、かなり長く書かれていて、 ちょっと全部を読むのは大変だし、今そこまで詳しい情報が欲しい訳ではない。

その中に、オプションファイルの中で、innodb_data_file_pathの値を設定し、 その意味を説明しているところがあった。

[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend

This setting configures a single 10MB data file named ibdata1 
that is auto-extending. No location for the file is given, 
so the default is the MySQL data directory.

Sizes are specified using M or G suffix letters to indicate 
units of MB or GB. 

ということは、現在の値である

innodb_data_file_path=ibdata1:10M:autoextend

は、

      • ibdata1 は データファイル名
      • 10M は ファイルサイズ
      • autoextended は自動拡張

を示している。

MySQLのデータディレクトリの下は、

shell# pwd
/usr/local/mysql/var
shell# ls -l ibdata1
-rw-rw----    1 mysql    mysql    10485760 10月  9 20:09 ibdata1

となっていて、これはInnoDBのデータが格納される場所は、InnoDBタイプの テーブルが属するデータベースの実体であるディレクトリの中ではなく、 その1つ上、つまりデータベースと同じレベルのデータファイルに記憶される。

つまり、「漢字」という名前のテーブルを作ったら、 漢字.frm というフォーマットファイルはデータベースのディレクトリに できたが、データはそこには無いので注意が必要だ。

InnoDBの場合:

テーブル名.frm   テーブル定義が記述されているファイル

ibdata1    データのディレクトリの下にできる共通のデータファイル


異なるデータベースのInnoDB型のテーブルのデータは何処に

InnoDBのテーブルのデータ自体は、MySQLのデータディレクトリの下に ibdata1という名前のファイルでできた。

データベースとの関係については何も記述がなかったのだが、 今まで使っていたデータベース 「日本」ではなく、 元からある test というデータベースに切り替えて、 極度に簡単なInnoDB型のテーブルを作ってデータを入れてみよう。

mysql> USE test;
Database changed
mysql> CREATE TABLE `a` (
    ->   `i` int(11) default NULL
    -> ) ENGINE=InnoDB DEFAULT\c CHARSET=latin1
    -> \c
mysql> CREATE TABLE `a` ( `i` int ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.09 sec)
 
mysql> INSERT `a` VALUES (100),(200),(300);
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> SELECT * from `a`;
+------+
| i    |
+------+
|  100 |
|  200 |
|  300 |
+------+
3 rows in set (0.00 sec)

mysql>

このように、別のデータベース内にInnoDB型のテーブルを作っても、 InnoDBのデータファイルは1つだけである。

shell# ls -l ibdata1
-rw-rw----    1 mysql    mysql    10485760 10月  9 21:19 ibdata1

MyISAMでは、ファイルをコピーするだけで、 テーブルのコピーが安直にできた。

InnoDBでデータファイルをテーブル毎にする方法が欲しいな。 何か手はないのかなぁ。


戻る:テーブルがInnoDBの場合はどうなるか

次へ:InnoDBでテーブル毎にデータファイルを作る方法


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us