mysql을 종료하는 가장 매끄러운 방법은 단순히 실행하는 것입니다.
mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown
이유는 다음과 같습니다.
mysql 서비스 파일 ( /etc/init.d/mysql
)은 소켓 파일의 존재에 의존합니다. 역사적으로 MySQL 4.0으로 돌아가서 소켓 파일이 때때로 사라지는 경우가 있습니다. 이로 인해 표준 service mysql stop
이 작동하지 못하게됩니다.
말하기에 충분하지 않습니다
mysqladmin -uroot -p -h127.0.0.1 shutdown
mysqld를 라우팅 할 것이다 때문에오고있는 사용자로 root@127.0.0.1
에 root@localhost
TCP / IP를 명시 적으로 사용할 수없는 경우. 기본적으로 mysqld는 최소 저항 경로를 선택 하고 소켓 파일 root@127.0.0.1
을 root@localhost
통해 연결 합니다. 그러나 소켓 파일이 없으면 root@localhost
연결되지 않습니다.
mysqladmin 의 MySQL 문서 조차도 다음과 같이 말합니다.
Unix 소켓 파일을 사용하여 로컬 서버에 연결할 때 mysqladmin shutdown을 실행하면 mysqladmin은 서버의 프로세스 ID 파일이 제거 될 때까지 대기하여 서버가 올바르게 중지되었는지 확인합니다.
따라서 TCP / IP를 활성화해야합니다.
mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown
돌아 가기 2011년 9월 30일에, 나는 내 자신의 버전 스크립트 mysqld_multi
호출을 mysqlservice
(내 게시물을 참조 동일한 호스트에 여러 인스턴스를 실행 ). 다른 포트에서 mysqld에 연결하기위한 가상 엔진 역할을합니다. 당신 my.cnf
은 사용자 정의 매개 변수로 자신을 가져와야합니다 . 이 스크립트에서 다음과 같이 종료를 발행합니다.
stop() {
${ECHO} -n $"Stopping ${PROGNAME}"
${MYSQLD_STOP}
ATTEMPTS=0
STOPPING_MYSQLD=1
MINUTES_TO_TRY=10
(( TICKS_TO_TRY = MINUTES_TO_TRY*240 ))
while [ ${STOPPING_MYSQLD} -eq 1 ]
do
${ECHO} -n "."
${SLEEP} 0.25
MYSQLD_HAS_BEEN_SHUTDOWN=`${TAIL} ${MYSQL_ERROR_LOG} | ${GREP} -c "Shutdown complete$"`
(( ATTEMPTS++ ))
if [ ${ATTEMPTS} -eq ${TICKS_TO_TRY} ] ; then STOPPING_MYSQLD=0 ; fi
if [ ${MYSQLD_HAS_BEEN_SHUTDOWN} -eq 1 ] ; then STOPPING_MYSQLD=2 ; fi
done
${ECHO}
if [ ${STOPPING_MYSQLD} -eq 2 ]
then
${ECHO} "Stopped ${PROGNAME}"
else
${TAIL} -30 ${MYSQL_ERROR_LOG}
fi
}
그러나 무엇 ${MYSQLD_STOP}
입니까?
MYSQL_CONN="-uroot -p<rootpassword> -P${MYSQLD_PORT} -h127.0.0.1 --protocol=tcp"
MYSQLD_STOP="${MYSQLADMIN} ${MYSQL_CONN} shutdown"
내가 사용하는 것을 주목하십시오 127.0.0.1
하고 명시 적 포트를 확인하십시오. 그렇게하면 소켓 파일에 의존하지 않습니다.
나는 항상 mysqladmin --protocol=tcp shtudown
mysql을 멈추는 적절한 대안으로 사용 했다 service mysql stop
. 수행 kill -9
에mysqld
와 mysqld_safe
마지막 리조트의 마지막의해야 마지막. (예, 마지막 세 번 말했습니다).
여러 번 mysqld가 경고없이 mysql.sock을 삭제했습니다. 다른 사람들도 수년에 걸쳐이 문제를 겪었습니다.
발문
비밀은 내가 말한대로입니다 : TCP / IP ( ) 를 통해 mysqladmin 을 사용하여 mysql에 연결 --protocol=tcp
하고 발행하십시오 shutdown
. 종료 권한 이 있기 때문에 작동해야합니다 .mysql.user
인증 된 종료 전용 . Linux 서버에서 mysqld를 종료 할 때 Windows 시스템에서 원격 종료를 실행할 수 있었기 때문에 근무일을 몇 번 절약했습니다.
업데이트 2013-03-06 22:48 EST
셧다운 동안 무슨 일이 일어나고 있는지 걱정이된다면, 특히 Buffer Pool에 많은 InnoDB 데이터가있는 경우 셧다운 시간을 조작하는 방법과 데이터가 디스크로 플러시되는 방법이 있습니다
제안 # 1
더티 페이지가 많은 경우 innodb_max_dirty_pages_pct 를 0으로 낮출 수 있습니다 .
SET GLOBAL innodb_max_dirty_pages_pct = 0;
종료하기 약 15-30 분 전에 설정하십시오. 이렇게하면 mysqld는 디스크에 쓸 수있는 더티 페이지를 최소한으로 줄입니다.
제안 # 2
기본적으로 innodb_fast_shutdown 은 1입니다.이 옵션에는 세 가지 값이 있습니다
- 0 : InnoDB는 종료 전에 느린 종료, 전체 제거 및 삽입 버퍼 병합을 수행합니다.
- 1 : InnoDB는 종료시 빠른 종료라고 알려진 프로세스에서 이러한 작업을 건너 뜁니다.
- 2 : MySQL이 충돌 한 것처럼 InnoDB는 로그를 플러시하고 콜드 셧다운합니다. 커밋 된 트랜잭션은 손실되지 않지만 응급 복구 작업으로 인해 다음 시작 시간이 더 오래 걸립니다.
설명서는 다음과 같이 말합니다.
상당한 양의 데이터가 여전히 버퍼링되는 극단적 인 경우 느린 종료에는 몇 분 또는 몇 시간이 걸릴 수 있습니다. 업그레이드 프로세스가 파일 형식을 업데이트 할 경우 모든 데이터 파일이 완전히 준비되도록 MySQL 주 릴리스간에 업그레이드하거나 다운 그레이드하기 전에 느린 종료 기술을 사용하십시오.
비상 또는 문제 해결 상황에서 innodb_fast_shutdown = 2를 사용하면 데이터가 손상 될 위험이있는 경우 가장 빠르게 종료됩니다.
innodb_max_dirty_pages_pct 및 innodb_fast_shutdown의 기본값은 대부분의 경우에 적합합니다.
tmpwatch
다른 모든 파일 과 함께 소켓을 삭제 하므로 Red Hat 파생 상품에서 사라집니다/tmp
.