programing

이상한 MySQL "읽기 전용" 오류

instargram 2023. 9. 19. 20:46
반응형

이상한 MySQL "읽기 전용" 오류

한 MySQL 했습니다와 된 것으로 read-only웹. 데비안 7.9에서 MySQL을 사용하는 웹 애플리케이션이 실행되고 있습니다.애플리케이션 기반 웹 사이트에 액세스하려는 시도가 갑자기 빈 웹 페이지에 다음과 같은 오류 메시지를 표시하기 시작했습니다.

오류: 500 - SQLSTATE[HY000]:일반 오류: 1290 MySQL 서버가 --read-only 옵션으로 실행되고 있으므로 이 문을 실행할 수 없습니다.

조사의 일환으로 수행한 단계는 다음과 같습니다.

  • (를 . (MySQL 는)read-onlyflag);
  • 을 바탕으로 read-onlyMySQL 구성 플래그 입력합니다. 파일())my.cnf- 를 찾을 수 - 이 OFF .
  • 이 충분한지 했습니다()df -h): Filesystem Size Used Avail Use% Mounted on udev 10M 0 10M 0% /dev tmpfs 3.2G 1.4M 3.2G 1% /run /dev/disk/by-uuid/xxxxxxxxxxxxxxxxx 113G 14G 94G 13% / tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 7.3G 72K 7.3G 1% /run/shm

  • 뛰었다mysqlcheck --all-databases: 모든 테이블이 정상입니다.

  • 확인( free): total used free shared buffers cached Mem: 32898332 2090268 30808064 0 425436 970348 -/+ buffers/cache: 694484 32203848 Swap: 5105660 0 5105660
  • MySQL 를 들어 MySQL 의 "" ).ps ax | grep mysql 인 맥락을 할 수 은 해당 (DB ) 합니다.

    문제: 20307 ? S 0:00 /bin/sh /usr/bin/mysqld_safe 20635 ? Sl 0:37 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 20636 ? S 0:00 logger -t mysqld -p daemon.error 36427 pts/0 S+ 0:00 grep mysql

    문제 없음: 36948 pts/0 S 0:00 /bin/sh /usr/bin/mysqld_safe 37275 pts/0 Sl 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 37276 pts/0 S 0:00 logger -t mysqld -p daemon.error 38313 pts/0 S+ 0:00 grep mysql

업데이트:

저는 방금 문제를 다시 경험했고 후자를 전제로 글로벌 읽기 전용 플래그가 OFF로 설정되어 있는지 확인하기로 했습니다.제 가정은 다음과 같습니다.

mysql> SELECT @@global.read_only;
+--------------------+
| @@global.read_only |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

기본 OFF 값임에도 불구하고 시스템의 일부 프로세스에서 덮어쓰기 때문에 MySQL 구성 파일을 통해 읽기 전용 플래그를 명시적이고 영구적으로 OFF로 설정해야 할 것 같습니다.나중에 답변을 통해 결과를 보고합니다.

AWS Aurora의 경우 읽기 전용인 복제본 인스턴스에 액세스할있으므로 DB Cluster 끝점을 대신 사용해야 합니다.

데이터베이스가 읽기 전용으로 설정된 이유는 크게 두 가지입니다.

1) MySQL이 읽기 전용으로 설정되어 있습니다.

MySQL이 읽기 전용으로 전환되는 원인이 무엇인지 잘 모르겠습니다. 디스크 문제나 데이터베이스 손상 등이 있을 수 있습니까?어쨌든 로그에 뭔가가 나타날 것으로 예상되므로 MySQL(및 시스템) 로그를 확인합니다.

2) 클라이언트가 데이터베이스 읽기 전용을 설정하고 있습니다.

MySQL에 연결하는 클라이언트는 다음 명령을 사용하여 데이터베이스 읽기를 설정할 수 있습니다.

SET GLOBAL read_only = ON;

이 가 합니다.SUPER특권. 하는 웹 응용 등에는 이 하는 데 만 이 합니다.MySQL을 사용하는 웹 사이트, 응용 프로그램 등에는 이 권한이 필요하지 않습니다. 데이터베이스를 관리하는 데 사용하는 관리자 계정에 대해서만 이 권한을 유지합니다.

각 사용자가 가지고 있는 권한을 잠그면 해당 데이터베이스/테이블에서 필요한 작업만 수행할 수 있는 권한이 있습니다. 사용 가능한 응용 필요한 한예:한)다)을 설명하는 .SELECT, INSERT, DELETE, UPDATE).

제 대한 덕분에 한 감사를 드립니다과 제 가 에게(@Eborbob )을 했습니다.read-only에 깃발을 꽂다ON (1), 문제를 유발하고 웹사이트에 접근할 수 없게 되는 것으로 보입니다.문제를 해결하고 소프트웨어와 서버를 재시작할 때까지 이 문제를 지속적으로 해결하기 위해 MySQL 구성 파일을 업데이트하기로 결정했습니다.my.cnfDB 서버를 재시작합니다.

구성 파일에 관련 업데이트를 한 후(내 경우 추가)

read_only=0

플래그가 실제로 다음과 같이 설정되어 있는지 확인합니다.OFF (0):

# mysql
mysql> SELECT @@global.read_only;
+--------------------+
| @@global.read_only |
+--------------------+
|                  0 |
+--------------------+
1 row in set (0.00 sec)

마지막으로 MySQL 서버를 다시 시작해 보겠습니다(어떤 이유에서인지 MySQL 구성을 동적으로 다시 로드합니다)./etc/init.d/mysql reload)가 작동하지 않아 데이터베이스 서버를 명시적으로 다시 시작해야 했습니다.

service mysql stop
service mysql start

Voila! 이제 웹사이트에 접속할 수 있습니다.변경사항이 발생할 경우 답변을 업데이트합니다.

서버가 복구 모드로 설정되어 my.cnf에서 innodb_force_recovery를 찾은 후 주석을 제거하고 서버를 다시 시작한 후 업그레이드를 실행할 수 있습니다.

global read_only = off로 설정합니다. 나중에 읽기 전용 모드를 off로 설정합니다.

문제와 관련이 없지만 'mysql 읽기 전용' 오류와 관련이 있습니다.

mysql의 슬레이브 인스턴스에 무언가를 쓰려 하지 않는지 확인합니다.

방금 같은 오류가 발생하여 IP 주소가 아닌 mysql 서버의 호스트명으로 연결하여 수정하였습니다.왜 고쳤는지는 모르겠지만 고쳤습니다.저스트 FYI

에보밥 말로는 아마 고객일 겁니다

백업 도구를 확인했습니까?

프록시 SQL이나 maxscale 같은 SQL 프록시를 사용하십니까?예를 들어 Mascale은 다음과 같은 모니터링을 통해서만 읽기를 시행할 수 있습니다. https://jira.mariadb.org/browse/MXS-1859

Replication Manager는 읽기 전용 플래그를 변경할 수도 있습니다.

다음 오류: - MySQL 서버가 --read-only 옵션으로 실행되고 있으므로 이 문을 실행할 수 없습니다.

sql db에 대한 쓰기 권한이 없는 사용자가 일부 데이터를 db에 삽입/업데이트하려고 할 때 발생합니다.

현재 --읽기 전용 권한을 가지고 있으므로 쓰기와 관련된 쿼리를 실행할 수 없다는 것을 의미하므로 상당히 유효한 보안 오류입니다.

이 오류를 해결하려면: - DBA로부터 쓰기 권한을 가져옵니다.

예.

GRANT ALL PRIVILEGES ON database.table TO 'user'@'localhost';

위 쿼리는 사용자 이름이 'user'인 사용자에게 모든 권한을 부여합니다.

아래 문장 실행은 나에게 mysql > SET GLOBAL read_only = OFF;

mysql cmd

오로라 클러스터를 운영하고 있는데 이상하게도 문제가 된 것은 파라메터 그룹을 다음과 같이 업데이트했기 때문입니다.long_query_time = 0읽기 전용 클러스터의 경우.때를 때.long_query_time = 1고정됐어요.

이것은 나에게 효과가 있었고 당신은 그것을 시도해 볼 수 있습니다.

.sql 파일 백업(쿼리 변경)

Engine=InnoDB다로 Engine=MyISAM

실행을 다시 시도합니다.

언급URL : https://stackoverflow.com/questions/35445190/strange-mysql-read-only-error

반응형