innodb和myisam數據庫文件存儲詳解以及mysql表空間


  

  數據庫常用的兩種引擎有Innodb和Myisam,關於二者的區別參考:https://www.cnblogs.com/qlqwjy/p/7965460.html

 

1.關於數據庫的存儲在兩種引擎的存儲是一樣的

  數據庫的存儲的都是在data目錄下新建一個與數據庫名字相同的文件夾,且每個文件夾內默認存放一個db.opt文件。刪掉數據庫也會刪掉對應的文件夾。

 如果我們采用的是windows操作系統,並且是默認安裝位置,存放數據庫的目錄是在:  C:\ProgramData\MySQL\MySQL Server 5.7\Data  ,比如我查看我的數據庫:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hibernate          |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+
6 rows in set (0.00 sec)

 

查看目錄:

 

   當然了,生成數據庫的文件位置我們可以自己指定,windows是my.ini配置文件,如下面的配置會將我們的數據庫生成到G盤對應目錄:

# Path to the database root
datadir=G:\mysql572\Data

 

 

 

2.關於Innodb引擎存儲表結構以及數據的位置

  innnodb存儲表結構的時候是 frm文件存儲,比如我們有個表叫test,在其數據庫對應的文件夾下會有test.fm文件生成。其實myisam也是這樣的存儲方式。

 

  innodb采用表空間(tablespace)來管理數據,存儲表數據和索引,

    InnoDB數據庫文件(即InnoDB文件集,ib-file set):

    ibdata1、ibdata2等:系統表空間文件,存儲InnoDB系統信息和用戶數據庫表數據和索引,所有表共用(共用表空間),其存放位置是在Data文件夾內。可以通過以下配置進行設置其大小與可擴展:

innodb_data_file_path = ibdata1:50M:autoextend

 

 

注意:下面是mysql5.6.6之后的單表空間

  在mysql5.6.6可以對每個表都設置一個表空間(單表表空間文件),開啟可以通過全局變量開啟,開啟之后每個表都有一個對應的.ibd與其對應,比如上面有一個表的名字為  test  ,則在其數據庫文件夾下就會有  test.frm(存放表結構)與test.ibd(存放數據與索引等信息)

# When innodb_file_per_table is enabled (the default in 5.6.6 and higher), InnoDB stores the data and indexes for each newly created table
# in a separate .ibd file, rather than in the system tablespace.
innodb_file_per_table=1

 

  

  查看是否開啟單獨表空間:

mysql> show variables like '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set, 1 warning (0.00 sec)

 

 

  例如下面就是單表空間開啟:-------------------(數據庫的名字是testdb,@6bxxx是表名字為中文)

 

 

補充:共用表空間和單獨表空間的優缺點如下

獨立表空間的優點:
1.每個表都有自已獨立的表空間。
2.每個表的數據和索引都會存在自已的表空間中。
3.可以實現單表在不同的數據庫中移動。
4.空間可以回收(drop/truncate table方式操作表空間不能自動回收)
5.對於使用獨立表空間的表,不管怎么刪除,表空間的碎片不會太嚴重的影響性能,而且還有機會處理。

缺點:
單表增加比共享空間方式更大。

共享表空間的優點:
1)可以放表空間分成多個文件存放到各個磁盤上(表空間文件大小不受表大小的限制,如一個表可以分布在不同的文件上)。
所以其大小限制不再是文件大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其表空間的最大限制為64TB,
也就是說,Innodb的單表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關數據。
2)表數據和表描述放在一起方便管理。 
缺點:
所有的數據和索引存放到一個文件中,將有一個很常大的文件,雖然可以把一個大文件分成多個小文件,但是多個表及索引在表空間
中混合存儲,這樣對於一個表做了大量刪除操作后表空間中將會有大量的空隙,特別是對於統計分析,日志系統這類應用最不適合用共享表空間。

總結:MySQL數據庫是由N多表組成的,每個表有自己的表定義文件.frm文件,表索引文件,表數據文件。INNODB的索引文件和數據文件是在一起的,MYISAM是分開的。
  對於表空間,INNODB分成共享表空間和獨享表空間2種。共享的情況下,所有表的數據都存在一個文件里,獨享情況下,每個表單獨文件存儲此表的數據。

 

 

3. 關於Myisam引擎的數據存儲結構

  Myisam存儲表結構的時候是 frm文件存儲,比如我們有個表叫test,在其數據庫對應的文件夾下會有test.fm文件生成。

  .MYD (MYData)是數據文件的擴展名

  .MYI是索引(my index)。

  上面三種存儲結構都是在數據庫對應的目錄下面。

例如:

 

 

 4.查看數據庫的引擎與修改數據庫默認引擎

1.  關於引擎的查詢使用如下:

看你的mysql現在已提供什么存儲引擎:
  mysql> show engines;
 
看你的mysql當前默認的存儲引擎:
  mysql> show variables like '%storage_engine%';
你要 看某個表用了什么引擎(在顯示結果里參數engine后面的就表示該表當前用的存儲引擎):
  mysql> show create table 表名;
2、設置InnoDB為默認引擎:(類似於修改全局變量)
  在配置文件my.ini中的 [mysqld] 下面加入下面配置:( mysql5.7默認已經將innodb作為默認的搜索引擎)
    default-storage-engine=INNODB 

 

 

補充:err日志記錄文件在兩種引擎中也是一樣的:MicroWin10-1535.err

我們可以在系統中通過全局變量查詢日志位置:(.\代表Data目錄所在文件夾,后面是日志文件名稱)

mysql> show variables like 'log_error';
+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| log_error     | .\MicroWin10-1535.err |
+---------------+-----------------------+
1 row in set, 1 warning (0.01 sec)

 

 

如果想修改日志文件位置以及名稱,我們可以在my.ini文件進行配置:

# Binary Logging.
log-error="MicroWin10-1535.err"

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM