天天看點

mysql dba系統學習(12)mysql的資料檔案

mysql的資料檔案

一,系統參數datadir

在MySQL 中每一個資料庫都會在定義好(或者預設)的資料目錄下存在一個以資料庫名字命名的檔案夾,用來存放該資料庫中各種表資料檔案 datadir指定的目錄是資料庫目錄的上級目錄,一般的建立資料庫的時候會建立兩個資料庫mysql和test,如果再建立一個資料庫的話就會多出一個對應的資料庫檔案夾

mysql> show variables like "%datadir%";

+---------------+-----------------------+

| Variable_name | Value                 |

| datadir       | /usr/local/mysql/var/ |

+---------------+-----------------------

mysql> system ls  /usr/local/mysql/var/

ibdata1      ib_logfile1  test     test4.pid test4.wolf.org.pid

ib_logfile0  mysql  test4.log  test4.wolf.org.err

mysql> create database chen;

Query OK, 1 row affected (0.03 sec)

chen ib_logfile0  mysql  test4.logtest4.wolf.org.err

ibdata1  ib_logfile1  test   test4.pidtest4.wolf.org.pid

二,MyISAM 引擎的資料檔案

我們來在chen資料庫裡面建立一個表試試看,會産什麼變化!!

mysql> use chen;

Database changed

mysql> create table tt(id int ,name varchar(20)) engine=myisam;

Query OK, 0 rows affected (0.15 sec)

結果生成如下檔案

[root@test4 ~]# cd /usr/local/mysql/var/chen/

[root@test4 chen]# ll  -h

total 20K

-rw-rw----. 1 mysql mysql   61 Sep  4 20:04 db.opt

-rw-rw----. 1 mysql mysql 8.4K Sep  4 20:22 tt.frm

-rw-rw----. 1 mysql mysql    0 Sep  4 20:22 tt.MYD

-rw-rw----. 1 mysql mysql 1.0K Sep  4 20:22 tt.MYI

“.frm”檔案        與表相關的中繼資料(meta)資訊都存放在“.frm”檔案中,包括表結構的定義資訊等。不論是什麼存儲引擎,每一個表都會有一個以表名命名的“.frm”檔案。所有的“.frm”檔案都存放在所屬資料庫的檔案夾下面。而且大小也不會變化

“.MYD”檔案        “.MYD”檔案是MyISAM 存儲引擎專用,存放MyISAM 表的資料。每一個MyISAM 表都會有一個“.MYD”檔案與之對應,同樣存放于所屬資料庫的檔案夾下,和“.frm”檔案在一起。

“.MYI”檔案        “.MYI”檔案也是專屬于MyISAM存儲引擎的,主要存放MyISAM表的索引相關資訊。對于MyISAM存儲來說,可以被cache 的内容主要就是來源于“.MYI”檔案中。每一個MyISAM表對應一個“.MYI”檔案,存放于位置和“.frm”以及“.MYD”一樣。

三,innodb 引擎的資料檔案

            innodb_file_per_table參數的作用是決定innodb引擎的資料是不是每個表一個檔案,也就是說是不是每個表獨享一個表檔案。off表示的是共享,on表示的是獨享

mysql> show variables like "%per_table%";

+-----------------------+-------+

| Variable_name         | Value |

| innodb_file_per_table | OFF   |

1 row in set (0.01 sec)

“.ibd”檔案和ibdata 檔案

     這兩種檔案都是存放Innodb 資料的檔案,之是以有兩種檔案來存放Innodb 的資料(包括索引),是因為Innodb 的資料存儲方式能夠通過配置來決定是使用共享表空間存放存儲資料,還是獨享表空間存放存儲資料。 獨享表空間存儲方式使用“.ibd”檔案來存放資料,且每個表一個“.ibd”檔案,檔案存放在和MyISAM資料相同的位置。

       如果選用共享存儲表空間來存放資料,則會使用ibdata 檔案來存放,所有表共同使用一個(或者多個,可自行配置)ibdata 檔案。ibdata 檔案可以通過innodb_data_home_dir 和innodb_data_file_path兩個參數共同配置組成, innodb_data_home_dir 配置資料存放的總目錄, 而innodb_data_file_path 配置每一個檔案的名稱。當然,也可以不配innodb_data_home_dir而直接在innodb_data_file_path參數配置的時候使用絕對路徑來完成配置。

mysql> show variables like "%innodb_data%";

+-----------------------+------------------------+

| Variable_name         | Value                  |

| innodb_data_file_path | ibdata1:10M:autoextend |

| innodb_data_home_dir  | /usr/local/mysql/var   |

       innodb_data_file_path中可以一次配置多個ibdata檔案。檔案可以是指定大小,也可以是自動擴充的,但是Innodb 限制了僅僅隻有最後一個ibdata 檔案能夠配置成自動擴充類型。當我們需要添加新的ibdata 檔案的時候,隻能添加在innodb_data_file_path配置的最後,而且必須重新開機MySQL 才能完成ibdata 的添加工作。

  我們把參數innodb_file_per_table設定成on試試有什麼變化,那麼這個時候就是一個表一個資料檔案了。。。

| innodb_file_per_table | ON    |

mysql> use chen

mysql> create table cc(id int ,name varchar(20)) engine=innodb;

Query OK, 0 rows affected (0.14 sec)

mysql> insert into cc values(1,'rdcgggiiii');

Query OK, 1 row affected (0.08 sec)

mysql> insert into cc  select * from  cc;

Query OK, 1 row affected (0.62 sec)

Records: 1  Duplicates: 0  Warnings: 0

生成的.idb資料檔案

[root@test4 chen]# pwd

/usr/local/mysql/var/chen

[root@test4 chen]# ls

cc.frm  cc.ibd  db.opt  ss.frm  tt.frm  tt.MYD  tt.MYI

本文轉自陳仲陽0 51CTO部落格,原文連結:http://blog.51cto.com/wolfword/1288777