ไม่สามารถเริ่ม / หยุดบริการ mysql


28

เข้ายึดพื้นที่เว็บเซิร์ฟเวอร์ Debian Etch ด้วย MySQL

ฉันมักจะเริ่มหยุดและเริ่ม msyql โดยใช้:

/etc/init.d/mysql รีสตาร์ท

ด้วยเหตุผลบางอย่างในการตั้งค่านี้ฉันจะได้รับสิ่งต่อไปนี้:

: ~ # /etc/init.d/mysql หยุด

การหยุดเซิร์ฟเวอร์ฐานข้อมูล MySQL: mysqld ล้มเหลว!

กระบวนการ mysql ทำงานได้ดี:

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

ฉันแน่ใจว่ามีวิธีง่าย ๆ ที่จะทำ แต่ฉันต้องการที่จะเข้าใจสิ่งที่เกิดขึ้นเช่นกัน ทำไมวิธีการทั่วไปถึงไม่ได้ผลสำหรับฉัน

แก้ไข การอัปเดตเป็นการอัปเดต:

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 ใช้งานได้ แต่ฉันก็ยังสงสัยว่าทำไมคำสั่ง /etc/init.d/mysql ไม่ทำงาน


สำหรับผมปัญหาคือว่าการติดตั้งที่ทำด้วยมือมองหาแทน/tmp/mysql.sock /var/run/mysqld/mysqld.sockดังนั้นสคริปต์โดยผู้ดูแล Debian จึงออกข้อผิดพลาดอย่างเงียบ ๆ คุณเพียงแค่ต้องแก้ไขsocket=ใน/etc/mysql/debian.cnf
Yvan

คำตอบ:


25
mysqladmin shutdown

ควรทำงานเพื่อปิดเซิร์ฟเวอร์

ฉันเห็นความเป็นไปได้สองประการ:

  1. MySQL มีปัญหาและปฏิเสธที่จะปิดตัวลงด้วยเหตุผลบางประการ
  2. ผู้ดูแลระบบคนก่อนทำสิ่งที่แปลก อาจแก้ไขสคริปต์ init.d หรือไม่ต้องกังวลกับแพคเกจ Debian เลยเพื่อติดตั้ง MySQL

สิ่งที่ไม่dpkg --list mysql\*พูด?

/var/log/mysql.err พูดว่าอะไร? หรือบันทึก MySQL อื่น ๆ ?

แก้ไข:

ดังนั้นmysqladmin shutdownการทำงาน?

ตามนั้นแพ็คเกจ mysql-server ได้รับการติดตั้ง (mysql-server-5.0; แพ็คเกจ mysql-server น่าจะเป็นแค่สตับ) ดังนั้นพวกเขาอาจติดตั้งมากกว่านั้น? การวิ่งdebsums mysql-server-5.0อาจบอกคุณมากกว่านี้ dpkg --listfiles mysql-server-5.0สามารถช่วยได้เช่นกัน ...

มีอะไรใน /etc/init.d/mysql? ฉันไม่ได้ตรวจสอบแพ็คเกจเฉพาะรุ่น แต่ควรลองใช้mysqladmin shutdown... บางทีคุณอาจโชคดีและมีปัญหา ...


ไชโยเพิ่มข้อมูลเพิ่มเติมลงในโพสต์
Derek Organ

ฉันสงสัยว่าพวกเขาไม่ได้ใช้แพ็คเกจ Debian เพื่อติดตั้ง mysql
Derek Organ

บางคนใช้แพ็คเกจ Debian หนึ่งครั้งเป็นอย่างน้อย พวกเขาอาจจะได้รวบรวมจากแหล่งที่มาและเขียนทับไฟล์ที่เกิดขึ้นจริงหรือยากจนนั้นบางวิธีอื่น ๆ ...
Freiheit

22

ทำไมสิ่งนี้จึงเกิดขึ้น

นี่เป็นปัญหาที่พบบ่อยหากคุณนำเข้า mysql และเขียนทับฐานข้อมูล mysql เองเช่นเมื่อคุณอาจกู้คืนจากข้อมูลสำรอง mysqldump -A

นี่เป็นสิ่งที่ดี: คุณอาจต้องการสำรองข้อมูลผู้ใช้ mysql, การอนุญาต, และอื่น ๆ - แต่มันสามารถสร้างความหายนะด้วยสิ่งต่างๆเช่นผู้ใช้ debian-sys-maint ที่ใช้เพื่อปิด mysql อย่างหมดจด

แม้ว่าฐานข้อมูลใหม่นี้อาจจะเปลี่ยนทั้งรหัสผ่านรูทและรหัสผ่านของเดเบียน - sys-maint แน่นอนว่ามันจะไม่เปลี่ยนรหัสผ่านของเดเบียนที่คาดไว้โดยอัตโนมัติใน /etc/mysql/debian.cnf อันที่จริงแล้วถ้าคุณไม่ได้สำรองไฟล์ไว้ด้วยคุณอาจไม่รู้ด้วยซ้ำว่ารหัสผ่านนั้นคืออะไรอีกต่อไป!

รีเซ็ตรหัสผ่านรูท mysql (เป็นทางเลือก)

สิ่งแรกก่อน หากรหัสผ่าน root ของ mysql แตกต่างกันระหว่างเซิร์ฟเวอร์เก่ากับเซิร์ฟเวอร์ใหม่คุณสามารถใช้ mysqladmin เพื่อแก้ไขได้:

mysql -p -u root password 'newpassword'

อย่างไรก็ตามเมื่อคุณได้ติดตั้ง mysql-server มันอาจจะถามคุณเกี่ยวกับรหัสผ่าน root mysql ใหม่และคุณอาจใช้รหัสเดิมที่เคยใช้มาก่อน

แก้ไขรหัสผ่าน debian sys

ดังนั้นตอนนี้ค้นหา debian sys ดูแลรหัสผ่านที่ debian สร้างขึ้นสำหรับคุณเมื่อคุณติดตั้งบนเซิร์ฟเวอร์ใหม่ (คุณต้องใช้ sudo เพราะควรเป็นไฟล์ที่มีการป้องกันสูง)

sudo cat /etc/mysql/debian.cnf

ตอนนี้เข้าสู่ mysql โดยใช้รหัสผ่านรูทที่คุณตั้งไว้ด้านบน:

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

รีเซ็ตรหัสผ่านสำหรับผู้ใช้ debian-sys-maint และอย่าลืมลบสิทธิ์:

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

ทดสอบเพื่อให้แน่ใจว่าใช้งานได้:

sudo /etc/init.d/mysql restart

เคล็ดลับด่วน

หากคุณจำเป็นต้องรีเซ็ตรหัสผ่านรูทสำหรับเซิร์ฟเวอร์โดยไม่ต้องทำการดาวน์เซิร์ฟเวอร์บัญชีผู้ใช้นี้มีสิทธิ์ใช้งาน - เพียงแค่วางไฟล์ debian.cnf แล้วลงชื่อเข้าใช้กับผู้ใช้นั้น NB ปกป้องบัญชีผู้ใช้นี้เหมือนกับรูท


2
ขอบคุณ Jamieson สิ่งนี้อาจช่วยฉันชั่วโมงทำงาน
slhck

1
ยอดเยี่ยมและยินดีต้อนรับโดยสิ้นเชิง! ฉันต้องถอยกลับไปที่ไฟล์นั้นบ่อยกว่าที่ฉันต้องการยอมรับ;)
Jamieson Becker

1
คำตอบที่ยอดเยี่ยม การนำเข้าดัมพ์ฐานข้อมูล (และด้วยรหัสผ่านรูท) เป็นเหตุผลในกรณีของฉัน ข้อแตกต่างคือไฟล์ debian.cnf ของฉันใช้ผู้ใช้ mysql "root" แทน "debian-sys-maint" ฉันแค่ใส่รหัสผ่านรูทใน debian.cnf และตอนนี้ฉันสามารถควบคุม mysql ผ่าน "service mysql <command>"
Tomasz P. Szynalski

6

อีก 2 คำแนะนำ:

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

นี่จะแสดงคำสั่งที่ดำเนินการโดยสคริปต์เริ่มต้น

ติดตั้ง debsums แพคเกจและคุณสามารถทดสอบแพคเกจที่มีการปรับเปลี่ยน (ตรวจสอบยังมีให้สำหรับ RPM แต่ IMHO ทำงานได้ดีขึ้น)


1
ฉันมีปัญหาเดียวกับ OP และใช้คำสั่งนี้แนะนำ"Access denied for user 'debian-sys-maint'@'localhost'"ซึ่งถูกต้องอย่างแน่นอน: ฐานข้อมูล mysql ของฉันยังไม่ได้กำหนดสิทธิ์ใด ๆดังนั้นจึงmysql stopไม่มีสิทธิ์ในฐานข้อมูลตัวเองเพื่อปิด คู่มือmysqladmin shutdownทำงานอย่างสมบูรณ์
jevon

5
pkill mysql

จะทำงานแน่นอน


นี่คือสิ่งที่ฉันแก้ไขคำถามของฉัน "การหยุดเซิร์ฟเวอร์ฐานข้อมูล mysql mysqld ล้มเหลว" คุณควรจะได้รับคะแนนล้าน!
Hans Wassink

2

สมมติว่าแพ็กเกจนั้นค่อนข้างแปลกปัญหาอาจเป็นไฟล์ pid ฉันสงสัยว่าแพ็คเกจใหม่หรือการติดตั้งที่คอมไพล์ไม่ได้สร้าง / var / run / mysql / หรืออะไรก็ตามที่เป็นมาตรฐานใน Debian สำหรับไฟล์ pid ที่จะเขียนหรือสคริปต์ init กำลังมองหาไฟล์ mysqld.pid ในที่อื่น หากคุณสามารถแก้ไขสิ่งที่ไฟล์ init / pid ไม่ตรงกันอาจเป็นไปได้


สคริปต์ init ไม่ได้ใช้ไฟล์ pid เพื่อหยุดเซิร์ฟเวอร์
theotherreceive

2

สคริปต์การปิด mysql ใช้ผู้ใช้ debian-sys-maint เพื่อเรียกใช้ 'mysqladmin shutdown' โดยการอ่านรหัสผ่านสำหรับผู้ใช้จาก /etc/mysql/debian.cnf คุณควรตรวจสอบว่าไฟล์นี้มีอยู่และคุณสามารถรันการปิด mysqladmin ในฐานะผู้ใช้รายนี้


1

ในทางเทคนิคคุณสามารถปิดท้ายด้วย:

pkill -9 mysqld

แต่คุณอาจสูญเสียข้อมูล?

คุณอาจจะดีกว่าถามคนที่ http://www.serverfault.com


ฉันตระหนักถึงการทำเช่นนั้น แต่ defo ไม่ใช่สิ่งที่ฉันต้องการทำอย่างสม่ำเสมอ
Derek Organ

1

การใช้ "pkill mysql" อาจทำให้ข้อมูลของคุณสูญเสียโดยเฉพาะหากเรียกว่า "pkill -9" :(

ฉันขอแนะนำให้ใช้ 'sh -x' เพื่อดูว่าปัญหาของสคริปต์ init อาจเป็นอย่างไรและคุณสามารถเข้าไปดูบันทึกข้อผิดพลาดสำหรับ MySQL (/ var / log / mysql หรือ / var / lib / mysql ได้ ขึ้นอยู่กับการตั้งค่า) เพื่อดูว่ามันติดอยู่ในคิวรีที่รันมานานมาก ๆหรือบางสิ่งบางอย่างและยังไม่เต็มใจที่จะออกอย่างสง่างามเลยทีเดียว


1

เพื่อติดตามความคิดเห็นเกี่ยวกับคำถามของคุณฉันจะเขียนคำตอบแบบเต็ม:

ปัญหาคือว่าซ็อกเก็ตเริ่มต้นอยู่/tmp/mysql.sockกับแหล่ง MySQL และ/var/run/mysqld/mysqld.sockไบนารีเดเบียน

การแก้ปัญหาคือการแก้ไขปัญหาเส้นทางซ็อกเก็ตในโดยการให้ที่ดี/etc/mysql/debian.cnf socket=หรือโดยการรักษามัน แต่จากนั้นเปลี่ยนสิ่ง/etc/mysql/my.cnfต่อไปนี้

นี่คือวิธีที่ฉันค้นพบสิ่งนี้: ใน/etc/init.d/mysqlเมื่อมีข้อความ«ล้มเหลว»คุณมีบรรทัดนี้ชื่อ:

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

นี้ชี้ให้ฉันไปซึ่งเป็น$MYADMIN ping mysqladmin --defaults-file=/etc/mysql/debian.cnf pingการรันคำสั่งนี้จบลง:

/ usr / bin / mysqladmin: การเชื่อมต่อกับเซิร์ฟเวอร์ที่ 'localhost' ล้มเหลว

ข้อผิดพลาด: 'ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต' /var/run/mysqld/mysqld.sock '(2)'

ตรวจสอบว่า mysqld ทำงานอยู่และซ็อกเก็ต: '/var/run/mysqld/mysqld.sock' นั้นมีอยู่!

ดังนั้นฉันจึงดู/etc/mysql/debian.cnfและพบว่าเป็นซ็อกเก็ตที่ไม่ดี


0

ใช้คำสั่งต่อไปนี้:

$ mysqladmin ปิดตัวลง

ควรมีอยู่ในไดเรกทอรี / usr / bin ในกรณีของคุณ


0

คุณต้องเป็นผู้ใช้ขั้นสูงเพื่อเริ่มหยุด mysql (และบริการอื่น ๆ ส่วนใหญ่) ในเดเบียน

ไม่แน่ใจว่าคุณมีอยู่แล้วหรือไม่ ... ถ้าไม่คุณต้องทำอย่างใดอย่างหนึ่ง

  • เข้าสู่ระบบในฐานะ root
  • วาง sudo ไว้หน้า /etc/init.d/mysql restart คำสั่ง (มันจะถามรหัสผ่านของคุณและคุณจะต้องอยู่ในกลุ่ม sudoers)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.