1836: ER_READ_ONLY_MODE: Running in read-only mode (읽기 전용 모드로 실행 중)
MySQL의미
InnoDB가 읽기 전용 모드(innodb_read_only=ON)로 실행 중이거나 데이터 디렉터리/미디어가 읽기 전용이어서 InnoDB 테이블에 대한 쓰기와 DDL이 거부된다. 참고: read_only/super_read_only가 활성화된 상태에서 쓰기를 시도하면 이 코드가 아니라 1290(ER_OPTION_PREVENTS_STATEMENT)이 반환된다.
원인
서버가 innodb_read_only=ON으로 시작되었으며(예: 읽기 전용 미디어, 공유 데이터 디렉터리, 분석용 복사본), 이 모드에서는 InnoDB 테이블에 INSERT/UPDATE/DELETE, CREATE/DROP/ALTER TABLE 같은 변경을 할 수 없다.
해결 방법
쓰기가 필요하면 innodb_read_only 없이 서버를 시작한다: my.cnf에서 innodb_read_only=ON 줄을 제거하고 재시작한다(이 변수는 동적이 아니므로 재시작이 필요하다). 상태 확인: SELECT @@innodb_read_only; 데이터 디렉터리와 파일 시스템에 쓰기가 가능한지 확인한다. replica/HA secondary에 쓰는 경우(1290)라면 쓰기를 primary로 라우팅한다.
같은 데이터베이스의 다른 항목
- 1969MariaDB: Query execution was interrupted (max_statement_time exceeded)
- 1927MariaDB: ER_CONNECTION_KILLED: Connection was killed (연결이 종료됨)
- 1290ER_OPTION_PREVENTS_STATEMENT: running with the --read-only option (--read-only 옵션으로 실행 중)
- 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 컬럼을 키에 사용함)
- 1592ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log (binary log에 안전하지 않은 문장 기록)