MySQLがデータを保管する場所 〜 データディレクトリ

MySQLでは、データの保管場所を原則としてデータディレクトリとしている。ただし、これは原則であって、InnoDBなどのストレージエンジンでは必ずしもそうではないことを初めに述べておく。

さて、データディレクトリは、「MySQL導入のポイント 〜 Ubuntu14にMySQLをapt-get、rpmを使わずにインストールする」で述べたように、インストール時に指定する。

データディレクトリをどこに指定したのかを忘れた場合は、my.cnfで確認することができる。
my.cnfがどこにあるのかを忘れた場合はlocateコマンドで検索できるだろう。

root@ubuntu:~# updatedb
root@ubuntu:~# locate my.cnf
/etc/mysql/my.cnf

my.cnfでデータディレクトリの場所を確認する。

root@ubuntu:~# less /etc/mysql/my.cnf

/var/lib/mysqlがデータディレクトリであることが分かる。

/var/lib/mysqlへ移動して、構成を確認してみる。

root@ubuntu:~# cd /var/lib/mysql/
root@ubuntu:/var/lib/mysql# ls
auto.cnf         ibdata1      ib_logfile1  mysql_upgrade_info
debian-5.5.flag  ib_logfile0  mysql       performance_schema

紫色のものはデータベース毎のディレクトリである。

試しに、BLOGというテーブルを作成してみる。

#mysql -uroot -p

mysql> create database BLOG;
Query OK, 1 row affected (0.01 sec)

データディレクトリを確認してみると確かに「BLOG」というディレクトリが作成されている。

つまり、紫色のディレクトリはデータベース毎のデータを保管するディレクトリである。
さらに、ディレクトリの中を確認するが、db.optというファイルしか存在しない。データベースを作成しただけなので当然だろうか。

root@ubuntu:/var/lib/mysql# cd BLOG/
root@ubuntu:/var/lib/mysql/BLOG# ls
db.opt

BLOGデータベースにテーブルを作成してみる。

mysql> create table BLOG.tbl_blog (id int, name varchar(20));
Query OK, 0 rows affected (0.17 sec)

データディレクトリを確認する。

root@ubuntu:/var/lib/mysql/BLOG# ls
db.opt  tbl_blog.frm  tbl_blog.ibd

テーブルを作成すると.frmファイルと.ibdファイルが作成された。

それぞれのファイルの役割は次のとおりである。

◎.frmファイル : フィールド定義などテーブル情報を記録するファイル
◎.ibdファイル : テーブル毎にディレクトリとインデックスを記録するファイル(テーブルスペースではなく、ibdファイルに記録する)
※)ibdファイルが使用されるのは、InnoDBストレージを使用して、innodb_file_per_tableによる保存方法である場合。