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.
/tmp/mysql.sock
bukan/var/run/mysqld/mysqld.sock
. Jadi skrip oleh pengelola Debian mengeluarkan kesalahan, diam-diam. Anda hanya perlu memperbaikinyasocket=
di/etc/mysql/debian.cnf
Jawaban:
harus bekerja untuk mematikan server.
Saya melihat dua kemungkinan:
Apa yang
dpkg --list mysql\*
dikatakan?Apa yang dikatakan /var/log/mysql.err? Atau log mysql lainnya?
EDIT:
Begitu
mysqladmin shutdown
berhasil?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.0
mungkin memberi tahu Anda lebih banyak.dpkg --listfiles mysql-server-5.0
dapat 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 ...sumber
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:
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.)
Sekarang, masuk ke mysql menggunakan kata sandi root yang Anda tetapkan di atas:
Setel ulang kata sandi untuk pengguna debian-sys-Maint dan jangan lupa untuk menghapus hak istimewa:
Tes untuk memastikan itu berfungsi:
sumber
2 petunjuk lainnya:
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).
sumber
"Access denied for user 'debian-sys-maint'@'localhost'"
, yang benar-benar benar: database mysql saya belum menetapkan izin apa pun , sehinggamysql stop
tidak memiliki izin dalam database itu sendiri untuk dimatikan. Manualmysqladmin shutdown
bekerja dengan sempurna.pasti akan bekerja
sumber
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.
sumber
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.
sumber
Anda bisa mengakhirinya secara teknis dengan:
Tetapi Anda mungkin kehilangan data?
Anda mungkin lebih baik bertanya kepada seseorang di http://www.serverfault.com
sumber
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.
sumber
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 menyediakan yang baiksocket=
. Atau dengan menyimpannya, tetapi kemudian ubah satu di/etc/mysql/my.cnf
.Begini caranya saya menemukan ini:
/etc/init.d/mysql
ketika 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
, yaitumysqladmin --defaults-file=/etc/mysql/debian.cnf ping
. Menjalankan perintah ini berakhir pada:Jadi saya melihat
/etc/mysql/debian.cnf
dan menemukan bahwa itu adalah soket yang buruk.sumber
gunakan perintah berikut:
$ mysqladmin shutdown
ini harus tersedia di direktori / usr / bin dalam kasus Anda.
sumber
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
sumber