- 網絡攻防實戰研究:MySQL數據庫安全
- 祝烈煌
- 2196字
- 2020-10-30 15:11:15
1.5 批量修改MySQL數據庫引擎
數據庫引擎是用于存儲、處理和保護數據的核心服務。利用數據庫引擎可以控制訪問權限并快速處理事務,從而滿足企業內大多數需要處理大量數據的應用程序的要求。
1.5.1 MySQL數據庫引擎簡介
MySQL中的數據是通過不同的技術存儲在文件(或者內存)中的。這些技術中的每一種,都使用了不同的存儲機制、索引技巧、鎖定水平,并且最終提供了廣泛的、不同的功能和能力。通過不同的技術,用戶可以獲得額外的速度或功能。
常用的存儲引擎有MyISAM、MRG_MyISAM、Memory、Blackhole、CSV、Performance_Schema、Archive、Federated和InnoDB。在Windows中安裝的MySQL通常支持Archive、Blackhole、InnoDB、Memory、MRG_MyISAM和MyISAM六種存儲引擎,如圖1-37所示。

圖1-37 MySQL支持的六種存儲引擎
在Linux中,MySQL數據庫使用何種引擎取決于安裝和編譯MySQL時的設置。在默認情況下,MySQL支持在Liuux 中使用ISAM、MyISAM和HEAP三種引擎,InnoDB和Berkley(BDB)引擎也可以使用。
1.ISAM
ISAM是一個定義明確且經過時間考驗的數據表格管理方法。ISAM在設計時就考慮到數據庫被查詢的次數遠大于更新的次數,因此執行讀取操作的速度很快,且不會占用大量的內存和存儲資源。ISAM的兩個主要不足之處在于,它不支持事務處理,也不能夠容錯——如果硬盤損壞了,數據文件就無法恢復了。如果把ISAM用在執行關鍵任務的應用程序里,就必須經常備份所有的實時數據(根據復制特性,MySQL能夠支持這樣的備份程序)。
2.MyISAM
MyISAM是MySQL的ISAM擴展格式和默認的數據庫引擎,是最常用的數據庫引擎之一。除了提供ISAM不具備的索引和字段管理等功能,MyISAM還使用一種表格鎖定機制來優化多個并發的讀寫操作(其代價是需要經常運行OPTIMIZE TABLE命令,以恢復被更新機制“浪費”的空間)。
MyISAM強調快速讀取操作,因此常用在Web開發和Web應用中。MyISAM格式的一個重要缺陷是表損壞后無法恢復數據。
3.HEAP
HEAP允許只駐留在內存里的臨時表格存在。駐留在內存里讓HEAP比ISAM和MyISAM的運行速度都快。但是,HEAP 管理的數據是不穩定的,且如果在關機之前沒有進行保存,那么所有的數據都會丟失。
4.InnoDB
InnoDB的運行速度要比ISAM和MyISAM慢很多。但是,InnoDB支持事務處理和外來鍵,這兩個特性是ISAM和MyISAM不具備的。
InnoDB不支持FULLTEXT類型的索引,不保存表的具體行數。在刪除表時,InnoDB不會重新建立表,而是逐行刪除。InnoDB的索引和數據是緊密捆綁的,導出時數據文件較大。在導出數據庫時,必須全部導出為sql文件,不能直接復制文件。
InnoDB適用于對可靠性要求比較高及對事務和表的更新和查詢比較頻繁的場景。
5.Archive
“Archive”的意思是“歸檔”。Archive僅支持插入和查詢兩種功能,在MySQL 5.5以后添加了索引功能。Archive 具有很好的壓縮機制,使用 zlib 壓縮庫,在記錄請求時實時進行壓縮。Archive經常作為數據倉庫使用,適合存儲大量的、獨立的、作為歷史記錄的數據,具有很高的插入速度,但對查詢的支持較差。
6.Memory
盡管Memory存儲引擎采用的邏輯介質是內存,響應速度很快,但是當mysqld守護進程崩潰時,數據將會丟失。另外,Memory存儲引擎要求存儲的數據的長度不變,例如BLOB和TEXT類型的數據就是不可用的(長度不固定)。
使用Memory存儲引擎的場景如下。
· 目標數據比較小且需要頻繁訪問。在內存中存放數據,如果數據太大,會造成內存溢出。可以通過max_heap_table_size參數控制Memory表的大小。
· 如果數據是臨時的且必須隨時可用,就可以放在內存中。
· 即使存儲在Memory表中的數據突然丟失,也不會造成很大的影響。
7.Blackhole
由于 Blackhole 存儲引擎會丟棄所有插入的數據,而服務器會記錄 Blackhole 表的日志,所以Blackhole 可用于將數據復制到備份數據庫中。一些資料中提到:Blackhole 可以充當虛擬主模塊(Dummy Master),以減輕主模塊(Master)的負載;對主模塊來說,虛擬主模塊不僅是一個從動的角色,還可以充當日志服務器等。
8.CSV
可以將csv文件作為MySQL中的表使用(但不支持索引)。CSV引擎表中的所有字段都不能為空,創建的表有兩個,一個是csv文件,另一個是csm文件。
9.Performance_Schema
MySQL 5.5新增了一個存儲引擎——Performance_Schema,它主要用于收集數據庫服務器的性能參數。MySQL用戶不能創建用于存儲該類型數據的表。
Performance_Schema 能夠提供進程等待的詳細信息,包括鎖、互斥變量、文件信息;保存歷史事件的匯總信息,以及 MySQL 服務器的性能;增加和刪除監控時間點的操作都非常容易,并可以隨意改變MySQL服務器的監控周期。
10.Federated
Federated 存儲引擎是一個用于訪問 MySQL 服務器的代理。盡管該引擎看起來提供了很好的跨服務器的靈活性,但經常會帶來問題,因此默認是禁用的。
1.5.2 相關命令
1.查看數據庫引擎
可以使用“show engines;”命令查看當前數據庫對各種引擎的支持情況。如圖1-38所示,Windows僅支持六種引擎。

圖1-38 查看數據庫支持的引擎
2.更改數據庫引擎
(1)修改配置文件my.ini
將my-small.ini另存為my.ini。
· 如果是在Windows中,則直接搜索“default-storage-engine”,將其值改為

· 如果是在Linux中,則在my.ini文件中的“[mysqld]”后面添加以下內容。

重啟服務,將數據庫的默認引擎改為InnoDB。如果想將默認引擎設置為MyISAM,則應將數據庫的默認引擎改為“MyISAM”。
(2)在創建表時指定引擎為MyISAM

(3)在創建表后更改引擎

在Windows中,還可以選中需要修改的表,在表的“選項”中選擇相應的數據庫引擎,從而完成修改。
如果表中有數據,則可能無法進行修改。此外,需要注意表中是否有索引等。
3.查看引擎修改情況
執行如下命令,查看引擎的修改情況。

1.5.3 批量修改
前置條件:通過備份或導出的方法,將數據庫中的數據導出為sql文件;數據庫使用InnoDB引擎,數據庫文件很難復制,因此需要批量修改InnoDB引擎為MyISAM引擎。
1.批量查詢
執行如下命令,將顯示引擎為MyISAM的所有表名,如圖1-39所示。


圖1-39 查詢當前表中的引擎
2.批量生成修改引擎
執行批量生成修改引擎命令,將引擎由MyISAM修改為InnoDB,命令如下,執行結果如圖1-40所示。


圖1-40 獲取批量修改引擎腳本語句
如果要將引擎由InnoDB修改為MyISAM,可以執行如下語句。

選中查詢結果,執行批量處理命令,即可完成修改。
- 數據恢復方法及案例分析
- 信息安全導論(在線實驗+在線自測)
- INSTANT Netcat Starter
- 工業互聯網安全
- 特種木馬防御與檢測技術研究
- 信息系統安全檢測與風險評估
- 黑客攻防與無線安全從新手到高手(超值版)
- API攻防:Web API安全指南
- 網絡安全三十六計:人人該懂的防黑客技巧
- 零信任網絡:在不可信網絡中構建安全系統(第2版)
- 硬黑客:智能硬件生死之戰
- Computer Forensics with FTK
- 網絡安全技術與實訓(第4版)(微課版)
- 局域網交換機安全
- Advanced Penetration Testing for Highly:Secured Environments(Second Edition)