文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  将 InnoDB 配置为只读操作

17.8.2 将 InnoDB 配置为只读操作

通过在服务器启动时启用 --innodb-read-only 配置选项,您可以在 MySQL 数据目录位于只读介质上的情况下查询 InnoDB 表。

如何启用

要准备一个实例以进行只读操作,请确保在将信息存储在只读介质上之前,所有必要的信息都已 刷新 到数据文件。使用禁用变更缓冲 (innodb_change_buffering=0) 的方式运行服务器,并执行 缓慢关闭

要为整个 MySQL 实例启用只读模式,请在服务器启动时指定以下配置选项

启用 innodb_read_only 将阻止所有存储引擎的表创建和删除操作。这些操作会修改 mysql 系统数据库中的数据字典表,但这些表使用 InnoDB 存储引擎,并且当启用 innodb_read_only 时无法修改。同样的限制也适用于任何修改数据字典表的操作,例如 ANALYZE TABLEALTER TABLE tbl_name ENGINE=engine_name

此外,mysql 系统数据库中的其他表在 MySQL 8.4 中使用 InnoDB 存储引擎。使这些表变为只读会导致对修改它们的 operations 的限制。例如,CREATE USERGRANTREVOKEINSTALL PLUGIN 操作在只读模式下不允许。

使用场景

此操作模式适用于以下情况

  • 在只读存储介质(如 DVD 或 CD)上分发 MySQL 应用程序或一组 MySQL 数据。

  • 多个 MySQL 实例同时查询相同的数据目录,通常在数据仓库配置中。您可以使用此技术来避免在负载很重的 MySQL 实例中可能发生的 瓶颈,或者您可以为不同的实例使用不同的配置选项来针对特定类型的查询对每个实例进行调整。

  • 查询已出于安全或数据完整性原因置于只读状态的数据,例如已归档的备份数据。

注意

此功能主要用于分发和部署的灵活性,而不是基于只读方面的原始性能。请参阅 第 10.5.3 节,“优化 InnoDB 只读事务”,了解如何调整只读查询的性能,这些查询不需要使整个服务器变为只读。

工作原理

当服务器通过 --innodb-read-only 选项以只读模式运行时,某些 InnoDB 功能和组件将被缩减或完全关闭。

  • 不会进行任何 变更缓冲,尤其是不会从变更缓冲区合并。为了确保在将实例准备为只读操作时变更缓冲区为空,请先禁用变更缓冲区 (innodb_change_buffering=0) 并执行 缓慢关闭

  • 启动时没有 崩溃恢复 阶段。该实例必须在进入只读状态之前执行 缓慢关闭

  • 由于 重做日志 在只读操作中未使用,因此您可以在将实例设置为只读之前将 innodb_log_file_size 设置为尽可能小的尺寸(1 MB)。

  • 大多数后台线程都被关闭。I/O 读取线程、I/O 写入线程以及用于写入临时文件的页面刷新协调器线程仍然存在,这些线程在只读模式下是允许的。缓冲池调整大小线程也保持活动状态,以允许在线调整缓冲池大小。

  • 关于死锁、监控输出等信息不会写入临时文件。因此,SHOW ENGINE INNODB STATUS 不会产生任何输出。

  • 当服务器处于只读模式时,对配置选项设置的更改(通常会更改写入操作的行为)将不起作用。

  • 用于强制执行 隔离级别MVCC 处理被关闭。所有查询都读取记录的最新版本,因为更新和删除是不可能的。

  • 撤消日志 未使用。禁用 innodb_undo_tablespacesinnodb_undo_directory 配置选项的任何设置。