1290: ER_OPTION_PREVENTS_STATEMENT: running with the --read-only option(以 --read-only 选项运行)
MySQL含义
MySQL 服务器以 --read-only 或 --super-read-only 选项运行,因此拒绝了修改数据的语句(INSERT/UPDATE/DELETE/DDL)。在 read_only 下,具有 CONNECTION_ADMIN/SUPER 权限的用户仍可写入;启用 super_read_only 后他们也无法写入,消息显示为 '--super-read-only option'。
原因
read_only=ON 或 super_read_only=ON;最常见的是误向副本写入。为保证数据一致性,副本和 Group Replication 的从节点保持只读;故障转移自动化会将旧主库置于 super_read_only。在故障转移/switchover 期间写入错误节点也会触发。
解决方法
将写入路由到主库(source)。如果此服务器确实应成为新主库:SET GLOBAL read_only = OFF;(关闭 read_only 会自动同时关闭 super_read_only;开启 super_read_only 也会同时开启 read_only)。不要在由 HA 工具(Orchestrator/Group Replication/InnoDB Cluster)管理的节点上手动修改。检查状态:SELECT @@read_only, @@super_read_only;
同一数据库的其他条目
- 1153Got a packet bigger than 'max_allowed_packet' bytes(收到的数据包大于 'max_allowed_packet' 字节)
- 1969MariaDB: Query execution was interrupted (max_statement_time exceeded)(MariaDB:查询执行被中断(超出 max_statement_time))
- 1927MariaDB: ER_CONNECTION_KILLED: Connection was killed(连接已被终止)
- 1836ER_READ_ONLY_MODE: Running in read-only mode(以只读模式运行)
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated(违反 CHECK 约束)
- 1118ER_TOO_BIG_ROWSIZE: Row size too large(行大小过大)
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length(在键定义中使用 BLOB/TEXT 列但未指定键长度)