Systemd Mysql tidak akan berhenti


17

Setelah memutakhirkan ke 15,04, saya bersenang-senang mengenal systemd. Saya pikir saya memiliki semuanya berfungsi kecuali saya tidak dapat menghentikan mysql.service; perintah systemctl hanya hang dan mysql terus berjalan. Adakah orang lain yang mengalami ini atau mungkin tahu apa yang terjadi?


2
Secara default, layanan nukes dengan SIGKILL setelah 3 menit (jika layanan gagal untuk mengakhiri secara normal). Mungkin Anda harus membaca konfigurasi mysql.service.
Velkan

2
Versi MySQL mana yang Anda jalankan? Apakah Anda menggunakan mysql.serviceskrip asli mereka atau apakah Anda membuat skrip sendiri?
Jos

Ini 5.6 yang keluar dari repo hidup resmi. Saya menggunakan skrip yang disertakan dengan paket itu.
Craig Dunford

Kami memiliki masalah yang sama dan mengajukan laporan bug .
Tim EOLE

Jawaban:


25

Saya memiliki masalah yang sama (upgrade ke 15,04, menggunakan file dan konfigurasi resmi).

Saya harus membuat perubahan berikut untuk dapat menghentikan mysqldaemon secara manual dengan sytemctldan secara otomatis pada sistem reboot / shutdown:

  1. Jadikan /etc/mysql/debian.cnfmudah dibaca oleh mysqlpengguna

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. Berikan mysql.servicefile yang sedikit dimodifikasi :

    sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
    sudo chmod 755 /etc/systemd/system/mysql.service
    
  3. Berikan perintah berhenti eksplisit dengan membuka file yang disalin dalam editor:

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

    dan menambahkan baris berikut di bawah [Service]bagian ini:

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

    Di Nano, gunakan Ctrl + O untuk menyimpan (cara Linux!), Ctrl + X untuk keluar.

  4. Jadikan file layanan baru diketahui oleh sistem:

    sudo systemctl daemon-reload
    

Kubuntu saya mulai membeku saat shutdown dengan Stop job berjalan untuk MySQL Community Server [1 menit 16s / 10 menit] . Jawaban ini menyelesaikan masalah, terima kasih banyak.
lolmaus - Andrey Mikhaylov

Pembaruan 14.10 -> 15.04 saya (yang memindahkan MySQL 5.5 ke 5.6) menyebabkan masalah yang sama. Meskipun MySQL 'berfungsi', itu tidak mematikan dengan benar, sehingga Ubuntu hang pada penutupan. Sepertinya masalah ini berkaitan dengan perubahan versi MySQL yang dikombinasikan dengan systemd menggantikan pemula. Tautan ini mencakup beberapa pembaruan pada konfigurasi MySQL untuk memilah peringatan, dll. Memulai MySQL selalu mengeluh tentang shutdown yang salah juga, karena systemd hanya membunuh proses setelah 10 menit, jika Anda bisa menunggu selama itu.
Mike

1
Masalah yang sama di Debian Jessie / Pengujian dengan MySQL 5.6 - diperbaiki terima kasih :)
Majenko

Aku benci harus melakukan ini, tapi aku sangat senang itu berhasil, terima kasih Udo!
Gabriel Baker

Itu tidak memecahkan masalah di LinuxMint 18.
sivaprasadreddy.k

1

Saya memiliki masalah yang sama dengan Ubuntu 15.10 Desktop dan saya menemukan cara untuk memperbaikinya:

parameter log_error di /etc/mysql/mysql.conf.d/mysqld.cnf dikomentari. Setelah menghapus komentar parameter, systemd melakukan mysqld shutdown tanpa masalah.


Saya memiliki masalah yang sama pada Ubuntu LTS 16.04. Hanya penonaktifan error.log berfungsi. Sekarang mysqld menulis melalui --log-syslogopsi ke jurnal. Mungkin alasannya: sistem file root adalah btrfs.
ingopingo

1

Masalah Anda adalah thread_pool_size. Jika jauh lebih tinggi dari jumlah core / utas, Anda tidak akan dapat mematikan dengan benar kecuali dengan menggunakan perintah shutdown mysqladmin.

Misalnya: Anda memiliki 2 core CPU dengan 4 utas. Jika Anda mengaturnya 1-4 - itu akan berfungsi dengan baik. Jika Anda mengaturnya menjadi 16, seperti yang disarankan di banyak blog 'kinerja tinggi', itu akan dicampakkan.


1

Saya memiliki masalah yang sama dengan mysql / mariadb gagal berhenti ketika diinstruksikan oleh systemd , baik pada shutdown atau dipanggil secara manual dengan sudo service mysql stop.

Dalam kasus saya, saya dual-boot Ubuntu / Windows dalam mode UEFI, dan OS ini menafsirkan waktu perangkat keras yang berbeda, sehingga kedua OS disinkronkan dengan server waktu Internet ketika mereka mulai.

MySQL (dan Mariadb) gagal berhenti jika waktu perangkat keras berubah saat sedang berjalan.

Anda harus menunda memulai MySQL sampai setelah timesync. Idealnya ini akan dilakukan dengan memasukkan ketergantungan temporal pada mysql dengan After: time-synctetapi itu tidak berhasil untuk saya.

Solusi yang bekerja untuk saya (Anda dapat mengganti mysql dengan mariadb untuk efek yang sama):

  1. Nonaktifkan mysql dengan sudo systemctl disabled mysql.service

  2. Buat skrip (pastikan skrip ini dapat dieksekusi) yang akan memulai mysql setelah beberapa penundaan /usr/bin/delay_mysqldengan konten:

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. Buat layanan systemd untuk menjalankan skrip baru Anda /etc/systemd/system/delay_mysql.service dengan konten:

    [Unit]
    Description=Delay start of MySQL / MariaDB
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/delay_mysql
    
    [Install]
    WantedBy=multi-user.target  
    
  4. Daftarkan layanan baru Anda dengan sudo systemctl enable delay_mysql.service

Ini akan menyebabkan skrip Anda berjalan pada level multi-pengguna, yang pada Ubuntu 3,4,5.


Ini menyelesaikan masalah saya. Namun sangat penting untuk dicatat, bahwa sebelum menginstal ulang MySql Anda harus menonaktifkan delay_mysql.service, jika tidak, Anda mendapat kesalahan.
SiGe

0

Tepat saat menyalin mysql.serviceAnda harus melakukan chmodsetelah.

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

0

dalam kasus saya itu adalah ketidakcocokan kata sandi untuk pengguna pemeliharaan debian-sys-maintantara satu masuk /etc/mysql/debian.cnfdan satu di database MySQL.

Pengguna ini digunakan untuk mematikan MySQL dan fungsi lainnya. Setelah pembaruan MySQL, mungkin terjadi bahwa ada ketidaksesuaian antara file dan database. Ini juga bisa terjadi jika Anda memindahkan database Anda dari satu MySQL ke yang lain. Jika Anda akan mengimpor semua basis data dan pengguna dari MySQL lain di mesin yang berbeda, Anda perlu menyinkronkan kembali debian-sys-maintkata sandi pengguna pemeliharaan ( ) Anda.

Yang perlu Anda lakukan: periksa kata sandi Anda saat ini di file 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

Anda dapat melihat kata sandi yang digunakan sistem di sini: password = n4aSHUP04s1J32X5

Langkah selanjutnya adalah memperbarui MySQL ke kata sandi yang sama: Masuk ke MySQL:

~$ mysql -u root -p

Ketikkan kata sandi Anda untuk mengakses MySQL

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

Setelah itu tidak ada lagi masalah dengan shutdown, tidak ada 10 menit menunggu, tidak ada masalah dengan menginstal aplikasi yang menggunakan akun pemeliharaan ini seperti phpmyadmin.

UPDATE: Jadi sayangnya ini tidak menyelesaikan masalah. Itu membuatnya agak acak - kadang-kadang saya bisa menghentikan layanan tanpa masalah lain kali akan membeku saat berhenti layanan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.