數據庫常用的兩種引擎有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. 關於引擎的查詢使用如下:
補充: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"