Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Configuring InnoDB for Read-Only Operation

17.8.2 配置 InnoDB 以进行只读操作

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

如何启用

要准备实例以进行只读操作,请确保所有必要信息在将其存储在只读介质上之前被 flush 到数据文件中。使用禁用更改缓冲 (innodb_change_buffering=0) 运行服务器,并执行 慢关闭

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

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

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

使用场景

这种操作模式适用于以下情况:

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

  • 多个 MySQL 实例同时查询同一个数据目录,通常是在数据仓库配置中。您可能使用这种技术来避免 瓶颈,这些瓶颈可能会出现在高度加载的 MySQL 实例中,或者您可能使用不同的配置选项来调整每个实例以适应特定的查询类型。

  • 查询已经被置于只读状态以确保安全或数据完整性的数据,例如存档备份数据。

Note

该功能主要是为了在分发和部署方面提供灵活性,而不是基于只读方面的原始性能。请参阅 第 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配置选项的设置。