likes
comments
collection
share

InnoDB 的安装与使用(手把手教您创建您的第一个 InnoDB 表)

作者站长头像
站长
· 阅读数 22

本文正在参加「技术专题19期 漫谈数据库技术」活动

InnoDB 系统要求和支持的平台

InnoDB可以在可以安装MySQL的所有平台上使用。

其中包括:

InnoDB 的安装与使用(手把手教您创建您的第一个 InnoDB 表)

还有来自开源社区的MySQL自定义端口,用于在各种嵌入式平台和非标准操作系统上运行MySQL。

硬件方面,MySQL和相应的InnoDB将在各种硬件上运行,包括:

InnoDB 的安装与使用(手把手教您创建您的第一个 InnoDB 表)

请记住,在安装和配置 InnoDB 时,根据安装它的架构,它将具有某些可用和启用的选项,这些选项并非在所有平台上都可用。

除了底层硬件之外,操作系统还将确定某些配置选项是否可用以及某些变量可以设置的范围。在为数据库服务器选择操作系统时,要考虑的更重要的区别之一是操作系统和底层文件系统处理写入缓存和写入刷新到磁盘存储子系统的方式。

这些操作系统功能可能会导致 InnoDB 的性能发生巨大差异,通常达到并发能力的 10 倍。

使用 InnoDB 下载 MySQL

除非您对旧版本有特殊需求,否则MySQL应该直接从MySQL网站下载。某些操作系统维护最新的MySQL的版本在其包存储库中,而有些则没有,因此提供了过时的,可能不安全或不稳定的数据库应用程序版本。由于最终用户无法控制操作系统包存储库,因此无法升级存储库中的MySQL版本,因此专业建议通过以下方式安装任何用于生产用途的服务器MySQL 社区或企业的正式发布版本,来自 MySQL 公司网站。

最新的下载可以在 MySQL 下载 MySQL 社区服务器找到

从MySQL 3.23开始,InnoDB已包含在MySQL GA版本中,并且一直是事务引擎支持的主要选择。一个更明显的重大变化出现在MySQL 5.1的早期版本中,当时InnoDB引擎的发布与以前略有不同,它可作为可插拔存储引擎使用。这种新架构允许用户动态启用或禁用存储引擎,而不是编译支持不同的引擎,这使得MySQL对不同的用例非常灵活。因此,使用InnoDB的插件版本允许用户启用其他未启用的设置

在引擎的默认包含版本中可用。

从MySQL 5.5开始,InnoDB的默认版本也是插件的最新版本,它消除了直接从InnoBase安装和启用正式插件的必要性。在MySQL网站上,具体版本差异定义如下:

从MySQL 5.1.38开始,InnoDB插件包含在MySQL 5.1版本中,此外还有先前版本中包含的内置版本的InnoDB。MySQL 5.1.42 到 5.1.45 包含 InnoDB 插件 1.0.6,它被认为是候选版本(RC)质量。MySQL 5.1.46及更高版本包括InnoDB插件1.0.7或更高版本,这被认为是正式发布(GA)质量。

验证 InnoDB 支持和事务设置

在规划基准测试、测试、生产配置和相关时,了解服务器上可用的 InnoDB 版本至关重要。

根据文档,InnoDB多年来获得了许多变量来调整性能和稳定性。

使用InnoDB的第一步是确保它在MySQL服务器上启用并可用。

您可以通过从MySQL命令行运行以下SQL查询或通过其他手动查询执行方式(如MySQL Workbench或phpMyAdmin)来检查InnoDB是否已启用:

mysql> show engines\G

InnoDB 的安装与使用(手把手教您创建您的第一个 InnoDB 表)

在创建以 InnoDB 为引擎的任何表之前,请务必检查事务隔离级别的设置。可以通过执行以下查询来检查正在运行的数据库的当前设置:

SHOW GLOBAL VARIABLES LIKE 'tx_isolation';

InnoDB 的安装与使用(手把手教您创建您的第一个 InnoDB 表)

此全局配置变量有四个选项,并且设置

确定InnoDB处理事务数据执行和锁定的方法。如果当应用程序期望数据库具有 ACID 功能时,变量设置为非 ACID 设置之一,则可能导致死锁、幻像数据、不一致的引用数据,甚至数据丢失。

ACID 由以下属性定义:

  • Atomicity

    所有事务都失败,或者没有一个事务失败。基本上,如果事务由于硬件问题、连接问题等原因而失败 - 这些部分更改将不会提交。这是 100% 或 0% 的操作。

  • Consistency

    select 语句读取的数据都处于同一状态。因此,当您使用事务时,您将获得最新且一致的可用数据。这与多版本并发控制 (MVCC) 有关。

  • Isolation

    正在读取的任何内容都不会被另一个事务主动更改。在处理该数据时,您的连接或事务的读取不会被另一个事务更改。

  • Durability

    对数据库的更改会持续存在 - 基本上这意味着如果提交事务并且数据库失败或服务器崩溃,您的更改将在那里 - 这就是为什么InnoDB使用事务日志文件(数据在写入磁盘之前保留。引擎将在下次启动时读取日志,并将日志中未进行的任何剩余事务提交到基于磁盘的表中)。

以下选项可用于此设置:

  • READ UNCOMMITTED 读取未提交:

    每个 select 语句在没有锁的情况下运行,因此您不会获得一致性,并且可能会有 dirt 读取,这可能是 MVCC 定义的数据的早期版本。因此,此设置不符合 ACID 合规性标准,如果应用程序发出需要时间点一致数据读取的事务,则不应使用此设置。

  • READ COMMITTED 已提交读取:

    此设置提供一致的读取,无需表锁或行锁。即使在同一个事务中,每个一致读取也会设置和读取自己的时间点数据的新快照。无论如何,此设置不符合 ACID 合规性标准,但它为不需要完整 ACID 设置的应用程序提供了一致性和性能的折衷。

  • REPEATABLE READ 可重复读取:

    符合 ACID 标准的 InnoDB 默认隔离级别。同一事务中的所有读取将彼此一致 - 这定义了 ACID 中的 C。此外,所有写入都将是持久写入,所有事务都是原子的,所有读取都是隔离的。除非您有其他特定原因,否则这应该是事务隔离配置变量的默认设置。

  • SERIALIZABLE 可序列化:

    这与可重复读取相同,但是当启用自动提交时,MySQL会使用“锁定共享模式”的序言转换常规选择语句。如果禁用了自动提交,则每个选择语句都在单独的事务中启动,这将确保所有读取都是一致的。此设置还允许XA分布式事务支持,您可以在MySQL手册中阅读更多信息。SERIALIZABLE 值设置将影响数据库事务执行性能,因此请仅在绝对必要时启用此功能。

创建您的第一个 InnoDB 表

验证 InnoDB 支持后,您可以开始在表定义中使用引擎。可以按如下方式运行与InnoDB交互的简单测试,我们将创建一个表,其中明确指定了引擎以及InnoDB用于索引数据的主键。

如果您在表创建语句的末尾省略引擎定义,那么MySQL将使用系统默认引擎创建表,该引擎由启动变量定义:default-storage-engine或storage_engine,两者都实现相同的目的。

如果您计划将 InnoDB 专门用于表引擎定义,通常可以通过将其中一个或两个启动变量更改为 InnoDB 来确保显式和隐式创建表是有意义的。从MySQL版本5.5开始,默认值已更改为InnoDB,因此根据您的版本,您可能不需要显式定义变量。

InnoDB 的安装与使用(手把手教您创建您的第一个 InnoDB 表)

在前面的表 create 语句中,我们创建了一个包含三列的表。这些列描述如下:

  • 基于主键的 id 字段,每个插入的行的值都会自动增加

  • ·基于变量字符的数据字段,用于存储我们的值

  • ·用于记录插入日期的基于 Datet IME 的日期字段

除了边缘情况之外,这些列可以被视为关系数据的最低限度列。自动递增的id字段将允许InnoDB有效地索引我们的数据或快速查找,日期字段将使我们能够根据数据在表中创建的时间轻松排序和搜索数据。

这两列对于基于 InnoDB 的表特别重要,因为如果运行典型查询(如 SELECT COUNT(*) FROM test;),其他表引擎可以在没有主键列的情况下运行相对快速和高效的全表扫描。但是,InnoDB需要读取PRIMARY KEY列或其他INDEX,以使查询结果保持方便;

因此,我们的 ID 列提供了性能提升。我们现在可以编写 SELECT COUNT(ID) FROM TEST,而不是编写低效的后一个查询;InnoDB将访问id列PRIMARY KEY索引,与全表扫描相比,结果非常快。同样,我们可以通过日期列对表数据进行排序,并获得快速返回的表数据。如果您想更轻松地尝试InnoDB功能或查看不同版本的MySQL如何与InnoDB配合使用,则可以安装沙盒工具,例如MySQL Sandbox。