[server] MySQL 서비스를 다시 시작하지 않고 my.cnf를 다시로드하십시오.

복제 마스터 역할을하도록 MySQL 서버를 구성해야합니다.

바이너리 로그를 활성화하기 위해 my.cnf를 수정했지만 이제 구성을 다시로드하려면로 ​​서비스를 다시로드해야합니다 /etc/init.d/mysqld restart. 문제는 서버가 초당 여러 개의 쿼리를 수신하고 그 동안 도달 할 수있는 모든 데이터를 잃고 싶지 않다는 것입니다.

서비스를 다시 시작하지 않고 구성 파일 my.cnf를 다시로드하는 방법이 있습니까?



답변

MySQL 전용 :
my.cnf의 옵션은 시스템 변수 입니다. 이 변수는 동적이거나 런타임에 변경 될 수 있습니다. 동적 인 것은 런타임에 SET 변수 구문을 사용하여 변경할 수 있습니다. 로 변수를 볼 수 있습니다 SHOW VARIABLES;. 그러나 manual의이 링크에 따르면 이진 로그 옵션은 동적이 아닙니다. 다시 시작해야 할 것 같습니다. 그러나 mysql을 아는 사람이 나보다 조금 더 나은 것을 기다리는 것이 좋습니다.

일반적인 데몬 :
Linux에서 /etc/init.d/는 데몬 (서비스)을 시작 및 중지하는 스크립트를 보유합니다. 이것들은 스크립트이기 때문에 텍스트 편집기로 볼 수 있습니다. 이러한 스크립트 중 다수는 다시로드 인수를 사용합니다. mysql 스크립트를 보면 인수로 다시로드하면 mysqladmin 명령이 사용됩니다. 따라서 재로드중인 mysqladmin 매뉴얼은 다음과 같이 말합니다.

새로 고침

Reload the grant tables.

일반적으로, 이것은 구성 변경이 아니라 특권의 변경을위한 것입니다 (동일한 flush 특권 명령일까요?).


답변

나는 이것에 대한 해결책을 찾고 있었지만 내가 찾은 제한된 도움으로 만족하지 못했습니다. 한 녀석은 kill-HUP ..를 제공하지 않았다.

내가 한 것은 아파치 인스턴스를 일시 중지 한 다음 나중에 계속하는 것입니다. 초당 평균 25 건의 활성 요청이있는 서버에서 매력처럼 작동했습니다.

sudo로 (명확하게) pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

물론 아파치 프로세스 이름 및 / 또는 mysql 재시작 스크립트는 내 것과 다를 수 있지만 아이디어는 맞습니다!


답변