Systemd Mysql จะไม่หยุด


17

หลังจากอัปเกรดเป็น 15.04 ฉันสนุกกับการทำความรู้จักกับ systemd ฉันคิดว่าฉันมีทุกอย่างทำงานยกเว้นฉันไม่สามารถหยุด mysql.service คำสั่ง systemctl แฮงค์และ mysql ก็ยังคงทำงานต่อไป มีใครเคยมีประสบการณ์นี้หรืออาจจะรู้ว่าเกิดอะไรขึ้น?


2
โดยค่าเริ่มต้นจะทำการบริการกับ SIGKILL หลังจาก 3 นาที (หากบริการล้มเหลวในการยกเลิกตามปกติ) อาจเป็นไปได้ว่าคุณจะต้องอ่านการกำหนดค่าของ mysql.service
Velkan

2
MySQL รุ่นไหนที่คุณใช้อยู่? คุณใช้mysql.serviceสคริปต์ของพวกเขาเองหรือคุณใช้เอง
Jos

มันคือ 5.6 ซึ่งมาจาก repo ที่เป็นทางการที่ชัดเจน ฉันใช้สคริปต์ที่มาพร้อมกับแพ็คเกจนั้น
Craig Dunford

เรามีปัญหาเดียวกันและยื่นรายงานข้อผิดพลาด
ทีม EOLE

คำตอบ:


25

ฉันมีปัญหาเดียวกัน (อัปเกรดเป็น 15.04 โดยใช้ไฟล์อย่างเป็นทางการและตั้งค่า)

ฉันต้องทำการเปลี่ยนแปลงต่อไปนี้เพื่อให้สามารถหยุดmysqldaemon ด้วยตนเอง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. ระบุคำสั่ง stop อย่างชัดเจนโดยเปิดไฟล์ที่คัดลอกในตัวแก้ไข:

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

    และเพิ่มบรรทัดต่อไปนี้ใน[Service]ส่วน:

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

    ใน Nano ใช้ Ctrl + O เพื่อบันทึก (วิธี Linux!), Ctrl + X เพื่อออก

  4. ทำให้ระบบรู้จักบริการไฟล์ใหม่:

    sudo systemctl daemon-reload
    

Kubuntu ของฉันเริ่มที่จะหยุดชะงักในระหว่างการปิดเครื่องด้วยงานหยุดทำงานสำหรับเซิร์ฟเวอร์ชุมชน MySQL [1 นาที 16วินาที/ 10 นาที] คำตอบนี้แก้ไขปัญหาได้ขอบคุณมาก
lolmaus - Andrey Mikhaylov

14.10 -> 15.04 ของฉันอัพเกรด (ซึ่งย้าย MySQL 5.5 เป็น 5.6) ทำให้เกิดปัญหาเดียวกัน แม้ว่า MySQL 'ใช้งานได้' แต่ก็ไม่ได้ปิดอย่างถูกต้องดังนั้น Ubuntu จึงปิดการทำงาน ดูเหมือนว่าปัญหาเกี่ยวข้องกับการเปลี่ยนแปลงเวอร์ชั่น MySQL รวมกับ systemd แทนที่พุ่งพรวด ลิงก์นี้ครอบคลุมการอัปเดตบางอย่างของ MySQL config เพื่อเรียงลำดับคำเตือน ฯลฯ การเริ่มต้น MySQL มักจะบ่นเกี่ยวกับการปิดระบบที่ไม่ถูกต้องเช่นกันเนื่องจาก systemd เพียงแค่ฆ่ากระบวนการหลังจาก 10 นาทีถ้าคุณสามารถรอได้นาน
Mike

1
ปัญหาเดียวกันใน Debian Jessie / การทดสอบกับ MySQL 5.6 - ขอขอบคุณคุณคงที่ :)
Majenko

ฉันเกลียดการทำเช่นนี้ แต่ฉันดีใจที่ได้ผลขอบคุณ Udo!
Gabriel Baker

มันไม่ได้แก้ปัญหาใน 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
ingopingo

1

ปัญหาของคุณคือ thread_pool_size หากสูงกว่าจำนวนแกน / เธรดมากคุณจะไม่สามารถปิดเครื่องได้อย่างถูกต้องเว้นแต่ว่าใช้คำสั่ง mysqladmin shutdown

เช่นคุณมี CPU 2 คอร์ที่มี 4 เธรด หากคุณตั้งค่าไว้ 1-4 - มันจะทำงานได้ดี หากคุณตั้งค่าเป็น 16 ตามที่แนะนำในบล็อก 'ประสิทธิภาพสูง' จำนวนมากบล็อกจะถูก pooched


1

ผมมีปัญหาที่คล้ายกันกับMySQL / MariaDBล้มเหลวในการหยุดเมื่อได้รับคำสั่งจากsystemdsudo service mysql stopทั้งในการปิดหรือเรียกด้วยตนเอง

ในกรณีของฉันฉันเป็นแบบ dual-booting 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

ในกรณีของฉันมันเป็นรหัสผ่านไม่ตรงกันสำหรับการบำรุงรักษาผู้ใช้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

อัปเดต:ดังนั้นน่าเสียดายที่นี่ไม่ได้แก้ปัญหา มันทำให้การสุ่ม - บางครั้งฉันสามารถหยุดบริการโดยไม่มีปัญหาอีกครั้งมันจะหยุดที่หยุดบริการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.