it-swarm-id.com

Tidak dapat memulai / menghentikan layanan mysql

Mengambil alih server web Debian Etch dengan MySQL berjalan.

Saya biasanya memulai, berhenti, dan mulai ulang msyql menggunakan:

/etc/init.d/mysql restart

Untuk beberapa alasan pada pengaturan ini saya mendapatkan yang berikut:

: ~ # /etc/init.d/mysql berhenti

Menghentikan server database MySQL: mysqld gagal!

Proses mysql berjalan dengan baik:

:~# 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

Saya yakin ada beberapa cara yang sangat mudah untuk melakukannya tetapi saya ingin memahami apa yang sedang terjadi juga. Mengapa cara tipikal tidak bekerja untuk saya?

EDIT UPDATE sebagai pembaruan:

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

mysqladmin shutdown tidak berfungsi tetapi saya masih penasaran mengapa perintah /etc/init.d/mysql tidak berfungsi.

28
Derek Organ
mysqladmin shutdown

harus bekerja untuk mematikan server.

Saya melihat dua kemungkinan:

  1. MySQL memiliki masalah dan menolak untuk dimatikan karena alasan tertentu.
  2. Admin sebelumnya melakukan sesuatu yang aneh. Entah memodifikasi skrip init.d atau tidak menggunakan paket Debian sama sekali untuk menginstal MySQL.

Apa artinya dpkg --list mysql\* katakan?

Apa yang dikatakan /var/log/mysql.err? Atau log mysql lainnya?

EDIT:

Jadi mysqladmin shutdown bekerja?

Menurut itu, paket mysql-server diinstal (mysql-server-5.0; paket mysql-server mungkin hanya sebuah rintisan). Jadi mereka mungkin telah menginstalnya? Lari debsums mysql-server-5.0 mungkin memberi tahu Anda lebih banyak. dpkg --listfiles mysql-server-5.0 juga bisa membantu ...

Apa yang sebenarnya ada di /etc/init.d/mysql? Saya belum memeriksa versi paket itu, tetapi harus mencoba menggunakan mysqladmin shutdown ... Mungkin Anda beruntung dan mereka hanya mematahkannya ...

25
freiheit

Mengapa ini terjadi?

Ini adalah masalah umum jika Anda melakukan impor mysql dan menimpa database mysql itu sendiri, seperti ketika Anda mungkin memulihkan dari mysqldump -A backup.

Ini adalah hal yang baik: Anda mungkin ingin mencadangkan semua pengguna mysql Anda, izin, dll - tetapi itu dapat mendatangkan malapetaka dengan hal-hal seperti pengguna debian-sys-maint yang digunakan untuk mematikan mysql.

Meskipun database baru ini mungkin akan mengubah kata sandi root dan kata sandi debian-sys-Maint, tentu saja itu tidak akan secara otomatis mengubah kata sandi debian-sys-Main yang diharapkan di /etc/mysql/debian.cnf. Bahkan, kecuali Anda juga membuat cadangan file itu, Anda bahkan mungkin tidak tahu apa kata sandi itu lagi!

Menyetel ulang kata sandi root mysql (opsional)

Hal pertama yang pertama. Jika kata sandi root mysql berbeda antara server lama dan baru, Anda dapat menggunakan mysqladmin untuk memperbaikinya:

mysql -p -u root password 'newpassword'

Namun, ketika Anda menginstal mysql-server yang terinstal, itu mungkin meminta Anda untuk kata sandi root mysql baru dan Anda mungkin menggunakan yang sama yang Anda gunakan sebelumnya.

Perbaiki kata sandi debian sys.

Jadi sekarang lihat debian sys memelihara kata sandi yang dibuat debian untuk Anda ketika Anda menginstalnya di server baru. (Anda memerlukan Sudo karena ini harus file yang sangat dilindungi.)

Sudo cat /etc/mysql/debian.cnf

Sekarang, masuk ke mysql menggunakan kata sandi root yang Anda tetapkan di atas:

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

Setel ulang kata sandi untuk pengguna debian-sys-Maint dan jangan lupa untuk menghapus hak istimewa:

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

Tes untuk memastikan itu berfungsi:

Sudo /etc/init.d/mysql restart

Kiat cepat

Jika Anda perlu mengatur ulang kata sandi root untuk server tanpa harus menurunkan server, akun pengguna ini memiliki otoritas untuk melakukannya - cukup cat file debian.cnf dan masuk dengan pengguna itu. N.B. Lindungi akun pengguna ini seperti halnya root.

22
Jamieson Becker

2 petunjuk lainnya:

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

Ini akan menunjukkan kepada Anda perintah yang dijalankan oleh skrip init.

instal paket debsums, dan Anda dapat menguji paket mana yang dimodifikasi (verifikasi juga tersedia untuk RPM, tetapi IMHO berfungsi lebih baik).

6
elcuco
pkill mysql

pasti akan bekerja

5
Jonathan

Dengan asumsi paket agak aneh masalahnya bisa menjadi file pid. Saya menduga bahwa paket-paket baru atau kompilasi yang diinstal tidak membuat/var/run/mysql/atau apa pun yang standar pada Debian untuk file pid yang akan dituliskan atau skrip init mencari file mysqld.pid di tempat lain. Jika Anda dapat memperbaiki ketidakcocokan file init/pid file hal-hal mungkin harus bekerja.

2
kashani

Skrip shutdown mysql menggunakan pengguna debian-sys-Maint untuk menjalankan 'mysqladmin shutdown', dengan membaca kata sandi untuk pengguna dari /etc/mysql/debian.cnf. Anda harus memeriksa apakah file ini ada, dan Anda dapat menjalankan shutdown mysqladmin sebagai pengguna ini.

2
theotherreceive

Untuk menindaklanjuti komentar pada pertanyaan Anda, saya akan menuliskan jawaban lengkap:

Masalahnya adalah soket default adalah /tmp/mysql.sock dengan sumber MySQL, dan /var/run/mysqld/mysqld.sock dengan binari Debian.

Solusinya adalah memperbaiki jalur soket di /etc/mysql/debian.cnf, dengan memberikan yang baik socket=. Atau dengan menyimpannya, tetapi kemudian ubah satu di /etc/mysql/my.cnf.

Inilah cara saya menemukan ini: di /etc/init.d/mysql ketika ada pesan "gagal", Anda memiliki baris ini bernama:

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

Ini mengarahkan saya ke $MYADMIN ping, yang mana mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. Menjalankan perintah ini berakhir pada:

/ usr/bin/mysqladmin: terhubung ke server di 'localhost' gagal

kesalahan: 'Tidak dapat terhubung ke server MySQL lokal melalui soket' /var/run/mysqld/mysqld.sock '(2)'

Periksa apakah mysqld berjalan dan soket: '/var/run/mysqld/mysqld.sock' ada!

Jadi saya melihat /etc/mysql/debian.cnf dan mengetahui bahwa itu adalah soket yang buruk.

1
Yvan

Menggunakan "pkill mysql" juga kemungkinan akan kehilangan data Anda, terutama jika dipanggil sebagai "pkill -9" :(

Saya juga merekomendasikan menggunakan 'sh -x' untuk melihat apa masalah dengan skrip init, dan Anda juga dapat mengintip log kesalahan untuk MySQL (/ var/log/mysql atau /var/lib/mysql, tergantung pada konfigurasi) untuk melihat apakah macet pada --- benar-benar permintaan berjalan lama atau sesuatu dan dengan demikian tidak mau berhenti dengan anggun belum.

1
nixgeek

Anda dapat mengakhirinya secara teknis dengan:

pkill -9 mysqld

Tetapi Anda mungkin kehilangan data?

Anda mungkin lebih baik bertanya kepada seseorang di http://www.serverfault.com

1
John Kurlak

gunakan perintah berikut:

$ mysqladmin shutdown

ini harus tersedia di direktori/usr/bin dalam kasus Anda.

0
Masood Syed

anda harus menjadi pengguna super untuk mulai menghentikan mysql (dan sebagian besar layanan lainnya) di debian.

Tidak yakin apakah Anda sudah atau tidak ... jika tidak, Anda perlu melakukan salah satunya

  • login sebagai root
  • letakkan Sudo di depan perintah /etc/init.d/mysql restart Anda (itu akan menanyakan kata sandi Anda, dan Anda harus berada dalam grup sudoers)
0
benlumley