网络攻防实战研究:MySQL数据库安全
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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,可以执行如下语句。

选中查询结果,执行批量处理命令,即可完成修改。