Systemd Mysql не зупиниться


17

Після оновлення до 15.04 мені було дуже цікаво ознайомитись із системою. Я думаю, що в мене все працює, за винятком того, що я не в змозі зупинити mysql.service; команда systemctl просто висить, а mysql просто продовжує працювати. Хтось ще переживав це чи може знати, що відбувається?


2
За замовчуванням вона запускає послугу за допомогою SIGKILL через 3 хвилини (якщо сервіс не вдалося нормально припинити). Ймовірно, вам доведеться прочитати конфігурацію mysql.service.
Велкан

2
Яку версію MySQL ви використовуєте? Ви користувались їхнім рідним mysql.serviceсценарієм чи прогортали свій власний?
Jos

Це 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
    

    У Нано використовуйте Ctrl + O для збереження (Linux спосіб!), Ctrl + X для виходу.

  4. Зробити новий файл сервісу відомим системі:

    sudo systemctl daemon-reload
    

Мій Kubuntu почав застигати під час відключення із запущеним завданням зупинки для MySQL Community Server [1min 16s / 10min] . Ця відповідь вирішила питання, велике дякую.
lolmaus - Андрій Михайлов

Моє оновлення 14.10 -> 15.04 (яке перемістило MySQL 5.5 до 5.6) викликало ту саму проблему. Хоча MySQL "працює", він не вимикається правильно, тому Ubuntu зависає. Схоже, проблема стосується зміни версії MySQL у поєднанні із заміною системи на початку. Це посилання охоплює деякі оновлення конфігурації MySQL для впорядкування попереджень тощо. Запуск MySQL також завжди скаржиться на неправильне відключення, оскільки systemd просто вбиває процес через 10 хвилин, якщо ви можете чекати так довго.
Майк


Я ненавиджу це робити, але я дуже рада, що це працює, дякую Удо!
Габріель Бейкер

Це не вирішило проблему на LinuxMint 18.
sivaprasadreddy.k

1

У мене була така ж проблема з Ubuntu 15.10 Desktop, і я знайшов спосіб її виправити:

Параметр log_error в /etc/mysql/mysql.conf.d/mysqld.cnf був прокоментований. Після коментування цього параметра systemd без проблем відключить mysqld.


У мене була така ж проблема на Ubuntu LTS 16.04. Працювало лише відключення помилки. Тепер mysqld пише через --log-syslogопцію в журнал. Може бути причиною: кореневою файловою системою був btrfs.
інгопінго

1

Ваша проблема - thread_pool_size. Якщо вона набагато перевищує кількість ядер / потоків, ви не зможете належним чином вимкнутися, якщо не скористатися командою mysqladmin shutdown.

Напр .: у вас 2 ядра CPU з 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. Створіть системну службу для запуску нового сценарію /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.