it-swarm-vi.tech

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

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 thất bại!

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.

28
Derek Organ
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?

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

CHỈNH SỬA :

Vì thế mysqladmin shutdown đã là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ó? Đang chạy debsums mysql-server-5.0 có thể cho bạn biết thêm. dpkg --listfiles mysql-server-5.0 cũ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ỡ ...

25
freiheit

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 khẩu 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 đang sử dụng trước đó.

Khắc phục mật khẩu debian sys duy trì.

Vì vậy, bây giờ hãy tì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 đặ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 đó. N.B. Bảo vệ tài khoản người dùng này giống như root.

22
Jamieson Becker

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 sửa 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).

6
elcuco
pkill mysql

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

5
Jonathan

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.

2
kashani

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 là người dùng này không.

2
theotherreceive

Để 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.sock Với nguồn MySQL và /var/run/mysqld/mysqld.sock Với các tệp nhị phân Debian.

Giải pháp là sửa đường dẫn ổ cắm trong /etc/mysql/debian.cnf, Bằng cách cung cấp socket= Tốt. 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 tìm ra điều này: trong /etc/init.d/mysql Khi có thông báo "không thành công", 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 ổ cắm' /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.cnf Và phát hiện ra đó là ổ cắm xấu.

1
Yvan

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 thực sự truy vấn chạy dài hoặc một cái gì đó và do đó không sẵn sàng thoát ra một cách duyên dáng khá.

1
nixgeek

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

1
John Kurlak

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
Masood Syed

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)
0
benlumley