O Systemd Mysql não para


17

Após a atualização para o 15.04, eu me diverti muito conhecendo o systemd. Eu acho que tenho tudo funcionando, exceto que não consigo parar o mysql.service; o comando systemctl simplesmente trava e o mysql continua em execução. Alguém já passou por isso ou pode saber o que está acontecendo?


2
Por padrão, ele reduz o serviço com SIGKILL após 3 minutos (se o serviço falhar ao finalizar normalmente). Provavelmente você terá que ler as configurações do mysql.service.
quer

2
Qual versão do MySQL você está executando? Você usou o mysql.servicescript nativo ou criou o seu próprio?
30715 Jos

É a versão 5.6 que sai do repo oficial vívido. Estou usando o script que acompanha esse pacote.
Craig Dunford

Tivemos o mesmo problema e arquivamos um relatório de erro .
equipe EOLE

Respostas:


25

Eu tive o mesmo problema (atualize para 15.04, usando arquivos e configurações oficiais).

Eu tive que fazer as seguintes alterações para poder parar o mysqldaemon manualmente com sytemctle automaticamente na reinicialização / desligamento do sistema:

  1. Tornar /etc/mysql/debian.cnflegível para o mysqlusuário com

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. Forneça um mysql.servicearquivo ligeiramente modificado :

    sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
    sudo chmod 755 /etc/systemd/system/mysql.service
    
  3. Forneça um comando de parada explícito, abrindo o arquivo copiado em um editor:

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

    e adicionando a seguinte linha na [Service]seção:

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

    No Nano, use Ctrl + O para salvar (modo Linux!), Ctrl + X para sair.

  4. Torne o novo arquivo de serviço conhecido pelo sistema:

    sudo systemctl daemon-reload
    

Meu Kubuntu começou a congelar durante o desligamento com um trabalho de parada em execução para o MySQL Community Server [1min 16s / 10min] . Esta resposta resolveu o problema, muito obrigado.
lolmaus - Andrey Mikhaylov

Minha atualização 14.10 -> 15.04 (que moveu o MySQL 5.5 para 5.6) causou o mesmo problema. Embora o MySQL 'funcione', ele não é desligado corretamente, portanto o Ubuntu permanece desligado. Parece que o problema está relacionado à alteração da versão do MySQL combinada com o systemd substituindo o iniciante. Este link cobre algumas das atualizações da configuração do MySQL para classificar avisos etc. O início do MySQL também reclama também de um desligamento incorreto, pois o systemd apenas finaliza o processo após 10 minutos, se você puder esperar tanto tempo.
Mike

1
Mesmo problema no Debian Jessie / Testing com MySQL 5.6 - fixa graças a você :)
Majenko

Eu odeio ter que fazer isso, mas estou tão feliz que funciona, obrigado Udo!
Gabriel Baker

Ele não resolveu a questão sobre LinuxMint 18.
sivaprasadreddy.k

1

Eu tive o mesmo problema com o Ubuntu 15.10 Desktop e encontrei uma maneira de corrigi-lo:

O parâmetro log_error em /etc/mysql/mysql.conf.d/mysqld.cnf foi comentado. Após descomentar o parâmetro, o systemd encerra o mysqld sem problemas.


Eu tive o mesmo problema no Ubuntu LTS 16.04. Apenas a desativação do error.log estava funcionando. Agora o mysqld escreve através da --log-syslogopção no diário. Talvez um motivo: o sistema de arquivos raiz era o btrfs.
ingopingo 25/03

1

Seu problema é thread_pool_size. Se for muito maior que o número de núcleos / threads, você não poderá desligar corretamente a menos que use o comando mysqladmin shutdown.

Ex .: Você possui CPU de 2 núcleos com 4 threads. Se você definir 1-4 - funcionará bem. Se você defini-lo como 16, como recomendado em muitos blogs de 'alto desempenho', ele será prejudicado.


1

Eu tive um problema semelhante com o mysql / mariadb falhando ao parar quando instruído pelo systemd , no desligamento ou chamado manualmente com sudo service mysql stop.

No meu caso, eu estou inicializando o Ubuntu / Windows no modo UEFI, e esses SOs interpretam diferentes horários de hardware, para que ambos os SOs sejam sincronizados com os servidores de horário da Internet ao iniciarem.

O MySQL (e Mariadb) falhou ao parar se a hora do hardware mudou enquanto estava em execução.

Você precisa adiar o início do MySQL até depois da sincronização horária. Idealmente, isso seria feito inserindo uma dependência temporal no mysql com After: time-syncmas isso não funcionou para mim.

A solução que funcionou para mim (você pode substituir o mysql pelo mariadb para o mesmo efeito):

  1. Desative o mysql com sudo systemctl disabled mysql.service

  2. Crie um script (verifique se é executável) que iniciará o mysql após algum atraso /usr/bin/delay_mysqlcom o conteúdo:

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. Crie um serviço systemd para executar seu novo script /etc/systemd/system/delay_mysql.service com o conteúdo:

    [Unit]
    Description=Delay start of MySQL / MariaDB
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/delay_mysql
    
    [Install]
    WantedBy=multi-user.target  
    
  4. Registre seu novo serviço com sudo systemctl enable delay_mysql.service

Isso fará com que seu script seja executado em níveis multiusuário, que no Ubuntu são 3,4,5.


Resolveu o meu problema. No entanto, é muito importante observar que, antes de reinstalar o MySql, você deve desativar o delay_mysql.service, caso contrário, você receberá um erro.
SiGe

0

Apenas ao copiar, mysql.servicevocê terá que fazer um chmoddepois.

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

0

no meu caso, era incompatibilidade de senha para o usuário de manutenção debian-sys-maintentre um /etc/mysql/debian.cnfe outro no banco de dados MySQL.

Este usuário é usado para o desligamento do MySQL e outras funções. Após a atualização do MySQL, pode acontecer que haja uma incompatibilidade de passagem entre arquivo e banco de dados. Isso também pode acontecer se você mover seu banco de dados de um MySQL para outro. Se você importar todos os bancos de dados e usuários de outro MySQL em uma máquina diferente, precisará sincronizar novamente sua debian-sys-maintsenha de usuário de manutenção ( ).

Você precisa fazer: verifique sua senha atual no arquivo ubuntu / debian:

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

Você pode ver sua senha que o sistema usará aqui: password = n4aSHUP04s1J32X5

O próximo passo é atualizar o MySQL para a mesma senha: Entre no MySQL:

~$ mysql -u root -p

Digite sua senha para acessar o MySQL

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

Depois disso, não há mais problemas com o desligamento, sem espera de 10 minutos, sem problemas com a instalação de aplicativos que usam essa conta de manutenção, como phpmyadmin.

ATUALIZAÇÃO: Infelizmente, isso não resolveu o problema. Tornou-o meio aleatório - às vezes eu posso interromper o serviço sem problemas outra vez, quando ele congela.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.