MySQL 配置InnoDB为只读操作

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

如何启用只读
要为只读操作准备实例,请确保在将数据文件存储到只读介质之前将所有必要的信息刷新到数据文件。以禁用改变缓冲区的方式运行MySQL(innodb_change_buffering=0)服务器,并缓慢关闭。

要为整个MySQL实例启用只读模式,请在服务器启动时指定以下配置选项
.–innodb-read-only=1

.如果实例位于只读介质(如DVD或CD)上,或者/var目录不是所有人都可写的:
–pid-file=path_on_writeable_media和–event-scheduler=disabled

.–innodb_temp_data_file_path。该选项指定InnoDB临时表空间数据文件的路径、文件名和文件大小。默认设置为ibtmp1:12M;autoextend,在数据目录下创建ibtmp1临时表空间数据文件。为只读操作准备一个实例,需要将innodb_temp_data_file_path设置为数据目录之外的位置。该路径必须相对于数据目录;例如:
–innodb_temp_data_file_path=../../../tmp/ibtmp1:12M:autoextend

使用场景
这种操作方式适用于以下情况:
.分发一个MySQL应用程序或一组MySQL数据到只读存储介质上,如DVD或CD。

.通常在数据仓库配置中,多个MySQL实例同时查询相同的数据目录。您可以使用这种技术来避免重载MySQL实例可能出现的瓶颈,或者您可以为不同的实例使用不同的配置选项来针对特定类型的查询调优每个实例。

.查询由于安全或数据完整性原因而处于只读状态的数据,如已归档的备份数据。

注意:这个特性主要是为了实现分发和部署中的灵活性,而不是基于只读方面的原始性能。

工作原理
当服务器通过–innodb-read-only选项以只读模式运行时,某些InnoDB特性和组件会减少或完全关闭:
.没有进行更改缓冲,特别是没有从更改缓冲区进行合并。当你准备实例进行只读操作时,为了确保更改缓冲区是空的,禁用更改缓冲区(innodb_change_buffering=0),并先做一个缓慢的关闭。

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

.因为重做日志不用于只读操作,所以在使实例只读之前,可以将innodb_log_file_size设置为最小的大小(1MB)。

.除I/O读线程外的所有后台线程都被关闭。因此,只读实例不会遇到任何死锁。

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

.如果MySQL服务器以–innodb-read-only启动,但数据目录仍然在可写介质上,root用户仍然可以执行DCL操作,如GRANT和REVOKE。

.对配置选项设置的更改通常会改变写操作的行为,但在服务器处于只读模式时没有影响。

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

.未使用undo日志。禁用innodb_undo_tablespaces和innodb_undo_directory配置选项的任何设置。

发表评论

电子邮件地址不会被公开。