Systemd Mysql não vai parar

16

Depois de atualizar para o 15.04, tive muita diversão em conhecer o systemd. Acho que tenho tudo funcionando, exceto que não consigo parar o mysql.service; o comando systemctl simplesmente trava e o mysql continua rodando. Alguém mais experimentou isso ou pode saber o que está acontecendo?

    
por Craig Dunford 28.04.2015 / 06:02

6 respostas

24

Eu tive o mesmo problema (atualizar para o 15.04, usando arquivos oficiais e config).

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

  1. Tornar /etc/mysql/debian.cnf legível para o usuário mysql com

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. Forneça um arquivo mysql.service 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 seção [Service] :

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

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

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

    sudo systemctl daemon-reload
    
por Udo 17.05.2015 / 00:32
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 faz o mysqld shutdown sem problemas.

    
por mikko356 22.12.2015 / 13:56
1

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

Exemplo: você tem 2 núcleos de CPU com 4 threads. Se você definir 1-4 - ele funcionará bem. Se você configurá-lo para 16, como é recomendado em muitos blogs de 'alto desempenho', ele ficará empinado.

    
por Drakula963 07.04.2016 / 14:07
1

Eu tive um problema semelhante com mysql / mariadb não conseguindo parar quando instruído por systemd , seja no desligamento ou chamado manualmente com sudo service mysql stop .

No meu caso, eu tenho o Ubuntu / Windows dual-boot no modo UEFI, e estes sistemas operacionais interpretam diferentes tempos de hardware, então ambos os sistemas operacionais sincronizam com servidores de tempo da Internet quando eles são iniciados.

O MySQL (e o Mariadb) não conseguiam parar se o tempo de hardware mudasse enquanto estava sendo executado.

Você precisa adiar o início do MySQL até depois do timeync. Idealmente isso seria feito inserindo uma dependência temporal no mysql com After: time-sync , mas isso não funcionou para mim.

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

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

  2. Crie um script (certifique-se de que é executável) que irá iniciar o mysql após algum atraso /usr/bin/delay_mysql com conteúdo:

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. Crie um serviço systemd para executar seu novo script %código% com 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 /etc/systemd/system/delay_mysql.service

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

    
por zero-day 22.01.2017 / 03:26
0

Apenas ao copiar mysql.service , você terá que fazer um chmod depois.

cp /lib/systemd/system/mysql.service /etc/systemd/system/
chmod 755 /etc/systemd/system/mysql.service
    
por Martin 19.11.2015 / 16:03
0

no meu caso, foi a incompatibilidade de senha para o usuário de manutenção debian-sys-maint entre um em /etc/mysql/debian.cnf e um 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 o arquivo e o 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 máquinas diferentes, você precisará sincronizar novamente a senha do usuário de manutenção ( debian-sys-maint ).

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 10 minutos de espera, sem problemas com a instalação de aplicativos que usam essa conta de manutenção, como o phpmyadmin.

UPDATE: Então, infelizmente, isso não resolveu o problema. Isso fez com que fosse algo aleatório - às vezes eu posso parar o serviço sem problemas outra vez ele irá congelar na parada do serviço.

    
por Patryk 08.05.2016 / 14:10