共計 3450 個字符,預(yù)計需要花費 9 分鐘才能閱讀完成。
這篇文章主要介紹了 MySQL 的常見存儲引擎有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
MySQL 常用存儲引擎之 MyISAM
特性:
1、并發(fā)性與鎖級別
2、表損壞修復(fù)
check table tablename
repair table tablename
3、MyISAM 表支持的索引類型
①、全文索引
②、前綴索引
4、MyISAM 表支持?jǐn)?shù)據(jù)壓縮
myisampack
限制:
版本 MySQL5.0 時默認(rèn)表大小為 4G
如存儲達(dá)標(biāo)則要修改 MAX_Rows 和 AVG_ROW_LENGTH
版本 MySQL5.0 時默認(rèn)支持為 256TB
適用場景:
1、非事務(wù)形應(yīng)用
2、只讀類應(yīng)用
3、空間類應(yīng)用
MySQL 常用存儲引擎之 Innodb
Innodb 存儲引擎的特征
1、Innodb 是一種事務(wù)性存儲引擎
2、完全支持事務(wù)的 ACID 特性
3、Redo Log 和 Undo Log
4、Innodb 支持行級鎖
Innodb 使用表空間進(jìn)行 數(shù)據(jù)存儲
為每個表獨立創(chuàng)建一個表空間存儲
innodb_file_per_table
ON: 獨立表空間:tablename.ibd
OFF: 系統(tǒng)表空間:ibdataX(X 是個數(shù)字,從 1 開始的數(shù)字)
系統(tǒng)表空間和獨立表空間要如何選擇
比較:
系統(tǒng)表空間無法撿的收縮文件大小
獨立表空格鍵可以通過 optimize table 命令收縮系統(tǒng)文件
系統(tǒng)表空間會產(chǎn)生 IO 瓶頸
獨立表空間可以同時向多個文件刷新數(shù)據(jù)
表轉(zhuǎn)移的步驟
步驟:
1、使用 mysqldump 到處所有數(shù)據(jù)庫表數(shù)據(jù)
2、停止 MySQL 服務(wù),修改參數(shù),并刪除 Innodb 相關(guān)文件
3、重啟 MySQL 服務(wù),重建 Innodb 系統(tǒng)表空間
4、重新導(dǎo)入數(shù)據(jù)
MySQL 常見的存儲引擎之 CSV
文件系統(tǒng)存儲特點
1、數(shù)據(jù)以文本方式存儲在文本中
2、.csv 文件存儲表內(nèi)容
3、.csm 文件存儲表的元數(shù)據(jù)如表狀態(tài)和數(shù)據(jù)量
4、.frm 文件存儲表結(jié)構(gòu)信息
5、以 csv 格式進(jìn)行存儲
6、所有列必須都是不能為 Null 的
7、不支持索引
適用場景:
適用作為數(shù)據(jù)交換的中間表(電子表格 - csv 文件 - MySQL 數(shù)據(jù)庫目錄)
MySQL 常用存儲引擎之 Archive
文件系統(tǒng)存儲特點
1、以 zlib 對表數(shù)據(jù)進(jìn)行壓縮, 磁盤 I / O 更少
2、數(shù)據(jù)存儲在 ARZ 為后綴的文件中
Archive 存儲引擎的特點
1、只支持 insert 和 select 操作
2、只允許在自增的 ID 列上加索引
適用場景:
日志和數(shù)據(jù)采集類應(yīng)用
MySQL 常用存儲引擎之 Memory
文件系統(tǒng)存儲特點
1、也成 HEAP 存儲引擎,所以數(shù)據(jù)保存在內(nèi)存中
功能特點:
1、支持 HASH 索引和 Btree 索引
2、所有字段都有固定長度 varchar(10)=char(10)
3、不支持 BLOG 和 TEXT 等大字段
4、Memory 存儲引擎使用表級鎖
5、最大大小由 max_heap_table_size 參數(shù)決定
適用場景:
1、用于查找或者是映射表,例如郵編和地區(qū)的對應(yīng)表
2、用于保存數(shù)據(jù)分心中產(chǎn)生的中間表
3、用于緩存周期性聚合數(shù)據(jù)的結(jié)果表
MySQL 常用存儲引擎之 Federated
特點:
1、提供了訪問遠(yuǎn)程 MySQL 服務(wù)器上表的方法
2、本地不存儲數(shù)據(jù),數(shù)據(jù)全部放到遠(yuǎn)程服務(wù)器上
3、本地需要保存表結(jié)構(gòu)和遠(yuǎn)程服務(wù)器的連接信息
如何使用
默認(rèn)靜止,啟用需要在啟動時增加 federated 參數(shù)
mysql://user_name[:password]@host_name[:port]/db_name/table_name
適用場景:
偶爾的統(tǒng)計分析及手工查詢
如何選擇正確的存儲引擎
參考條件
1、是否要支持事務(wù)
2、定期備份
3、崩潰恢復(fù)
4、存儲引擎的特有特性
Mysql 的服務(wù)器參數(shù)介紹
MySQL 獲取配置信息路徑
1、命令行參數(shù)
mysqld_safe –datadir=/data/sql_data
2、配置文件
查看配置文件的命令:
[root@localhost ~]# mysqld –help –verbose | egrep -A 1 Default options
配置文件的有效路徑
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
MySQL 配置參數(shù)的作用域
1、全局參數(shù)
set global 參數(shù)名 = 參數(shù)值;
set @@global. 參數(shù)名:= 參數(shù)值;
2、會話參數(shù)
set [session] 參數(shù)名 = 參數(shù)值;
set @@session. 參數(shù)名:= 參數(shù)值;
內(nèi)存配置相關(guān)參數(shù)
1、確定可以使用的內(nèi)存的上限
2、確定 MySQL 的每個連接使用的內(nèi)存
sort_buffer_size
join_buffer_size
read_buffer_size
read_rnd_buffer_size
3、確定需要為操作系統(tǒng)保留多少內(nèi)存
4、如何為緩存池分配內(nèi)存
Innodb_buffer_pool_size
注:設(shè)置緩存池的大小的考量標(biāo)準(zhǔn)為: 總內(nèi)存 -(每個編程所以需要的內(nèi)存 * 連接數(shù))- 系統(tǒng)保留內(nèi)存
key_buffer_size
select sum(index_length) from information_schema.tables where engines= myisam
I/ O 相關(guān)配置參數(shù)
Innodo I/ O 相關(guān)配置
Innodb_log_file_size 單個事務(wù)日志的大小
Innodb_log_files_in_group 控制文件日子的個數(shù)
事務(wù)日志總大小 = Innodb_log_files_in_group * Innodb_log_file_size
Innodb_log_buffer_size = (32M or 128M)
Innodb_flush_log_at_trx_commint
0: 每秒進(jìn)行一次 log 寫入 cache, 并 flush log 到磁盤
1[默認(rèn)]: 在每次事務(wù)提交執(zhí)行 log 寫入 cache,并 flush log 到磁盤
2[建議]: 每次事務(wù)提交,執(zhí)行 log 數(shù)據(jù)寫入到 cache 中,每秒執(zhí)行一次 flush log 到磁盤
Innodb_flush_method=O_DIRECT
Innodb_file_per_table = 1
Innodb_doublewrite = 1
MyISAM I/ O 相關(guān)配置
delay_key_write
OFF: 每次寫操作后刷新鍵緩沖中的臟塊到磁盤
ON: 只對在鍵表時指定了 delay_key_write 選項的表使用延遲刷新
ALL: 對所有的 MyISAM 表都使用延遲建寫入
安全相關(guān)配置參數(shù)
expire_logs_days 指定自動清理 binlog 的天數(shù)
max_allowed_packet 控制 MySQL 可以連接的包大小,建議設(shè)置為 32M,如果使用了主從復(fù)制,參數(shù)應(yīng)該設(shè)置成一致的
skip_name_resolve 禁用 DNS 查找
sysdate_is_now 確保 sysdate() 返回確保性日期
read_only 禁止非 super 權(quán)限的用戶寫操作 注:建議在主從復(fù)制中的從庫開啟此功能。以確保不能修改從庫中的操作,只能從主庫同步過來
skip_slave_start 禁用 Salve 自動恢復(fù)(從庫中的設(shè)置使用)
sql_mode 設(shè)置 MySQL 所使用的 SQL 模式(謹(jǐn)慎操作,可能會造成 MySQL 無法執(zhí)行)
① strict_trans_tables 給定的數(shù)據(jù)如果不能插入到數(shù)據(jù)庫中,對事務(wù)引擎會終端操作,對非事務(wù)引擎是沒有影響的
② no_engine_subitiution 在 create table 中指定 engines 的時候,如果引擎不可用,不會使用默認(rèn)引擎建立表
③ no_zero_date 不能再表中插入 0 年 0 月 0 日的日期
④ no_zero_in_date 不接受一部分的為 0 的日期
⑤ noly_full_group_by
其他常用的配置參數(shù)
sync_binlog 控制 MySQL 如何向磁盤刷新 binlog
tmp_table_size 和 max_heap_table_size 控制內(nèi)存臨時表大小(不宜設(shè)置的太大,以避免內(nèi)存的溢出)
max_connections 控制允許的最大連接數(shù)(默認(rèn)為 100,有點小,根據(jù)自己的業(yè)務(wù)適當(dāng)?shù)恼{(diào)整大小)
什么影響了性能
數(shù)據(jù)庫設(shè)計對性能的影響
1、過分的反范式化為表建立太多的列
2、過分的范式化造成太多的表關(guān)聯(lián)(關(guān)聯(lián)的表盡可能的控制在 10 個之內(nèi))
3、在 OLTP 環(huán)境中使用不前擋的分區(qū)表
4、使用外鍵保證數(shù)據(jù)的完整性
感謝你能夠認(rèn)真閱讀完這篇文章,希望丸趣 TV 小編分享的“MySQL 的常見存儲引擎有哪些”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!