14.4.2 Configuring InnoDB for Read-Only Operation 配置InnoDB 永于只读操作: 你可以查询InnoDB 表 MySQL 数据目录是在只读介质里,通过启用--innodb-read-only 配置选项在服务器启 动时: 如何启动: 准备一个实例用于只读操作,确保所有需要的信息是被刷新到数据文件 在存储到只读介质之前。 运行server 关闭change buffering (innodb_change_buffering=0) 做一个slow shutdown 启用read-only 模式对于整个MySQL实例, 指定下面的选项在server启动的时候: --innodb-read-only=1 如果 实例是在只读的介质 比如DVD or CD, 或者/var目录是不可写的, --pid-file=path_on_writeable_media and --event-scheduler=disabled 使用场景: 这种操作模式的适用情况如下: 分配一个MySQL 应用,或者 一个MySQL数据集,在一个只读的存储介质 比如DVD或者CD 多个MySQL 实例 查询相同的数据目录,典型在数据仓库配置。 你可能使用这个技术来避免瓶颈 ,发生严重负载的MySQL 实例, 或者你可以使用不同的配置选项对于多个实例来调整每个特定的查询类型 查询数据 已经被放入到一个只读状态用于安全或者数据完整性,比如归档备份数据: 它是如何工作的: 1.当server 运行在read-only 模式通过--innodb-read-only 选项, 某些InnoDB 功能和组件被减少了或者完全关闭了 2.不会改变缓存区,特别是从change buffer 没有合并。 为了确保 change buffer 是空的,当你准备 实例只读选项时, 关闭change buffering(innodb_change_buffering=0) 3. 没有崩溃恢复阶段, 实例必须进行一个slow shutdown 在设置为read-only 模式 4.因为redo log 不是用于 只读操作,你可以设置innodb_log_file_size 很小的值(1MB) 5.所有的后台线程除了I/O read 线程都被关闭,作为一个结果,只读实例不会遇到任何死锁 6.关于死锁,监控输出, 不会写入到临时文件,作为一个结果,SHOW ENGINE INNODB STATUS 不产生任何输出 7. 如果 MySQL 启动时带--innodb-read-only 但是数据仍旧是在可写的介质, root user 可以仍旧执行DCL 操作 比如GRANT和REVOKE 8. 改变设置选项设置通常会改变写操作的行为, 当server 是在read-only模式下是没有影响的 9.MVCC 处理强制隔离级别被关闭,所有的请求读取一条记录最新的版本,因为update和delete 是不允许的