MySQL 서비스를 시작 / 중지 할 수 없습니다


28

MySQL을 실행하면서 Debian Etch 웹 서버를 인수합니다.

나는 보통 다음을 사용하여 msyql을 시작, 중지 및 다시 시작합니다.

/etc/init.d/mysql 재시작

이 설정에 대한 어떤 이유로 나는 다음을 얻습니다.

: ~ # /etc/init.d/mysql 중지

MySQL 데이터베이스 서버 중지 : mysqld가 실패했습니다!

mysql 프로세스가 정상적으로 실행 중입니다.

:~# ps aux | grep mysql 
root      2045  0.0  0.1   2676  1332 ?        S    Jun25   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     2082  0.6 10.7 752544 111188 ?       Sl   Jun25  18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root      2083  0.0  0.0   1568   504 ?        S    Jun25   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     11063  0.0  0.0   2856   716 pts/0    S+   17:29   0:00 grep mysql

나는 그것을 할 수있는 정말 쉬운 방법이 있다고 확신하지만 무슨 일이 일어나고 있는지 이해하고 싶습니다. 왜 전형적인 방법이 저에게 효과가 없습니까?

업데이트 로 업데이트 편집 :

JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed 
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                                         Version                                      Description
 +++-============================================-============================================-========================================================================================================
un  mysql-client                                 <none>                                       (no description available)
un  mysql-client-4.1                             <none>                                       (no description available)
ii  mysql-client-5.0                             5.0.32-7etch8                                mysql database client binaries
ii  mysql-common                                 5.0.32-7etch8                                mysql database common files (e.g. /etc/mysql /my.cnf)
un  mysql-common-4.1                             <none>                                       (no description available)
ii  mysql-server                                 5.0.32-7etch8                                mysql database server (meta package depending on the latest version)
un  mysql-server-4.1                             <none>                                       (no description available)
ii  mysql-server-5.0                             5.0.32-7etch8                                mysql database server binaries

mysqladmin shutdown이 작동하지만 /etc/init.d/mysql 명령이 작동하지 않는 이유가 여전히 궁금합니다.


나에게 문제는 수제 설치가 /tmp/mysql.sock대신 찾는 것입니다 /var/run/mysqld/mysqld.sock. 따라서 데비안 관리자가 작성한 스크립트가 자동으로 오류를 발생 시켰습니다. socket=/etc/mysql/debian.cnf
Yvan

답변:


25
mysqladmin shutdown

서버를 종료해야합니다.

두 가지 가능성이 있습니다.

  1. MySQL에 문제가 있으며 어떤 이유로 든 종료를 거부하고 있습니다.
  2. 이전 관리자는 이상한 일을했습니다. init.d 스크립트를 수정했거나 MySQL을 설치하기 위해 데비안 패키지를 전혀 사용하지 않았습니다.

무엇합니까 dpkg --list mysql\*말은?

/var/log/mysql.err는 무엇을 말합니까? 아니면 다른 mysql 로그?

편집하다:

그래서 mysqladmin shutdown일했습니까?

이에 따르면 mysql-server 패키지가 설치됩니다 (mysql-server-5.0; mysql-server 패키지는 아마도 그루터기 일 것입니다). 그래서 그들은 위에 설치했을 수 있습니까? 달리면 debsums mysql-server-5.0더 많은 것을 알 수 있습니다. dpkg --listfiles mysql-server-5.0도움이 될 수도 ...

실제로 /etc/init.d/mysql에는 무엇이 있습니까? 패키지의 특정 버전을 확인하지는 않았지만 사용하려고 시도해야합니다 mysqladmin shutdown... 아마 운이 좋았을 때만 파산했습니다 ...


건배, 게시물에 더 많은 정보를 추가했습니다.
Derek Organ

나는 그들이 데비안 패키지를 사용하여 mysql을 설치하지 않았다고 생각한다
Derek Organ

누군가 적어도 데비안 패키지를 한 번 사용했습니다. 소스에서 컴파일하여 실제 파일을 덮어 쓰거나 다른 방법으로 파산했을 수도 있습니다.
freiheit

22

왜 이런 일이 일어나는가

mysqldump -A 백업에서 복원 할 때와 같이 mysql 가져 오기를 수행하고 mysql 데이터베이스 자체를 덮어 쓰는 경우 일반적인 문제입니다.

이것은 좋은 것입니다 : 아마도 모든 mysql 사용자, 권한 등을 백업하고 싶지만 mysql을 완전히 종료하는 데 사용되는 debian-sys-maint 사용자와 같은 일로 혼란을 겪을 수 있습니다.

이 새 데이터베이스는 루트 암호와 debian-sys-maint 암호를 모두 변경하지만 /etc/mysql/debian.cnf에서 예상되는 debian-sys-maint 암호를 자동으로 변경하지는 않습니다. 실제로 해당 파일도 백업하지 않으면 해당 암호가 더 이상 무엇인지 모를 수도 있습니다.

mysql 루트 비밀번호 재설정 (선택 사항)

먼저 첫 번째 것들. mysql 루트 비밀번호가 이전 서버와 새 서버에서 다른 경우 mysqladmin을 사용하여이를 수정할 수 있습니다.

mysql -p -u root password 'newpassword'

그러나 mysql-server를 설치하면 새 mysql 루트 암호를 입력하라는 메시지가 표시되고 이전과 동일한 암호를 사용했을 수 있습니다.

데비안 시스템 메인 비밀번호를 수정하십시오.

이제 새 서버에 데비안이 설치했을 때 생성 한 데비안 시스 템 메인 비밀번호를 찾으십시오. (이 파일은 매우 보호 된 파일이어야하기 때문에 sudo가 필요합니다.)

sudo cat /etc/mysql/debian.cnf

이제 위에서 설정 한 루트 비밀번호를 사용하여 mysql에 로그인하십시오 :

mysql -p -u root   # use your new password when prompted

debian-sys-maint 사용자의 비밀번호를 재설정하고 권한을 플러시하는 것을 잊지 마십시오 :

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT

작동하는지 테스트하십시오.

sudo /etc/init.d/mysql restart

빠른 팁

서버를 중단하지 않고 서버의 루트 비밀번호를 재설정해야하는 경우이 사용자 계정이이를 수행 할 수있는 권한을 갖습니다. debian.cnf 파일을 cat하고 해당 사용자로 로그인하십시오. NB 루트처럼이 사용자 계정을 보호하십시오.


2
고마워, Jamieson, 잠재적으로 작업 시간을 절약 할 수 있습니다.
slhck

1
대단하고 완전히 환영합니다! 내가 인정하고 싶은 것보다 더 자주 그 파일로 넘어
Jamieson Becker

1
훌륭한 답변. 데이터베이스 덤프 (그리고 루트 암호)를 가져 오는 것이 필자의 이유였습니다. 유일한 차이점은 내 debian.cnf 파일이 "debian-sys-maint"대신 mysql "root"사용자를 사용했다는 것입니다. debian.cnf에 루트 비밀번호를 입력하면 "service mysql <command>"를 통해 mysql을 제어 할 수 있습니다.
Tomasz P. Szynalski

6

힌트 2 개 더 :

sh -x /etc/init.d/mysql restart

이것은 init 스크립트에 의해 실행 된 명령을 보여줍니다.

패키지 debsum을 설치하면 수정 된 패키지를 테스트 할 수 있습니다 (RPM에서도 확인 가능하지만 IMHO가 더 잘 작동 함).


1
저도 같은 영업 이익 등의 문제와 제안이 명령을 실행했다 "Access denied for user 'debian-sys-maint'@'localhost'"절대적으로 정확, 내 MySQL 데이터베이스가 아직 지정하지 않은 모든 권한을, 그래서 mysql stop종료 데이터베이스 자체의 권한을 가지고 있지 않았다. 매뉴얼 mysqladmin shutdown은 완벽하게 작동했습니다.
jevon December

5
pkill mysql

확실히 작동합니다


이것이 내 질문 "mysqld 데이터베이스 서버 mysqld 중지 실패"를 해결 한 것입니다. 당신은 백만 포인트를 받아야합니다!
한스 워 싱크

2

패키지가 다소 이상하다고 가정하면 문제는 pid 파일 일 수 있습니다. 새 패키지 또는 컴파일 된 설치가 / var / run / mysql /을 만들지 않았거나 pid 파일을 작성할 데비안의 표준 또는 init 스크립트가 다른 위치에서 mysqld.pid 파일을 찾는 것으로 의심됩니다. init / pid 파일 불일치를 수정하면 문제가 해결 될 것입니다.


init 스크립트는 서버를 중지시키기 위해 pid 파일을 사용하지 않습니다.
theotherreceive 2016 년

2

mysql shutdown 스크립트는 debian-sys-maint 사용자를 사용하여 /etc/mysql/debian.cnf에서 사용자의 비밀번호를 읽어 'mysqladmin shutdown'을 실행합니다. 이 파일이 존재하고이 사용자로 mysqladmin shutdown을 실행할 수 있는지 확인해야합니다.


1

기술적으로 다음과 같이 끝낼 수 있습니다.

pkill -9 mysqld

그러나 데이터가 손실 될 수 있습니까?

http://www.serverfault.com에서 누군가에게 물어 보는 것이 좋습니다.


나는 그렇게하는 것을 알고 있지만 정기적으로하고 싶은 것을 defo하지 않습니다.
Derek Organ

1

"pkill mysql"을 사용하면 특히 "pkill -9"로 호출 된 경우 데이터가 손실 될 수 있습니다.

또한 'sh -x'를 사용하여 init 스크립트의 문제가 무엇인지 확인하고 MySQL의 오류 로그 (/ var / log / mysql 또는 / var / lib / mysql, config에 따라) 실제로 오래 실행되는 쿼리 또는 무언가 에 붙어 있어 아직 정상적으로 종료하지 않을 것인지 확인하십시오.


1

귀하의 질문에 대한 의견을 따르기 위해 전체 답변을 작성하겠습니다.

문제는 기본 소켓이 /tmp/mysql.sockMySQL 소스 /var/run/mysqld/mysqld.sock와 데비안 바이너리에 있다는 것입니다.

이 솔루션은 소켓 경로를 수정하는 것입니다 의를 /etc/mysql/debian.cnf좋은를 제공함으로써, socket=. 또는 유지하여에서로 변경하십시오 /etc/mysql/my.cnf.

내가 이것을 알아 낸 방법은 다음과 같습니다 /etc/init.d/mysql.«실패»메시지가있을 때 다음 줄을 호출합니다.

echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug

이에 나를 지적 $MYADMIN ping이다, mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. 이 명령을 실행하면 다음과 같이 끝납니다.

/ usr / bin / mysqladmin : 'localhost'의 서버에 연결하지 못했습니다

오류 : '소켓'/var/run/mysqld/mysqld.sock '을 통해 로컬 MySQL 서버에 연결할 수 없습니다 (2)'

mysqld가 실행 중이고 소켓 : '/var/run/mysqld/mysqld.sock'이 있는지 확인하십시오!

그래서 나는 그것을보고 /etc/mysql/debian.cnf소켓이 나쁜 것을 알았습니다.


0

다음 명령을 사용하십시오.

$ mysqladmin 종료

이것은 귀하의 경우 / usr / bin 디렉토리에 있어야합니다.


0

데비안에서 mysql (및 대부분의 다른 서비스)을 중지하려면 수퍼 유저 여야합니다.

이미 있는지 아닌지 확실하지 않은 경우 ... 그렇지 않은 경우 다음 중 하나를 수행해야합니다.

  • 루트로 로그인
  • /etc/init.d/mysql restart 명령 앞에 sudo를 넣습니다 (암호를 묻습니다. sudoers 그룹에 있어야합니다).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.