Tidak dapat memulai / menghentikan layanan mysql

28

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 khas 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.

Derek Organ
sumber
Bagi saya masalah ini adalah bahwa instalasi buatan tangan mencari /tmp/mysql.sockbukan /var/run/mysqld/mysqld.sock. Jadi skrip oleh pengelola Debian mengeluarkan kesalahan, diam-diam. Anda hanya perlu memperbaikinya socket=di/etc/mysql/debian.cnf
Yvan

Jawaban:

25
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 yang dpkg --list mysql\*dikatakan?

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

EDIT:

Begitu mysqladmin shutdownberhasil?

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

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

freiheit
sumber
sorak-sorai, menambahkan beberapa informasi lebih lanjut ke pos.
Derek Organ
Saya curiga mereka tidak menggunakan paket Debian untuk menginstal mysql
Derek Organ,
seseorang menggunakan paket Debian sekali, setidaknya. Mereka mungkin telah dikompilasi dari sumber dan menimpa file yang sebenarnya, atau memecahkannya dengan cara lain ...
freiheit
22

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 basis data 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!

Mengatur 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 perlu 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 wewenang untuk melakukannya - cukup cat file debian.cnf dan masuk dengan pengguna itu. NB Lindungi akun pengguna ini seperti halnya root.

Jamieson Becker
sumber
2
Terima kasih, Jamieson, ini berpotensi menyelamatkan saya dari jam kerja.
slhck
1
Luar biasa, dan benar-benar disambut! Saya harus kembali ke file itu lebih sering daripada yang ingin saya akui;)
Jamieson Becker
1
Jawaban yang brilian Mengimpor dump database (dan dengan itu, kata sandi root) adalah alasan tepat dalam kasus saya. Satu-satunya perbedaan adalah bahwa file debian.cnf saya menggunakan pengguna "root" mysql alih-alih "debian-sys-Maint". Saya cukup memasukkan kata sandi root di debian.cnf dan sekarang saya dapat mengontrol mysql melalui "service mysql <command>".
Tomasz P. Szynalski
6

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).

elcuco
sumber
1
Saya memiliki masalah yang sama dengan OP dan menjalankan perintah ini yang disarankan "Access denied for user 'debian-sys-maint'@'localhost'", yang benar-benar benar: database mysql saya belum menetapkan izin apa pun , sehingga mysql stoptidak memiliki izin dalam database itu sendiri untuk dimatikan. Manual mysqladmin shutdownbekerja dengan sempurna.
jevon
5
pkill mysql

pasti akan bekerja

Jonathan
sumber
Inilah yang saya selesaikan pertanyaan saya "menghentikan server database mysql gagal mysql". Anda harus mendapatkan jutaan poin!
Hans Wassink
2

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

Kashani
sumber
Skrip init tidak menggunakan file pid untuk menghentikan server.
theotherreceive
2

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.

theecereceive
sumber
1

Anda bisa mengakhirinya secara teknis dengan:

pkill -9 mysqld

Tetapi Anda mungkin kehilangan data?

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

John Kurlak
sumber
Saya sadar melakukannya dengan cara itu tetapi tidak melakukan apa yang saya inginkan secara teratur.
Derek Organ
1

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

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

nixgeek
sumber
1

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

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

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

Begini caranya saya menemukan ini: /etc/init.d/mysqlketika ada pesan «gagal», Anda memiliki baris yang disebut:

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

Ini menunjuk saya ke $MYADMIN ping, yaitu 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)'

Pastikan mysqld sedang berjalan dan soket: '/var/run/mysqld/mysqld.sock' ada!

Jadi saya melihat /etc/mysql/debian.cnfdan menemukan bahwa itu adalah soket yang buruk.

Yvan
sumber
0

gunakan perintah berikut:

$ mysqladmin shutdown

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

Masood Syed
sumber
0

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