Systemd Mysql sẽ không dừng lại


17

Sau khi nâng cấp lên 15.04, tôi đã có rất nhiều niềm vui để làm quen với systemd. Tôi nghĩ rằng tôi có mọi thứ hoạt động trừ khi tôi không thể dừng mysql.service; lệnh systemctl chỉ bị treo và mysql tiếp tục chạy. Có ai khác có kinh nghiệm này hoặc có thể biết những gì đang xảy ra?


2
Theo mặc định, nó sẽ tắt dịch vụ với SIGKILL sau 3 phút (nếu dịch vụ không kết thúc bình thường). Có lẽ bạn sẽ phải đọc các cấu hình của mysql.service.
Velkan

2
Phiên bản nào của MySQL bạn đang chạy? Bạn đã sử dụng mysql.servicetập lệnh gốc của họ hay bạn tự cuộn?
Jos

Đó là 5.6 xuất phát từ repo sống động chính thức. Tôi đang sử dụng tập lệnh đi kèm với gói đó.
Craig Dunford

Chúng tôi đã có cùng một vấn đề và nộp một báo cáo lỗi .
Đội EOLE

Câu trả lời:


25

Tôi gặp vấn đề tương tự (nâng cấp lên 15.04, sử dụng tập tin và cấu hình chính thức).

Tôi đã phải thực hiện các thay đổi sau để có thể dừng mysqltrình nền bằng tay sytemctlvà tự động khởi động lại / tắt hệ thống:

  1. Làm /etc/mysql/debian.cnfcho mysqlngười dùng có thể đọc được

    sudo chgrp mysql /etc/mysql/debian.cnf; sudo chmod 640 /etc/mysql/debian.cnf
    
  2. Cung cấp một mysql.servicetệp sửa đổi một chút :

    sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
    sudo chmod 755 /etc/systemd/system/mysql.service
    
  3. Cung cấp lệnh dừng rõ ràng bằng cách mở tệp đã sao chép trong trình chỉnh sửa:

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

    và thêm dòng sau dưới [Service]phần:

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

    Trong Nano, sử dụng Ctrl + O để lưu (cách Linux!), Ctrl + X để thoát.

  4. Tạo tệp dịch vụ mới cho hệ thống:

    sudo systemctl daemon-reload
    

Kubfox của tôi bắt đầu đóng băng trong khi tắt máy với công việc dừng đang chạy cho Máy chủ cộng đồng MySQL [1 phút 16 giây / 10 phút] . Câu trả lời này đã giải quyết vấn đề, cảm ơn bạn rất nhiều.
lolmaus - Andrey Mikhaylov

Bản nâng cấp 14.10 -> 15.04 của tôi (đã chuyển MySQL 5.5 lên 5.6) gây ra vấn đề tương tự. Mặc dù MySQL 'hoạt động' nhưng nó không tắt chính xác, vì vậy Ubuntu bị treo khi tắt máy. Có vẻ như vấn đề liên quan đến thay đổi phiên bản MySQL kết hợp với systemd thay thế mới bắt đầu. Đây liên kết bao gồm một số các bản cập nhật cho MySQL cấu hình để sắp xếp ra cảnh báo, vv Bắt đầu MySQL luôn phàn nàn về cách tắt không chính xác quá, như systemd chỉ giết chết quá trình sau 10 phút, nếu bạn có thể chờ đợi lâu.
Mike

1
Vấn đề tương tự trong Debian Jessie / Kiểm tra với MySQL 5.6 - đã được sửa nhờ bạn :)
Majenko

Tôi ghét phải làm điều này nhưng tôi rất vui vì nó hoạt động, cảm ơn Udo!
Gabriel Baker

Nó không giải quyết được vấn đề trên LinuxMint 18.
sivaprasadreddy.k

1

Tôi gặp vấn đề tương tự với Ubuntu 15.10 Desktop và tôi đã tìm ra cách khắc phục:

tham số log_error trong /etc/mysql/mysql.conf.d/mysqld.cnf đã được nhận xét. Sau khi bỏ ghi chú tham số, systemd sẽ tắt máy mysqld mà không gặp vấn đề gì.


Tôi gặp vấn đề tương tự trên Ubuntu LTS 16.04. Chỉ vô hiệu hóa error.log đã hoạt động. Bây giờ mysqld viết thông qua --log-syslogtùy chọn vào tạp chí. Có thể một lý do: hệ thống tập tin gốc là btrfs.
ingopingo

1

Vấn đề của bạn là thread_pool_size. Nếu nó cao hơn nhiều so với số lõi / luồng, bạn sẽ không thể tắt máy đúng cách trừ khi sử dụng lệnh tắt máy mysqladmin.

Ví dụ: Bạn có 2 lõi CPU với 4 luồng. Nếu bạn đặt nó 1-4 - nó sẽ hoạt động tốt. Nếu bạn đặt nó thành 16, như được khuyên trong nhiều blog 'hiệu suất cao', nó sẽ bị xóa.


1

Tôi gặp vấn đề tương tự với mysql / mariadb không dừng lại khi được systemd hướng dẫn , khi tắt máy hoặc gọi thủ công bằng sudo service mysql stop.

Trong trường hợp của tôi, tôi khởi động kép Ubuntu / Windows ở chế độ UEFI và các HĐH này diễn giải thời gian phần cứng khác nhau, vì vậy cả hai HĐH đều đồng bộ với máy chủ thời gian Internet khi chúng khởi động.

MySQL (và Mariadb) đã không dừng lại nếu thời gian phần cứng thay đổi trong khi nó đang chạy.

Bạn cần trì hoãn bắt đầu MySQL cho đến sau timesync. Lý tưởng nhất là việc này sẽ được thực hiện bằng cách chèn một phụ thuộc tạm thời vào mysql After: time-syncnhưng điều đó không hiệu quả với tôi.

Giải pháp hiệu quả với tôi (Bạn có thể thay thế mysql bằng mariadb để có hiệu quả tương tự):

  1. Vô hiệu hóa mysql với sudo systemctl disabled mysql.service

  2. Tạo một tập lệnh (đảm bảo có thể thực thi được) sẽ khởi động mysql sau một số độ trễ /usr/bin/delay_mysqlvới nội dung:

    #!/bin/sh
    sleep 30s
    /etc/init.d/mysql start
    
  3. Tạo một dịch vụ systemd để chạy tập lệnh mới của bạn /etc/systemd/system/delay_mysql.service với nội dung:

    [Unit]
    Description=Delay start of MySQL / MariaDB
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/delay_mysql
    
    [Install]
    WantedBy=multi-user.target  
    
  4. Đăng ký dịch vụ mới của bạn với sudo systemctl enable delay_mysql.service

Điều này sẽ khiến tập lệnh của bạn chạy ở cấp độ nhiều người dùng, trên Ubuntu là 3,4,5.


Nó đã giải quyết vấn đề của tôi. Tuy nhiên, điều rất quan trọng cần lưu ý là trước khi cài đặt lại MySql bạn nên vô hiệu hóa delay_mysql.service, nếu không bạn đã gặp lỗi.
SiGe

0

Chỉ khi sao chép mysql.servicebạn sẽ phải làm chmodsau.

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

0

trong trường hợp của tôi, đó là mật khẩu không khớp với người dùng bảo trì debian-sys-maintgiữa một trong /etc/mysql/debian.cnfvà một trong cơ sở dữ liệu MySQL.

Người dùng này được sử dụng để tắt máy MySQL và các chức năng khác. Sau khi cập nhật MySQL, có thể xảy ra sự cố không khớp giữa tệp và cơ sở dữ liệu. Điều này cũng có thể xảy ra nếu bạn di chuyển cơ sở dữ liệu của mình từ MySQL này sang MySQL khác. Nếu bạn sẽ nhập tất cả cơ sở dữ liệu và người dùng từ MySQL khác trên máy khác, bạn cần đồng bộ lại debian-sys-maintmật khẩu người dùng bảo trì ( ).

Bạn cần làm: kiểm tra mật khẩu hiện tại của bạn trong tệp ubfox / 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

Bạn có thể thấy mật khẩu của mình mà hệ thống sẽ sử dụng ở đây: password = n4aSHUP04s1J32X5

Bước tiếp theo là cập nhật MySQL vào cùng một mật khẩu: Đăng nhập vào MySQL:

~$ mysql -u root -p

Nhập mật khẩu của bạn để truy cập MySQL

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

Sau đó, không còn vấn đề gì với việc tắt máy, không phải chờ 10 phút, không có vấn đề gì với việc cài đặt các ứng dụng sử dụng tài khoản bảo trì này như phpmyadmin.

CẬP NHẬT: Rất tiếc, điều này không giải quyết được vấn đề. Nó làm cho nó trở nên ngẫu nhiên - đôi khi tôi có thể dừng dịch vụ mà không gặp sự cố vào lần khác khi nó sẽ đóng băng khi dừng dịch vụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.