MySQL hizmeti başlatılamıyor / durdurulamıyor


28

MySQL çalışıyorken bir Debian Etch web sunucusu devralmak.

Ben genellikle msyql kullanarak başlatır, durdurur ve yeniden başlatırım:

/etc/init.d/mysql restart

Bu kurulum bazı nedenlerden dolayı aşağıdakileri alıyorum:

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

MySQL veritabanı sunucusunu durdurmak: mysqld başarısız oldu!

MySQL işlemi iyi çalışıyor:

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

Bunu yapmanın gerçekten kolay bir yolu olduğundan eminim, ama neler olup bittiğini de anlamak istiyorum. Tipik yol neden benim için çalışmıyor?

Güncelleme olarak GÜNCELLEMEYİ DÜZENLE :

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 kapanması işe yarıyor ancak hala /etc/init.d/mysql komutlarının çalışmadığını merak ediyorum.


Benim için mesele, el yapımı kurulumun /tmp/mysql.sockyerine aranmasıydı /var/run/mysqld/mysqld.sock. Demek Debian'lı yazarların senaryosu sessizce bir hata veriyordu. Sadece düzeltme zorunda socket=içinde/etc/mysql/debian.cnf
Yvan

Yanıtlar:


25
mysqladmin shutdown

Sunucuyu kapatmaya çalışmalı.

İki olası olasılık görüyorum:

  1. MySQL'in bir sorunu var ve nedense kapatmayı reddediyor.
  2. Önceki yönetici garip bir şey yaptı. İnit.d betiğini değiştirdi veya MySQL'i yüklemek için Debian paketlerini hiç kullanmadı.

Ne dpkg --list mysql\*diyor?

/Var/log/mysql.err ne diyor? Veya diğer MySQL günlükleri?

DÜZENLE:

Yani mysqladmin shutdownişe yaradı mı?

Buna göre, mysql-server paketi kuruludur (mysql-server-5.0; mysql-server paketi muhtemelen sadece bir saplamadır). Yani üzerine kurdular mı? Koşmak debsums mysql-server-5.0size daha fazlasını söyleyebilir. dpkg --listfiles mysql-server-5.0de yardımcı olabilir ...

/Etc/init.d/mysql dosyasında neler var? Paketin belirli bir sürümünü kontrol etmedim, ancak kullanmaya çalışmalı mysqladmin shutdown... Belki de şanslısınız ve onlar sadece ...


şerefe, yazıya biraz daha bilgi ekledi.
Derek Organ

MySQL kurmak için Debian paketlerini kullanmadıklarından şüpheleniyorum
Derek Organ

Birisi en azından bir kere Debian paketi kullandı. Kaynaktan derlenmiş ve gerçek dosyaların üzerine yazılmış olabilir veya başka bir şekilde kırmış olabilirler ...
freiheit

22

Bu neden oluyor

Bir mysql alma işlemi yaparsanız ve mysqlump-A yedeklemesinden geri yükleme gibi zamanlardaki gibi mysql veritabanının üzerine yazarsanız, bu yaygın bir sorundur.

Bu iyi bir şeydir: muhtemelen tüm mysql kullanıcılarınızı, izinlerinizi vb. Yedeklemek istiyorsunuz - ancak mysql'i temiz bir şekilde kapatmak için kullanılan debian-sys-maint kullanıcısı gibi şeylerle ilgili hasara yol açabilir.

Her ne kadar bu yeni veritabanı hem root şifresini hem de debian-sys-maint şifresini değiştirecek olsa da, elbette /etc/mysql/debian.cnf içindeki beklenen debian-sys-maint şifresini otomatik olarak değiştirmeyecektir. Aslında, o dosyayı da yedeklemediyseniz, muhtemelen o şifrenin ne olduğunu bile bilmiyorsunuzdur!

MySQL kök parolasını sıfırlama (isteğe bağlı)

İlk önce ilk şey. Eğer mysql root şifresi eski ve yeni sunucular arasında farklıysa, düzeltmek için mysqladmin'i kullanabilirsiniz:

mysql -p -u root password 'newpassword'

Bununla birlikte, apt-get mysql-server'ı kurduğunuzda, muhtemelen yeni mysql root şifresini sordu ve muhtemelen daha önce kullandığınızdan daha fazlasını kullandınız.

Debian sys maint şifresini düzeltin.

Şimdi debian'ın yeni sunucuya kurduğunuzda sizin için oluşturduğu debian sys parolasını arayın. (Sudo'ya ihtiyacınız var çünkü bu oldukça korumalı bir dosya olmalı.)

sudo cat /etc/mysql/debian.cnf

Şimdi, yukarıda belirlediğiniz root şifresini kullanarak mysql'e giriş yapın:

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

Debian-sys-maint kullanıcısı için şifreyi sıfırlayın ve ayrıcalıkları temizlemeyi unutmayın:

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

Çalıştığından emin olmak için test edin:

sudo /etc/init.d/mysql restart

Hızlı ipucu

Sunucuyu geri getirmek zorunda kalmadan sunucunun kök parolasını sıfırlamanız gerekirse, bu kullanıcı hesabının bunu yapma yetkisi vardır - debian.cnf dosyasını doldurun ve bu kullanıcıyla oturum açın. NB Bu kullanıcı hesabını tıpkı root gibi koruyun.


2
Sağol Jamieson, bu beni potansiyel olarak saatler süren çalışmadan kurtardı.
Ocak'ta

1
Müthiş ve tamamen hoş geldiniz! Kabul etmek istediğimden daha sık bu dosyaya geri dönmek zorunda kaldım;)
Jamieson Becker

1
Mükemmel cevap. Bir veritabanı dökümü (ve bununla birlikte, kök parolayı) almak benim durumumun tam sebebiydi. Tek fark benim debian.cnf dosyamın "debian-sys-maint" yerine mysql "root" kullanıcısını kullanmasıdır. Basitçe debian.cnf içindeki root şifresini yazdım ve şimdi "service mysql <command>" ile mysql'yi kontrol edebiliyorum.
Tomasz P. Szynalski

6

2 ipucu daha:

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

Bu, init betiği tarafından yürütülen komutları gösterir.

paket debsums'lerini yükleyin ve hangi paketlerin değiştirildiğini test edebilirsiniz (RPM için de kullanılabilir olduğunu doğrulayın, ancak IMHO daha iyi çalışır).


1
OP ile aynı problemi yaşadım ve bu komutun çalıştırılması "Access denied for user 'debian-sys-maint'@'localhost'"kesinlikle doğru oldu: mysql veritabanım henüz herhangi bir izin mysql stopvermemişti , bu yüzden veritabanının kendisinin kapanmasına izin vermedi. Bir el kitabı mysqladmin shutdownmükemmel çalıştı.
jevon

5
pkill mysql

kesinlikle çalışacak


Bu benim soruyu çözdü "mysql veritabanı sunucusu mysqld başarısız oldu". Bir milyon puan almalısın!
Hans Wassink

2

Paketin biraz garip olduğunu varsayarsak sorun pid dosyası olabilir. Yeni paketlerin veya derlenmiş kurulumun, / var / run / mysql / veya Debian'da standart olanın, pid dosyasının yazılması için standart olmadığını veya init betiğinin mysqld.pid dosyasını başka bir yerde aradığından şüpheleniyorum. İnit / pid dosyasını uyuşmazlığı düzeltebilirseniz, muhtemelen çalışması gereken şeyler vardır.


İnit betiği sunucuyu durdurmak için pid dosyasını kullanmaz.
Theotherrece'i

2

Mysql kapatma betiği, kullanıcının /etc/mysql/debian.cnf adresindeki şifresini okuyarak 'mysqladmin shutdown' komutunu çalıştırmak için debian-sys-maint kullanıcısını kullanır. Bu dosyanın var olduğunu ve mysqladmin shutdown'ı bu kullanıcı olarak çalıştırabildiğinizi kontrol etmelisiniz.


1

Teknik olarak bitirebilirsin:

pkill -9 mysqld

Ancak veri kaybedebilirsiniz?

Http://www.serverfault.com adresinden birisine sormakta daha iyi olabilirsiniz


Bu şekilde yaptığımın farkındayım ama düzenli olarak aradığım şeyi değil.
Derek Organ

1

"Pkill mysql" kullanmak, özellikle "pkill -9" olarak çağrıldığında, muhtemelen verilerinizi kaybeder :(

Ayrıca init betiğiyle ilgili sorunun ne olduğunu görmek için 'sh -x' komutunu kullanmanızı da tavsiye ederim. Ayrıca MySQL (/ var / log / mysql veya / var / lib / mysql, config'a bağlı olarak) gerçekten uzun süredir devam eden bir sorguya veya başka bir şeye takılıp takılmadığını görmek ve bu nedenle henüz dikkatlice bırakmayı istememek.


1

Sorunuzla ilgili yorumu takip etmek için tam bir cevap yazacağım:

Sorun, varsayılan soketin /tmp/mysql.sockMySQL kaynağında ve /var/run/mysqld/mysqld.sockDebian ikili dosyalarında olmasıdır.

Çözelti soket yolunu düzeltmektir içinde /etc/mysql/debian.cnfiyi sağlayarak, socket=. Veya onu tutarak, ama sonra bir tane değiştirin /etc/mysql/my.cnf.

İşte bunu nasıl öğrendim: /etc/init.d/mysql«başarısız» mesajı olduğunda, şu satırı çağırdınız:

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

Bu işaret beni $MYADMIN pingolan mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. Bu komutu çalıştırmak biter:

/ usr / bin / mysqladmin: 'localhost' adresindeki sunucuya bağlanılamadı

error: 'Yerel MySQL sunucusuna soket üzerinden bağlanamıyor' /var/run/mysqld/mysqld.sock '(2)'

MySQL'in çalışıp çalışmadığını ve soketin: '/var/run/mysqld/mysqld.sock' olduğunu kontrol edin!

Böylece bir baktım /etc/mysql/debian.cnfve bunun kötü bir soket olduğunu öğrendim.


0

aşağıdaki komutu kullanın:

$ mysqladmin kapatma

bu durumda / usr / bin dizininde bulunmalıdır.


0

debian'da mysql (ve diğer birçok servisi) durdurmaya başlamak için süper bir kullanıcı olmanız gerekir.

Emin olup olmadığına emin değilim ... eğer değilse, birini yapmalısın

  • root olarak giriş yapın
  • /etc/init.d/mysql restart komutunun önüne sudo koyunuz (parolanızı isteyecektir ve sudoers grubunda olmanız gerekecektir).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.