Systemd Mysql не остановится


17

После обновления до 15.04 я получил массу удовольствия от знакомства с systemd. Я думаю, что у меня все работает, кроме как я не могу остановить mysql.service; команда systemctl просто зависает и mysql просто продолжает работать. Кто-нибудь еще испытывал это или мог знать, что происходит?


2
По умолчанию он обнуляет службу с помощью SIGKILL через 3 минуты (если служба не может нормально завершиться). Возможно, вам придется прочитать конфиги mysql.service.
Велкан

2
Какую версию MySQL вы используете? Вы использовали их родной mysql.serviceсценарий или вы сделали свой собственный?
Йос

Это 5.6, которая выходит из официального яркого репо. Я использую скрипт, который поставляется с этим пакетом.
Крейг Данфорд

У нас была та же проблема и мы подали отчет об ошибке .
команда 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 way!), Ctrl + X для выхода.

  4. Сделайте новый служебный файл известным системе:

    sudo systemctl daemon-reload
    

Мой Kubuntu начал зависать во время выключения с помощью задания «Стоп» для MySQL Community Server [1 минута 16 секунд / 10 минут] . Этот ответ решил проблему, большое спасибо.
lolmaus - Андрей Михайлов

Мое обновление 14.10 -> 15.04 (которое перенесло MySQL 5.5 в 5.6) вызвало ту же проблему. Хотя MySQL «работает», он не завершает работу корректно, поэтому Ubuntu зависает при завершении работы. Похоже, проблема связана с изменением версии MySQL в сочетании с заменой systemd upstart. Эта ссылка описывает некоторые обновления конфигурации MySQL для сортировки предупреждений и т. Д. При запуске MySQL также всегда жалуются на некорректное завершение работы, поскольку systemd просто убивает процесс через 10 минут, если вы можете ждать так долго.
Майк

1
Та же проблема в Debian Jessie / Тестирование с MySQL 5.6 - исправлена ​​благодаря вам :)
Majenko

Я ненавижу делать это, но я так рада, что это работает, спасибо Удо!
Габриэль Бейкер

Это не решило проблему в LinuxMint 18.
sivaprasadreddy.k

1

У меня была такая же проблема с Ubuntu 15.10 Desktop, и я нашел способ ее исправить:

Параметр log_error в /etc/mysql/mysql.conf.d/mysqld.cnf был закомментирован. После раскомментирования параметра systemd без проблем завершает работу mysqld.


У меня была такая же проблема на Ubuntu LTS 16.04. Работало только отключение error.log. Теперь mysqld пишет через --log-syslogопцию в журнал. Возможно причина: корневой файловой системой была btrfs.
Ингопо

1

Ваша проблема - thread_pool_size. Если оно намного превышает количество ядер / потоков, вы не сможете правильно завершить работу, если не воспользуетесь командой mysqladmin shutdown.

Например: у вас 2-х ядерный процессор с 4-мя потоками. Если вы установите его 1-4 - он будет работать нормально. Если вы установите его на 16, как рекомендовано во многих «высокопроизводительных» блогах, он будет сбит с толку.


1

У меня была похожая проблема, связанная с тем, что mysql / mariadb не удалось остановить по команде systemd , либо при завершении работы, либо при вызове вручную с помощью sudo service mysql stop.

В моем случае я загружаю Ubuntu / Windows в режиме UEFI с двойной загрузкой, и эти ОС интерпретируют разное аппаратное время, поэтому обе ОС синхронизируются с интернет-серверами времени при запуске.

MySQL (и Mariadb) не удалось остановить, если аппаратное время изменилось во время работы.

Вам нужно отложить запуск MySQL до окончания временной синхронизации. В идеале это можно сделать, вставив временную зависимость с MySQL, After: time-syncно у меня это не сработало.

Решение, которое сработало для меня (вы можете заменить mysql на mariadb для того же эффекта):

  1. Отключить MySQL с sudo systemctl disabled mysql.service

  2. Создайте скрипт (убедитесь, что он исполняемый), который запустит mysql после некоторой задержки /usr/bin/delay_mysqlс содержимым:

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. Создайте сервис systemd для запуска вашего нового скрипта /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

Это заставит ваш скрипт работать на многопользовательском уровне, который в Ubuntu равен 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 на другом компьютере, вам нужно будет повторно синхронизировать пароль пользователя ( debian-sys-maint).

Вам нужно сделать: проверить текущий пароль в файле 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

Вы можете увидеть свой пароль, который система будет использовать здесь: password = n4aSHUP04s1J32X5

Следующий шаг - обновить MySQL до того же пароля: Войдите в MySQL:

~$ mysql -u root -p

Введите свой пароль для доступа к MySQL

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

После этого больше не будет проблем с выключением, не нужно ждать 10 минут, не будет проблем с установкой приложений, использующих эту учетную запись, например phpmyadmin.

ОБНОВЛЕНИЕ: Так, к сожалению, это не решило проблему. Это сделало его случайным - иногда я могу остановить службу без проблем, в другой раз она остановится при остановке службы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.