当TIDB作为mysql从库时如何配置为只读模式

tidb_restricted_read_only 从 v5.2.0 版本开始引入

  • 作用域:GLOBAL
  • 是否持久化到集群:是
  • 默认值: OFF
  • 可选值: OFFON
  • 该变量可以控制整个集群的只读状态。开启后(即该值为 ON ),整个集群中的 TiDB 服务器都将进入只读状态,只有 SELECTUSESHOW 等不会修改数据的语句才能被执行,其他如 INSERTUPDATE 等语句会被拒绝执行。
  • 该变量开启只读模式只保证整个集群最终进入只读模式,当变量修改状态还没被同步到其他 TiDB 服务器时,尚未同步的 TiDB 仍然停留在非只读模式。
  • 在变量开启时,正在执行的 SQL 语句不会受影响,只对新执行的 SQL 语句进行是否只读的检查。
  • 在变量开启时,对于尚未提交的事务:
    • 如果有尚未提交的只读事务,可正常提交该事务。
    • 如果尚未提交的事务为非只读事务,在事务内执行写入的 SQL 语句会被拒绝。
    • 如果尚未提交的事务已经有数据改动,其提交也会被拒绝。
  • 当集群开启只读模式后,所有用户(包括 SUPER 用户)都无法执行可能写入数据的 SQL 语句,除非该用户被显式地授予了 RESTRICTED_REPLICA_WRITER_ADMIN 权限。
  • 拥有 RESTRICTED_VARIABLES_ADMINSUPER 权限的用户可以修改该变量。如果用户开启了安全增强模式 (Security Enhanced Mode),则只有 RESTRICTED_VARIABLES_ADMIN 权限的用户才能修改该变量。