Mysql:read-only 配置
重点:
super_read_only、read_only:不会从master传递(复制)到slave
super_read_only=on隐含实现read_only=on
read_only=off隐含实现super_read_only=off
-
Property Value Command-Line Format --super-read-only[={OFF|ON}]System Variable super_read_onlyScope Global Dynamic Yes Type Boolean Default Value OFFIf the
read_onlysystem variable is enabled, the server permits client updates only from users who have theSUPERprivilege. If thesuper_read_onlysystem variable is also enabled, the server prohibits client updates even from users who haveSUPER. See the description of theread_onlysystem variable for a description of read-only mode and information about howread_onlyandsuper_read_onlyinteract.Client updates prevented when
super_read_onlyis enabled include operations that do not necessarily appear to be updates, such asCREATE FUNCTION(to install a UDF) andINSTALL PLUGIN. These operations are prohibited because they involve changes to tables in themysqlsystem database.Changes to
super_read_onlyon a master server are not replicated to slave servers. The value can be set on a slave server independent of the setting on the master.
-
Property Value Command-Line Format --read-only[={OFF|ON}]System Variable read_onlyScope Global Dynamic Yes Type Boolean Default Value OFFWhen the
read_onlysystem variable is enabled, the server permits no client updates except from users who have theSUPERprivilege. This variable is disabled by default.The server also supports a
super_read_onlysystem variable (disabled by default), which has these effects:-
If
super_read_onlyis enabled, the server prohibits client updates, even from users who have theSUPERprivilege. -
Setting
super_read_onlytoONimplicitly forcesread_onlytoON. -
Setting
read_onlytoOFFimplicitly forcessuper_read_onlytoOFF.
Even with
read_onlyenabled, the server permits these operations:-
Updates performed by slave threads, if the server is a replication slave. In replication setups, it can be useful to enable
read_onlyon slave servers to ensure that slaves accept updates only from the master server and not from clients. -
Use of
ANALYZE TABLEorOPTIMIZE TABLEstatements. The purpose of read-only mode is to prevent changes to table structure or contents. Analysis and optimization do not qualify as such changes. This means, for example, that consistency checks on read-only replication slaves can be performed with mysqlcheck --all-databases --analyze. -
Operations on
TEMPORARYtables. -
Inserts into the log tables (
mysql.general_logandmysql.slow_log); see Section 5.4.1, “Selecting General Query Log and Slow Query Log Output Destinations”. -
As of MySQL 5.7.16, updates to Performance Schema tables, such as
UPDATEorTRUNCATE TABLEoperations.
Changes to
read_onlyon a master server are not replicated to slave servers. The value can be set on a slave server independent of the setting on the master.The following conditions apply to attempts to enable
read_only(including implicit attempts resulting from enablingsuper_read_only):-
The attempt fails and an error occurs if you have any explicit locks (acquired with
LOCK TABLES) or have a pending transaction. -
The attempt blocks while other clients have any ongoing statement, active
LOCK TABLES WRITE, or ongoing commit, until the locks are released and the statements and transactions end. While the attempt to enableread_onlyis pending, requests by other clients for table locks or to begin transactions also block untilread_onlyhas been set. -
The attempt blocks if there are active transactions that hold metadata locks, until those transactions end.
-
read_onlycan be enabled while you hold a global read lock (acquired withFLUSH TABLES WITH READ LOCK) because that does not involve
-
-
Property Value Command-Line Format --transaction-read-only[={OFF|ON}]System Variable (>= 5.7.20) transaction_read_onlyScope (>= 5.7.20) Global, Session Dynamic (>= 5.7.20) Yes Type Boolean Default Value OFFThe transaction access mode. The value can be
OFF(read/write; the default) orON(read only).The transaction access mode has three scopes: global, session, and next transaction. This three-scope implementation leads to some nonstandard access-mode assignment semantics, as described later.
To set the global transaction access mode at startup, use the
--transaction-read-onlyserver option.At runtime, the access mode can be set directly using the
SETstatement to assign a value to thetransaction_read_onlysystem variable, or indirectly using theSET TRANSACTIONstatement. For example, use thisSETstatement to set the global value:SET GLOBAL transaction_read_only = ON;
Setting the global
transaction_read_onlyvalue sets the access mode for all subsequent sessions. Existing sessions are unaffected.To set the session or next-level
transaction_read_onlyvalue, use theSETstatement. For most session system variables, these statements are equivalent ways to set the value:SET @@SESSION.
var_name=value; SET SESSIONvar_name=value; SETvar_name=value; SET @@var_name=value;As mentioned previously, the transaction access mode has a next-transaction scope, in addition to the global and session scopes. To enable the next-transaction scope to be set,
SETsyntax for assigning session system variable values has nonstandard semantics fortransaction_read_only,-
To set the session access mode, use any of these syntaxes:
SET @@SESSION.transaction_read_only =
value; SET SESSION transaction_read_only =value; SET transaction_read_only =value;For each of those syntaxes, these semantics apply:
-
Sets the access mode for all subsequent transactions performed within the session.
-
Permitted within transactions, but does not affect the current ongoing transaction.
-
If executed between transactions, overrides any preceding statement that sets the next-transaction access mode.
-
Corresponds to
SET SESSION TRANSACTION {READ WRITE | READ ONLY}(with theSESSIONkeyword).
-
-
To set the next-transaction access mode, use this syntax:
SET @@transaction_read_only =
value;For that syntax, these semantics apply:
-
Sets the access mode only for the next single transaction performed within the session.
-
Subsequent transactions revert to the session access mode.
-
Not permitted within transactions.
-
Corresponds to
SET TRANSACTION {READ WRITE | READ ONLY}(without theSESSIONkeyword).
-
For more information about
SET TRANSACTIONand its relationship to thetransaction_read_onlysystem variable, see Section 13.3.6, “SET TRANSACTION Statement”.Notetransaction_read_onlywas added in MySQL 5.7.20 as an alias fortx_read_only, which is now deprecated and is removed in MySQL 8.0. Applications should be adjusted to usetransaction_read_onlyin preference totx_read_only. -
-
Property Value Deprecated 5.7.20 System Variable tx_read_onlyScope Global, Session Dynamic Yes Type Boolean Default Value OFFThe default transaction access mode. The value can be
OFF(read/write, the default) orON(read only).Notetransaction_read_onlywas added in MySQL 5.7.20 as an alias fortx_read_only, which is now deprecated and is removed in MySQL 8.0. Applications should be adjusted to usetransaction_read_onlyin preference totx_read_only. See the description oftransaction_read_onlyfor details.
浙公网安备 33010602011771号