14.8.2 Configuring InnoDB for Read-Only Operation
You can query InnoDB tables where the MySQL data directory is on read-only media by enabling the --innodb-read-only configuration option at server startup.
How to Enable
To prepare an instance for read-only operation, make sure all the necessary information is to the data files before storing it on the read-only medium. Run the server with change buffering disabled (innodb_change_buffering=0) and do a .
To enable read-only mode for an entire MySQL instance, specify the following configuration options at server startup:
If the instance is on read-only media such as a DVD or CD, or the
/vardirectory is not writeable by all:--pid-file=andpath_on_writeable_media--event-scheduler=disabled-
--innodb-temp-data-file-path. This option specifies the path, file name, and file size forInnoDBtemporary tablespace data files. The default setting isibtmp1:12M:autoextend, which creates theibtmp1temporary tablespace data file in the data directory. To prepare an instance for read-only operation, setinnodb_temp_data_file_pathto a location outside of the data directory. The path must be relative to the data directory. For example:--innodb-temp-data-file-path=../../../tmp/ibtmp1:12M:autoextend
Usage Scenarios
This mode of operation is appropriate in situations such as:
Distributing a MySQL application, or a set of MySQL data, on a read-only storage medium such as a DVD or CD.
Multiple MySQL instances querying the same data directory simultaneously, typically in a data warehousing configuration. You might use this technique to avoid that can occur with a heavily loaded MySQL instance, or you might use different configuration options for the various instances to tune each one for particular kinds of queries.
Querying data that has been put into a read-only state for security or data integrity reasons, such as archived backup data.
This feature is mainly intended for flexibility in distribution and deployment, rather than raw performance based on the read-only aspect. See Section 8.5.3, “Optimizing InnoDB Read-Only Transactions” for ways to tune the performance of read-only queries, which do not require making the entire server read-only.
How It Works
When the server is run in read-only mode through the --innodb-read-only option, certain InnoDB features and components are reduced or turned off entirely:
No is done, in particular no merges from the change buffer. To make sure the change buffer is empty when you prepare the instance for read-only operation, disable change buffering (
innodb_change_buffering=0) and do a first.There is no phase at startup. The instance must have performed a before being put into the read-only state.
Because the is not used in read-only operation, you can set
innodb_log_file_sizeto the smallest size possible (1 MB) before making the instance read-only.Most background threads are turned off. I/O read threads remain, as well as I/O write threads and a page cleaner thread for writes to temporary files, which are permitted in read-only mode.
Information about deadlocks, monitor output, and so on is not written to temporary files. As a consequence,
SHOW ENGINE INNODB STATUSdoes not produce any output.If the MySQL server is started with
--innodb-read-onlybut the data directory is still on writeable media, the root user can still perform operations such asGRANTandREVOKE.Changes to configuration option settings that would normally change the behavior of write operations, have no effect when the server is in read-only mode.
The processing to enforce is turned off. All queries read the latest version of a record, because update and deletes are not possible.
The is not used. Disable any settings for the
innodb_undo_tablespacesandinnodb_undo_directoryconfiguration options.
© 2025 Oracle
Licensed under the GPLv2 License.