您可以通过在服务器启动时
InnoDB
启用配置选项来查询 MySQL 数据目录位于只读介质上的表
。--innodb-read-only
如何启用
要为只读操作准备实例,请确保在将所有必要信息
存储到只读介质之前将其刷新到数据文件中。在禁用更改缓冲 ( innodb_change_buffering=0
) 的情况下运行服务器并缓慢关闭。
要为整个 MySQL 实例启用只读模式,请在服务器启动时指定以下配置选项:
如果实例位于 DVD 或 CD 等只读介质上,或者
/var
目录不是所有人都可写的: 和--pid-file=
path_on_writeable_media
--event-scheduler=disabled
使用场景
这种操作模式适用于以下情况:
在只读存储介质(如 DVD 或 CD)上分发 MySQL 应用程序或一组 MySQL 数据。
多个 MySQL 实例同时查询同一数据目录,通常在数据仓库配置中。您可以使用此技术来避免 重载 MySQL 实例可能出现的 瓶颈,或者您可以对各种实例使用不同的配置选项来针对特定类型的查询调整每个实例。
查询出于安全或数据完整性原因而处于只读状态的数据,例如存档的备份数据。
此功能主要用于分发和部署的灵活性,而不是基于只读方面的原始性能。有关调整只读查询性能的方法,请参阅 第 8.5.3 节,“优化 InnoDB 只读事务”,这不需要将整个服务器设置为只读。
这个怎么运作
当服务器通过该选项以只读模式运行时
--innodb-read-only
,某些InnoDB
功能和组件会减少或完全关闭:
没有更改缓冲,特别是没有来自更改缓冲区的合并。为只读操作准备实例时,要确保更改缓冲区为空,请禁用更改缓冲 (
innodb_change_buffering=0
) 并先进行缓慢关闭。因为重做日志不用于只读操作,所以您可以
innodb_log_file_size
在将实例设置为只读之前将其设置为尽可能小的大小 (1 MB)。除了 I/O 读取线程之外的所有后台线程都被关闭。因此,只读实例不会遇到任何死锁。
有关死锁、监视器输出等的信息不会写入临时文件。因此,
SHOW ENGINE INNODB STATUS
不会产生任何输出。如果 MySQL 服务器已启动
--innodb-read-only
但数据目录仍在可写媒体上,root 用户仍然可以执行DCL操作,例如GRANT
和REVOKE
。当服务器处于只读模式时,通常会更改写操作行为的配置选项设置更改无效。
未使用 撤消日志。
innodb_undo_tablespaces
禁用和innodb_undo_directory
配置选项 的任何设置 。