Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

17.8.2 将 InnoDB 配置为只读操作

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

为只读操作准备实例,请在将其存储到只读媒体之前,确保所有必要信息已经flush到数据文件中。使用 change buffering disabled(innodb_change_buffering=0)并执行慢关闭

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

启用 innodb_read_only 防止所有存储引擎的表创建和drop操作。这些操作修改了数据字典表在 mysql 系统数据库中,但是那些表使用 InnoDB 存储引擎且不能在启用 innodb_read_only 时被修改。同样,任何修改数据字典表的操作都受到限制,例如 ANALYZE TABLEALTER TABLE tbl_name ENGINE=engine_name

此外,MySQL 8.4中的mysql系统数据库中其他表使用InnoDB存储引擎。将这些表设置为只读状态会对修改它们的操作施加限制。例如,CREATE USERGRANTREVOKEINSTALL PLUGIN操作在只读模式下不可用。

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

  • 将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 写入线程和临时文件写入协调线程仍然活动,以便在只读模式下允许写入临时文件。缓冲池resize线程也保持活动状态,以启用在线缓冲池resize。

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

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

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

  • undo log 不被使用。禁用innodb_undo_tablespacesinnodb_undo_directory 配置选项的设置。