Không thể bắt đầu / dừng dịch vụ mysql


28

Tiếp quản máy chủ web Debian Etch với MySQL đang chạy.

Tôi thường bắt đầu, dừng và khởi động lại msyql bằng cách sử dụng:

/etc/init.d/mysql khởi động lại

Đối với một số lý do trên thiết lập này, tôi nhận được như sau:

: ~ # /etc/init.d/mysql dừng

Dừng máy chủ cơ sở dữ liệu MySQL: mysqld không thành công!

Quá trình mysql đang chạy tốt:

:~# ps aux | grep mysql 
root      2045  0.0  0.1   2676  1332 ?        S    Jun25   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     2082  0.6 10.7 752544 111188 ?       Sl   Jun25  18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root      2083  0.0  0.0   1568   504 ?        S    Jun25   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     11063  0.0  0.0   2856   716 pts/0    S+   17:29   0:00 grep mysql

Tôi chắc chắn có một số cách thực sự dễ dàng để làm điều đó nhưng tôi muốn hiểu những gì đang xảy ra là tốt. Tại sao cách điển hình không làm việc cho tôi?

CẬP NHẬT EDIT dưới dạng cập nhật:

JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed 
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                                         Version                                      Description
 +++-============================================-============================================-========================================================================================================
un  mysql-client                                 <none>                                       (no description available)
un  mysql-client-4.1                             <none>                                       (no description available)
ii  mysql-client-5.0                             5.0.32-7etch8                                mysql database client binaries
ii  mysql-common                                 5.0.32-7etch8                                mysql database common files (e.g. /etc/mysql /my.cnf)
un  mysql-common-4.1                             <none>                                       (no description available)
ii  mysql-server                                 5.0.32-7etch8                                mysql database server (meta package depending on the latest version)
un  mysql-server-4.1                             <none>                                       (no description available)
ii  mysql-server-5.0                             5.0.32-7etch8                                mysql database server binaries

Tắt máy mysqladmin không hoạt động nhưng tôi vẫn tò mò tại sao các lệnh /etc/init.d/mysql không hoạt động.


Đối với tôi vấn đề là cài đặt thủ công tìm kiếm /tmp/mysql.sockthay vì /var/run/mysqld/mysqld.sock. Vì vậy, tập lệnh của các nhà bảo trì Debian đã phát hành một lỗi, âm thầm. Bạn chỉ cần sửa socket=trong/etc/mysql/debian.cnf
Yvan

Câu trả lời:


25
mysqladmin shutdown

nên làm việc để tắt máy chủ.

Tôi thấy hai khả năng:

  1. MySQL có một vấn đề và đang từ chối đóng cửa vì một số lý do.
  2. Các quản trị viên trước đã làm một cái gì đó kỳ lạ. Đã sửa đổi tập lệnh init.d hoặc hoàn toàn không sử dụng các gói Debian để cài đặt MySQL.

dpkg --list mysql\*nói gì

/Var/log/mysql.err nói gì? Hoặc các bản ghi mysql khác?

CHỈNH SỬA:

Vì vậy, mysqladmin shutdownlàm việc?

Theo đó, gói máy chủ mysql đã được cài đặt (mysql-server-5.0; gói máy chủ mysql có lẽ chỉ còn sơ khai). Vì vậy, họ có thể đã cài đặt trên nó? Chạy debsums mysql-server-5.0có thể cho bạn biết nhiều hơn. dpkg --listfiles mysql-server-5.0cũng có thể giúp ...

Điều gì thực sự có trong /etc/init.d/mysql? Tôi chưa kiểm tra phiên bản cụ thể của gói đó, nhưng nó nên thử sử dụng mysqladmin shutdown... Có lẽ bạn may mắn và họ chỉ phá vỡ ...


chúc mừng, thêm một số thông tin cho bài viết.
Đàn organ Derek

Tôi nghi ngờ họ đã không sử dụng các gói Debian để cài đặt mysql
Derek Organ

ít nhất ai đó đã sử dụng gói Debian một lần. Họ có thể đã biên dịch từ nguồn và ghi đè lên các tệp thực tế, hoặc phá vỡ nó theo một cách khác ...
freiheit

22

Tại sao điều này xảy ra

Đây là một vấn đề phổ biến nếu bạn thực hiện nhập mysql và ghi đè lên chính cơ sở dữ liệu mysql, chẳng hạn như khi bạn có thể khôi phục từ bản sao lưu mysqldump -A.

Đây là một điều tốt: bạn có thể muốn sao lưu tất cả người dùng mysql, quyền, v.v. - nhưng nó có thể tàn phá những thứ như người dùng debian-sys-duy trì được sử dụng để tắt sạch mysql.

Mặc dù cơ sở dữ liệu mới này có thể sẽ thay đổi cả mật khẩu gốc và mật khẩu debian-sys-duy trì, tất nhiên nó sẽ không tự động thay đổi mật khẩu debian-sys-duy trì dự kiến ​​trong /etc/mysql/debian.cnf. Trên thực tế, trừ khi bạn cũng sao lưu tệp đó, bạn có thể thậm chí không biết mật khẩu đó là gì nữa!

Đặt lại mật khẩu gốc mysql (tùy chọn)

Điều đầu tiên đầu tiên. Nếu mật khẩu gốc mysql khác nhau giữa các máy chủ cũ và mới, bạn có thể sử dụng mysqladmin để sửa nó:

mysql -p -u root password 'newpassword'

Tuy nhiên, khi bạn cài đặt máy chủ mysql, có lẽ nó đã nhắc bạn nhập mật khẩu gốc mysql mới và có thể bạn đã sử dụng chính mật khẩu mà bạn đã sử dụng trước đó.

Sửa lỗi debian sys duy trì mật khẩu.

Vì vậy, bây giờ hãy tìm kiếm mật khẩu sys duy trì mật khẩu mà debian đã tạo cho bạn khi bạn cài đặt nó trên máy chủ mới. (Bạn cần sudo vì đây phải là một tệp được bảo vệ cao.)

sudo cat /etc/mysql/debian.cnf

Bây giờ, đăng nhập vào mysql bằng mật khẩu gốc bạn đã đặt ở trên:

mysql -p -u root   # use your new password when prompted

Đặt lại mật khẩu cho người dùng debian-sys-duy trì và đừng quên xóa các đặc quyền:

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT

Kiểm tra để chắc chắn rằng nó hoạt động:

sudo /etc/init.d/mysql restart

Mẹo nhanh

Nếu bạn cần phải đặt lại mật khẩu gốc cho máy chủ mà không cần phải hạ máy chủ xuống, tài khoản người dùng này có quyền làm điều đó - chỉ cần gửi tệp debian.cnf và đăng nhập với người dùng đó. NB Bảo vệ tài khoản người dùng này giống như root.


2
Cảm ơn bạn, Jamieson, điều này có khả năng giúp tôi tiết kiệm hàng giờ làm việc.
slhck

1
Tuyệt vời, và hoàn toàn được chào đón! Tôi đã phải quay lại tập tin đó thường xuyên hơn tôi muốn thừa nhận;)
Jamieson Becker

1
Câu trả lời rực rỡ. Nhập kết xuất cơ sở dữ liệu (và với nó, mật khẩu gốc) chính xác là lý do trong trường hợp của tôi. Sự khác biệt duy nhất là tệp debian.cnf của tôi đã sử dụng người dùng "root" mysql thay vì "debian-sys-notify". Tôi chỉ cần nhập mật khẩu gốc vào debian.cnf và bây giờ tôi có thể kiểm soát mysql thông qua "dịch vụ mysql <lệnh>".
Tomasz P. Szynalski

6

Thêm 2 gợi ý:

sh -x /etc/init.d/mysql restart

Điều này sẽ cho bạn thấy các lệnh được thực thi bởi init script.

cài đặt gói gỡ lỗi và bạn có thể kiểm tra gói nào đã được sửa đổi (xác minh cũng có sẵn cho RPM, nhưng IMHO hoạt động tốt hơn).


1
Tôi gặp vấn đề tương tự như OP và chạy lệnh này được đề xuất "Access denied for user 'debian-sys-maint'@'localhost'", điều này hoàn toàn chính xác: cơ sở dữ liệu mysql của tôi chưa được gán bất kỳ quyền nào , vì vậy mysql stopkhông có quyền trong cơ sở dữ liệu để tự tắt. Một hướng dẫn mysqladmin shutdownlàm việc hoàn hảo.
jevon

5
pkill mysql

chắc chắn sẽ làm việc


Đây là những gì tôi đã giải quyết câu hỏi của tôi "dừng máy chủ cơ sở dữ liệu mysql mysqld không thành công". Bạn sẽ nhận được một triệu điểm!
Hans Wassink

2

Giả sử gói có phần lạ, vấn đề có thể là tệp pid. Tôi nghi ngờ rằng các gói mới hoặc cài đặt đã biên dịch không tạo / var / run / mysql / hoặc bất cứ điều gì là tiêu chuẩn trên Debian cho tệp pid được ghi vào hoặc tập lệnh init đang tìm tệp mysqld.pid ở một nơi khác. Nếu bạn có thể sửa tập tin init / pid không khớp, có lẽ mọi thứ sẽ hoạt động.


Tập lệnh init không sử dụng tệp pid để dừng máy chủ.
thứ

2

Kịch bản tắt máy mysql sử dụng người dùng debian-sys-Maint để chạy 'mysqladmin shutdown', bằng cách đọc mật khẩu cho người dùng từ /etc/mysql/debian.cnf. Bạn nên kiểm tra xem tệp này có tồn tại không và bạn có thể chạy tắt máy mysqladmin với tư cách người dùng này không.


1

Về mặt kỹ thuật bạn có thể kết thúc nó bằng:

pkill -9 mysqld

Nhưng bạn có thể mất dữ liệu?

Bạn có thể tốt hơn nên hỏi ai đó tại http://www.serverfault.com


Tôi nhận thức được việc đó theo cách đó nhưng không phải là điều tôi muốn làm thường xuyên.
Đàn organ Derek

1

Sử dụng "pkill mysql" cũng có thể làm mất dữ liệu của bạn, đặc biệt nếu được gọi là "pkill -9" :(

Tôi cũng khuyên bạn nên sử dụng 'sh -x' để xem vấn đề với tập lệnh init có thể là gì và bạn cũng có thể xem lén các bản ghi lỗi cho MySQL (/ var / log / mysql hoặc / var / lib / mysql, tùy thuộc vào cấu hình) để xem liệu nó có bị kẹt trên một truy vấn thực sự dài hoặc một cái gì đó hay không và do đó chưa sẵn sàng thoát ra một cách duyên dáng.


1

Để theo dõi nhận xét về câu hỏi của bạn, tôi sẽ viết ra một câu trả lời đầy đủ:

Vấn đề là ổ cắm mặc định là /tmp/mysql.sockvới nguồn MySQL và /var/run/mysqld/mysqld.sockvới nhị phân Debian.

Giải pháp là sửa đường dẫn ổ cắm vào /etc/mysql/debian.cnf, bằng cách cung cấp hàng hóa socket=. Hoặc bằng cách giữ nó, nhưng sau đó thay đổi một trong /etc/mysql/my.cnf.

Đây là cách tôi phát hiện ra điều này: /etc/init.d/mysqlkhi có thông báo «thất bại», bạn có dòng này được gọi là:

echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug

Điều này chỉ cho tôi $MYADMIN ping, đó là mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. Chạy lệnh này kết thúc vào:

/ usr / bin / mysqladmin: kết nối với máy chủ tại 'localhost' không thành công

lỗi: 'Không thể kết nối với máy chủ MySQL cục bộ thông qua socket' /var/run/mysqld/mysqld.sock '(2)'

Kiểm tra xem mysqld có đang chạy không và ổ cắm: '/var/run/mysqld/mysqld.sock' có tồn tại không!

Vì vậy, tôi đã xem xét /etc/mysql/debian.cnfvà phát hiện ra rằng đó là ổ cắm xấu.


0

sử dụng lệnh sau:

$ mysqladmin tắt máy

cái này nên có sẵn trong thư mục / usr / bin trong trường hợp của bạn.


0

bạn cần phải là một siêu người dùng để bắt đầu dừng mysql (và hầu hết các dịch vụ khác) trên debian.

Không chắc bạn đã hay chưa ... nếu không, bạn cần phải làm một trong

  • đăng nhập bằng root
  • đặt sudo trước lệnh khởi động lại /etc/init.d/mysql của bạn (nó sẽ hỏi bạn mật khẩu của bạn và bạn sẽ cần phải ở trong nhóm sudoers)
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.