MySQL 슬레이브에 비 복제 쓰기를 방지 하시겠습니까?


13

성능을 위해 일부 MySQL 데이터베이스 서버가 행 기반 복제로 설정되어 있습니다. 소프트웨어가 마스터에 기록하고 마스터 또는 슬레이브에서 읽습니다. 모든 것이 잘 작동합니다.

MySQL이 MySQL 슬레이브임을 알고 있지만 MySQL이 슬레이브에 쓰기를 허용한다는 것을 이해합니다. 이상적으로, 나는 이것을 닫고 싶습니다. 누군가 누군가가 읽기 연결을 얻는 나쁜 코드를 작성하고을 수행하더라도 UPDATE슬레이브에 데이터를 넣는 대신 오류가 발생합니다.

MySQL에서 이것을 수행하는 방법이 있습니까? 분명히 우리는 소프트웨어에서도 이것을 불가능하게 만들고 싶지만 서버의 방화벽처럼 최대한 방어력을 갖고 싶습니다.

감사!

답변:


13

read-onlymy.cnf 에서 옵션을 활성화하십시오 . --read-onlymysqld를 사용하여 명령 행에서 플래그로 지정할 수도 있습니다 .


5
읽기 전용을 따르지 않으므로 수퍼 유저 (예 : MySQL의 루트 사용자)에게는 작동하지 않습니다.
vmfarms

5

설정의 대안으로 read_only=1(예 : 슬레이브 인스턴스에 다른 스크래치 패드 /보고 / 개발 데이터베이스가있는 경우), 때로는 모든 사용자의 SELECT 이외의 모든 권한을 복제중인 DB로 제거합니다.

즉, 마스터 에서 GRANT 명령을 실행 한 후 슬레이브 에서 REVOKE 명령을 실행합니다 .


2

현재 MySQL은 5.7.8 , 편지가 super_read_only클라이언트 업데이트를 수행하는 경우에도 SUPER 사용자를 방지 옵션. 복제 프로세스를 방해하지 않습니다. 다른 설정과 마찬가지로 다음과 같이 설정할 수 있습니다.

  • 명령 줄 형식 ( --super_read_only=ON)으로
  • my.cnf ( super_read_only=1) 의 변수 또는
  • 클라이언트 프롬프트 ( SET GLOBAL super_read_only = 1;)에서

참고 :

  • super_read_only암시 적으로 활성화 하면read_only
  • 비활성화 read_only암시 적으로 비활성화를super_read_only

몇 가지주의 사항 :

  • 어느 쪽 read_onlysuper_read_only임시 테이블에 대한 작업을 방지하지 않습니다.
  • ANALYZE TABLE 및 OPTIMIZE TABLE과 같은 메타 데이터 조작을 막지 않습니다.
  • super_read_only활성화 된 특정 쿼리에 대한 버그 가보고되었습니다.

참조 : https://www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/


1

첫 번째 게시물이 다소 제안했듯이 권한으로 게시합니다. 수퍼 유저에게는 읽기 전용 옵션이 FYI로 작동하지 않으며 쓰기를 방지하려는 슬레이브에 대해서는 실제로 실행 가능한 솔루션이 아닙니다. 사용자 / 데이터베이스 / 테이블 권한으로 쓰기를 방지해야합니다. 우선 복제 사용자는 마스터와 동기화되도록 슬레이브에 계속 쓸 수 있어야합니다. 쓰기를 제어하는 ​​더 좋은 방법은 문제가있는 사용자에 대해 쓰기 (삽입, 작성 등)를 허용하는 옵션을 취소하여 슬레이브에서만 읽기를 수행하는 것입니다.


0

슬레이브의 사용자에게만 복제 관련 권한을 부여하십시오. 여전히 루트 사용자 권한 문제가 있지만 DB 서버에 대한 원격 루트 액세스를 제거 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.