Systemd MySQL은 멈추지 않습니다.


17

15.04로 업그레이드 한 후 systemd를 알게되는 것이 즐거웠습니다. mysql.service를 중지 할 수 없다는 점을 제외하고는 모든 것이 작동한다고 생각합니다. systemctl 명령이 중단되고 mysql은 계속 실행됩니다. 다른 사람이 이것을 경험했거나 무슨 일이 일어나고 있는지 알고 있습니까?


2
기본적으로 3 분 후에 SIGKILL로 서비스를 중단합니다 (서비스가 정상적으로 종료되지 않은 경우). 아마도 당신은 mysql.service의 설정을 읽어야 할 것이다.
Velkan

2
어떤 버전의 MySQL을 실행하고 있습니까? 기본 mysql.service스크립트 를 사용 했습니까? 아니면 직접 작성 했습니까 ?
Jos

공식적인 생생한 저장소에서 나오는 5.6입니다. 해당 패키지와 함께 제공되는 스크립트를 사용하고 있습니다.
Craig Dunford 1

우리는 같은 문제가 있었고 버그 보고서를 제출했습니다 .
EOLE 팀

답변:


25

나는 같은 문제가 있었다 (공식 파일과 구성을 사용하여 15.04로 업그레이드).

시스템 재부팅 / 종료시 자동으로 mysql데몬을 수동으로 중지 할 수 있도록 다음과 같이 변경 해야했습니다 sytemctl.

  1. 확인 /etc/mysql/debian.cnf에 대한 읽을 수있는 mysql사용자와의

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. 약간 수정 된 mysql.service파일을 제공 하십시오.

    sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
    sudo chmod 755 /etc/systemd/system/mysql.service
    
  3. 편집기에서 복사 된 파일을 열어 명시 적 중지 명령을 제공하십시오.

    sudo nano /etc/systemd/system/mysql.service
    

    [Service]섹션 아래에 다음 줄을 추가 하십시오.

    ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
    

    Nano에서는 Ctrl + O를 사용하여 저장 (Linux 방식!), Ctrl + X를 사용하여 종료하십시오.

  4. 새 서비스 파일을 시스템에 알리십시오.

    sudo systemctl daemon-reload
    

MySQL 커뮤니티 서버에 대한 중지 작업이 실행 중이고 종료 중에 쿠분투가 정지되기 시작했습니다 . 이 답변으로 문제가 해결되었습니다. 대단히 감사합니다.
lolmaus-Andrey Mikhaylov

내 14.10-> 15.04 업그레이드 (MySQL 5.5를 5.6으로 이동)는 동일한 문제를 일으켰습니다. MySQL은 '작동'하지만 올바르게 종료되지 않으므로 Ubuntu는 종료시 중단됩니다. 문제는 시스템 교체 시작과 결합 된 MySQL 버전 변경과 관련이있는 것 같습니다. 이 링크 는 경고 등을 분류하기 위해 MySQL 설정에 대한 일부 업데이트를 다룹니다. MySQL을 시작하면 항상 시스템 종료가 10 분 후에 프로세스를 종료하기 때문에 잘못된 종료에 대해 불평합니다.
Mike

1
데비안 Jessie에서 동일한 문제 / MySQL 5.6으로 테스트-고마워 :)
Majenko

나는 이것을하는 것을 싫어하지만 Udo 덕분에 작동하게되어 기쁩니다!
Gabriel Baker

LinuxMint 18에서는이 문제를 해결하지 못했습니다.
sivaprasadreddy.k

1

Ubuntu 15.10 Desktop과 동일한 문제가 있으며이를 해결하는 방법을 찾았습니다.

/etc/mysql/mysql.conf.d/mysqld.cnf의 log_error 매개 변수가 주석 처리되었습니다. 매개 변수를 주석 해제 한 후 systemd는 문제없이 mysqld를 종료합니다.


우분투 LTS 16.04에서도 같은 문제가있었습니다. error.log 비활성화 만 작동했습니다. 이제 mysqld는 --log-syslog옵션을 통해 저널에 씁니다 . 아마도 이유 : 루트 파일 시스템은 btrfs였습니다.
ingopingo

1

문제는 thread_pool_size입니다. 코어 / 스레드 수보다 훨씬 많은 경우 mysqladmin shutdown 명령을 사용하지 않으면 제대로 종료 할 수 없습니다.

예 : 스레드가 4 개인 코어가 2 개인 CPU가 있습니다. 1-4로 설정하면 정상적으로 작동합니다. 많은 '고성능'블로그에서 알 수 있듯이 16으로 설정하면 문제가 발생합니다.


1

종료시 또는 수동으로 호출 하여 systemd 에서 지시 할 때 mysql / mariadb 와 비슷한 문제가 발생 했습니다 .sudo service mysql stop

필자의 경우 UEFI 모드에서 Ubuntu / Windows를 이중 부팅하고 있으며이 OS는 서로 다른 하드웨어 시간을 해석하므로 두 OS가 시작할 때 인터넷 시간 서버와 동기화됩니다.

실행 중 하드웨어 시간이 변경되면 MySQL (및 Mariadb)을 중지하지 못했습니다.

timesync가 끝날 때까지 MySQL 시작을 연기해야합니다. 이상적으로 이것은 mysql에 시간 의존성을 삽입하여 수행 After: time-sync되지만 나에게는 효과가 없었습니다.

나를 위해 일한 해결책 (같은 효과를 위해 mysql을 mariadb로 대체 할 수 있음) :

  1. 로 mysql 비활성화 sudo systemctl disabled mysql.service

  2. /usr/bin/delay_mysql내용이 약간 지연 된 후 mysql을 시작하는 스크립트를 작성하십시오 (실행 파일인지 확인하십시오) .

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. /etc/systemd/system/delay_mysql.service 내용이 포함 된 새 스크립트를 실행하는 시스템 서비스를 작성하십시오 .

    [Unit]
    Description=Delay start of MySQL / MariaDB
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/delay_mysql
    
    [Install]
    WantedBy=multi-user.target  
    
  4. 에 새로운 서비스를 등록하십시오 sudo systemctl enable delay_mysql.service

이로 인해 스크립트가 다중 사용자 수준에서 실행되며 우분투에서는 3,4,5입니다.


내 문제가 해결되었습니다. 그러나 MySql을 다시 설치하기 전에 delay_mysql.service를 비활성화해야합니다. 그렇지 않으면 오류가 발생합니다.
SiGe

0

복사 mysql.service할 때만 나중에해야합니다 chmod.

cp /lib/systemd/system/mysql.service /etc/systemd/system/
chmod 755 /etc/systemd/system/mysql.service

0

내 경우에 유지 보수 사용자에 대한 암호가 일치했다 debian-sys-maint하나 사이 /etc/mysql/debian.cnf와 MySQL 데이터베이스의 하나.

이 사용자는 MySQL 종료 및 기타 기능에 사용됩니다. MySQL 업데이트 후 파일과 데이터베이스간에 패스 불일치가 발생했을 수 있습니다. 데이터베이스를 한 MySQL에서 다른 MySQL로 옮기는 경우에도 발생할 수 있습니다. 다른 머신의 다른 MySQL에서 모든 데이터베이스와 사용자를 가져 오려면 유지 보수 사용자 ( debian-sys-maint) 비밀번호 를 다시 동기화해야 합니다.

우분투 / 데비안 파일에서 현재 비밀번호를 확인하십시오.

sudo cat /etc/mysql/debian.cnf

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = n4aSHUP04s1J32X5
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user     = debian-sys-maint
password = n4aSHUP04s1J32X5
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

시스템에서 사용할 비밀번호를 확인할 수 있습니다. password = n4aSHUP04s1J32X5

다음 단계는 MySQL을 동일한 비밀번호로 업데이트하는 것입니다. MySQL에 로그인하십시오.

~$ mysql -u root -p

MySQL에 액세스하려면 비밀번호를 입력하십시오

mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';**

그 후 종료와 더 이상 문제가없고, 10 분 동안 기다릴 필요가 없으며, phpmyadmin과 같은이 유지 관리 계정을 사용하는 앱 설치에 문제가 없습니다.

업데이트 : 불행히도 이것은 문제를 해결하지 못했습니다. 그것은 임의의 종류로 만들었습니다. 때로는 서비스 중지시 다른 시간에 문제없이 서비스를 중지 할 수 있습니다.

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