14.6.2 Configuring InnoDB for Read-Only Operation 

配置InnoDB只读操作 


你可以查询InnoDB 表MySQL 数据目录是一个只读介质,通过启用 --innodb-read-only 配置选项在服务启动前


mysql> show variables like '%innodb-read-only%';
Empty set (0.00 sec)

mysql> show variables like '%innodb_read_only%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| innodb_read_only | OFF   |
+------------------+-------+
1 row in set (0.00 sec)

如何启用:

为了准备一个实例用于只读操作,确保所有的需要的信息是刷新到数据文件在存储到只读介质上,


让整个MySQL 实例启用只读模式, 指定下面的培训选项在启动时:

--innodb-read-only=1


如果实例是在只读介质上的比如DVD或者CD,或者 /var目录根本不可写, --pid-file= 在可写设备上


Usage Scenarios

这个操作的模式是使用这些情况比如:

1. 分配一个MySQL 应用,或者MySQL数据集,在一个只读介质 比如DVD或者CD

2.多个MySQL 实例同时查询相同的数据目录,典型的在一个数据仓库配置。

你可能使用这个技术来避免瓶颈 当一个负载沉重的MySQL实例,

或者你可能使用不同的配置选项 对于各个实例来调整特定的查询


3.查询数据已经放放入到一个只读状态 对于安全或者数据的完整性的原因,比如归档的数据备份

它是如何工作的:

当服务器是运行在只读模式通过 --innodb-read-only选项, 某些InnoDB 功能和组件是被关闭或者完全关闭的


1,没有 change buffering,特别是没有合并从change buffer.

2. 没有crash recovery 节点在启动时, 实例必须执行一个缓慢的关闭在进入只读模式前

3.因为redo log 在只读操作是不使用的,你可以设置innodb_log_file_size 到最小值

4.除了I/O thread 线程外所有的后台进程都会被关闭,作为一个结果,只能实例不会遇到任何死锁

5.信息关于死锁,监控输出,不写到临时文件,作为一个结果, SHOW ENGINE INNODB STATUS 不产生任何输出


6.MVCC 处理是强制隔离级别被关闭。所有的查询读取最新的记录的版本,因为Update和delete 是不允许的