Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.8 InnoDB配置  /  14.8.2 为只读操作配置 InnoDB

14.8.2 为只读操作配置 InnoDB

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

如何启用

要为只读操作准备实例,请确保在将所有必要信息 存储到只读介质之前将其刷新到数据文件中。在禁用更改缓冲 ( innodb_change_buffering=0) 的情况下运行服务器并缓慢关闭

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

使用场景

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

笔记

此功能主要用于分发和部署的灵活性,而不是基于只读方面的原始性能。有关调整只读查询性能的方法,请参阅 第 8.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不会产生任何输出。

  • 如果 MySQL 服务器已启动 --innodb-read-only但数据目录仍在可写媒体上,root 用户仍然可以执行DCL操作,例如GRANTREVOKE

  • 当服务器处于只读模式时,通常会更改写操作行为的配置选项设置更改无效。

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

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