“ ไม่สามารถวางไข่กระบวนการหลัก mysql: ไม่สามารถดำเนินการ: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว”


56

ฉันเป็นมือใหม่บนพื้น MySQL ดังนั้นทนกับฉัน

ฉันเพิ่งทำการอัพเกรด 11.10 ถึง 12.04

ดูเหมือนว่าทุกอย่างจะทำงานโดยไม่มีอาการสะอึกและซอฟต์แวร์และการตั้งค่าทั้งหมดของฉันทำงานได้ดี นอกเหนือจาก MySQL

เมื่อฉันลอง:

sudo start mysql

ฉันได้รับข้อผิดพลาด:

start: Job failed to start

ฉันจะวินิจฉัยปัญหาได้ที่ไหน และ (หวังว่า) - จะแยกออกได้อย่างไร?

(ฉันปิดการใช้งานโดยอัตโนมัติเริ่มทำตามคำแนะนำที่นี่หากมีความสำคัญ)


อัปเดต 1:

ทั้งผลลัพธ์ของ:

cat /var/log/mysql.err 
cat /var/log/mysql.log

ว่างเปล่า

ผลลัพธ์ของdmesg | grep mysql:

[ 1401.785141] type=1400 audit(1335619832.181:25): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=16165 comm="apparmor_parser"
[ 1401.791089] init: Failed to spawn mysql main process: unable to execute: No such file or directory

อัปเดต 2:

ตามที่ระบุโดย AWinter ด้านล่าง - ดูเหมือนว่า MySQL จะหายไปโดยอัตโนมัติหลังจากอัปเกรดและต้องติดตั้งใหม่

คำตอบ:


48

ตรวจสอบว่าถอนการติดตั้งแพ็คเกจ mysql-server-5.1 ดูเหมือนว่าอาจยังคงมีอยู่หลังจากการอัพเกรด ฉันมีข้อผิดพลาดเดียวกันและต้องล้างเซิร์ฟเวอร์ MySQL 5.1 และ 5.5 แล้วติดตั้งใหม่

ก่อนอื่นให้ทำการสำรองข้อมูลไดเรกทอรี / var / lib / mysql / ของคุณเพื่อความปลอดภัย

sudo cp -R /var/lib/mysql/ ~/mysql

ล้างข้อมูล MySQL ถัดไป (การดำเนินการนี้จะลบ php5-mysql และ phpmyadmin รวมถึงไลบรารีอื่น ๆ อีกจำนวนหนึ่งดังนั้นเตรียมติดตั้งใหม่อีกครั้งหลังจากนี้

sudo apt-get purge mysql-server-5.1 mysql-common

ลบโฟลเดอร์ / etc / mysql / และเนื้อหา

sudo rm /etc/mysql/ -R

ตรวจสอบต่อไปว่าไฟล์ฐานข้อมูลเก่าของคุณยังคงอยู่ใน / var / lib / mysql / หากไม่ได้คัดลอกไฟล์เหล่านั้นกลับเข้าไปในโฟลเดอร์จากนั้น chown root: root

(เรียกใช้สิ่งเหล่านี้หากไฟล์ไม่มีอยู่อีกต่อไป)

sudo mkdir /var/lib/mysql/
sudo chown root:root /var/lib/mysql/ -R
sudo cd ~/mysql/
sudo cp * /var/lib/mysql/ -R

ติดตั้งเซิร์ฟเวอร์ mysql ต่อไป

sudo apt-get install mysql-server

ในที่สุดติดตั้งแพคเกจที่ขาดหายไปเช่น phpmyadmin และ php5-mysql


1
ยอดเยี่ยม ทำงานเป็นเสน่ห์ ทำงานทั้งหมดอีกครั้ง One note: ฉันไม่ต้องลบไดเรกทอรีนี้sudo rm /etc/mysql/ -R- มันไม่ได้อยู่ในกรณีของฉัน อย่างไรก็ตามโชคดีที่มันเป็นเพียงการติดตั้งในเครื่องเพื่อทดสอบ Wordpress .. สงสัยว่าจะเกิดอะไรขึ้นบนเซิร์ฟเวอร์จริง o_O
radek

apt-get - ติดตั้งติดตั้ง mysql-server-xx อีกครั้งสำหรับฉัน
Yashima

สิ่งนี้ใช้ได้สำหรับฉัน แต่ฉันน่าจะทำapt-get updateมาก่อนเพราะลบ dovecot และ php5-mysql ฉันสามารถติดตั้งใหม่ได้หลังจากการอัพเดต เมื่อฉันได้ทำทุกอย่างทำงานได้ดีอีกครั้ง
AntonChanning

ฉัน-bash: cd: /var/lib/mysql/: Permission deniedใช้และใช้งานsudo -iไม่ได้
Charlotte

@ LittleBigBot ฉันทำการเปลี่ยนแปลงที่ควรแก้ไข
AWinter


12

ฉันมีปัญหาเดียวกันนี้และสำหรับฉันมันเป็น InnoDB logfiles มีขนาดแตกต่างจาก mysql ที่คาดหวังและล้มเหลวอย่างเงียบ ๆ ระหว่างการอัพเกรด

ฉันมีไฟล์กำหนดค่าแบบกำหนดเองที่ถูกลบออกจากการอัพเกรดเป็น 12.04 ซึ่งตั้งค่าขนาดไฟล์บันทึกเป็นอย่างอื่นนอกเหนือจากการกำหนดค่าเริ่มต้น

คุณต้องลบไฟล์: / var / lib / mysql / ib_logfile *

หลังจากที่ไฟล์หายไปตอนนี้ mysql สามารถเริ่มและสร้างไฟล์บันทึกใหม่ตามขนาดเริ่มต้น


การเล่นชนิดหนึ่ง ในกรณีของเรา dev ได้เปลี่ยนแปลงการตั้งค่าบางอย่างสำหรับ innodb (และทั้งเขาและฉันก็ไม่ทราบว่าอาจทำให้เกิดปัญหา) สิ่งนี้ทำให้ไม่สามารถเริ่ม mysql ได้ การลบไฟล์ปรับแต่งเหล่านั้นอนุญาตให้ MySQL เริ่มทำงาน
gaoshan88

Bingo - เปลี่ยนการตั้งค่า config สำหรับ innodb_log_file_size
tweak2

9

ข้อผิดพลาดส่วนใหญ่จะปรากฏขึ้นโดยเริ่มต้นเซิร์ฟเวอร์ในโหมด verbose non-daemon และดูผลลัพธ์:

sudo mysqld --verbose

7

ฉันมีปัญหาเดียวกัน แต่ไม่มีคำตอบข้างต้นช่วยฉันได้ ดังนั้นเป็นความหวังสุดท้ายฉันจึงพยายามเพิ่มพื้นที่ว่างในดิสก์ ฉันเพียงแค่ลบไฟล์บันทึกที่ไม่จำเป็นออกจาก / var / log ซึ่งเพิ่มพื้นที่ว่าง 2.5G จากนั้น MySQL ก็เริ่มตามปกติ


ใช่นี่เป็นปัญหาของฉันเช่นกัน mysql ไม่เริ่มทำงานในระหว่างการบูทเครื่องเนื่องจากเคยเป็นมา ต่อมาคือข้อมูลระบบที่แสดงผลไปยังเทอร์มินัล "การใช้งาน /: 95.1%" ดังนั้นพื้นที่ว่างไม่เพียงพอที่จะเริ่ม mysql (และกระบวนการอื่น ๆ ) ฉันต้องทำการล้างไฟล์และ mysql ก็เริ่มทำงานโดยไม่มีปัญหา
Screenack

นี่เป็นกรณีของฉัน การล้างข้อมูลบนดิสก์และ Mysql เริ่มทำงาน
Sergey Romanov

5

บางครั้งสิ่งนี้เกิดขึ้นและแม้ว่าจะมีปัญหาที่แตกต่างกันสองสามข้อที่อาจทำให้ mysql ไม่เริ่มต้นฉันจะเขียนบางสิ่งที่พบได้บ่อยที่สุดที่ฉันรู้จัก:

หมายเหตุ - เนื่องจากการอธิบายปัญหาที่พบบ่อยที่สุดฉันถือว่าคุณได้ลองลบและติดตั้งแล้วหรือเพียงแค่ติดตั้งบริการ mysql ใหม่เพื่อ:

เพื่อติดตั้ง - sudo apt-get install mysql-server mysql-client
เพื่อลบ - sudo apt-get remove mysql-server mysql-client
เพื่อกำจัด (ลบไฟล์ + กำหนดค่า) - sudo apt-get purge mysql-server mysql-client
ติดตั้งใหม่ -sudo apt-get install --reinstall mysql-server mysql-client

  1. my.cnfไฟล์ไม่ได้อยู่ในไดเรกทอรีเริ่มต้น มันควรจะเป็น (โดยค่าเริ่มต้น) จะอยู่ทั้งในหรือ/etc/my.cnf/etc/mysql/my.cnf

  2. มีพื้นที่ไม่เพียงพอในฮาร์ดไดรฟ์ที่มีไฟล์ข้อมูล mysql อยู่ หากฐานข้อมูลใหญ่เกินไปและรับฮาร์ดไดรฟ์ 100% บริการจะล้มเหลว

  3. หลังจากอัปเกรดแล้วให้ตรวจสอบว่าmy.cnfไฟล์อยู่ในตำแหน่งที่ถูกต้อง ขึ้นอยู่กับว่าคุณจะอัพเกรดหรือมาจากเวอร์ชั่นใดที่คุณอัพเกรดมาอาจเป็นใน/etc/my.cnfหรือ/etc/mysql/my.cnfตามที่กล่าวไว้ก่อนหน้านี้ ยังจำได้ว่าไฟล์ยังสามารถตั้งชื่อและไม่เพียงmysql.conf my.cnfเรื่องนี้เกิดขึ้นในกรณีที่คุณได้ดาวน์โหลดไบนารีจากmysql.com

  4. ทำ a dmesgเพื่อดูว่าบริการ mysql กำลังขว้างเป็นข้อความแสดงข้อผิดพลาดช่วยเนื่องจากจะให้ข้อผิดพลาดในการโหลด มันอาจพูดได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น หากคุณพิมพ์dmesgคนเดียวใน terminal มันจะแสดงให้คุณเห็นโลก สิ่งที่เราต้องการคือข้อมูลเกี่ยวกับ mysql ทำสิ่งนี้: dmesg | grep mysqlสิ่งนี้จะทำให้คุณมีบรรทัดที่มี mysql อยู่

  5. ตรวจสอบว่าไฟล์my.cnfหรือmysql.confถูกต้อง ใน 12.04 MySQL เป็นรุ่น 5.5 ใน 11.10 เป็นรุ่น 5.1 อาจมีการเปลี่ยนแปลงบางอย่างในไฟล์ conf (ยังไม่ได้ตรวจสอบจริง ๆ ) และอาจฟังดูงี่เง่า แต่แน่ใจว่าจะทำให้คุณมีปัญหา

  6. ข้อผิดพลาดที่เกี่ยวข้องกับปัญหาซ็อกเก็ตโดยทั่วไปเป็นความผิดของไฟล์my.cnfหรือmysql.confชี้ไปที่ผิดสถานที่ข้อผิดพลาดพวกเขามักจะแสดงเป็น:

    ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/var/run/mysqld/mysqld.sock'

    แหล่งที่มาอื่นของปัญหานี้เกี่ยวข้องกับmysqlไฟล์/etc/init.dที่ชี้ไปที่โฟลเดอร์ผิดเนื่องจากอาจใช้สคริปต์เก่ากว่าที่จำเป็นสำหรับ mysql จริงในระบบ (อาจปรับปรุงไม่ถูกต้องไม่เขียนทับ ไฟล์ปรับแต่ง ฯลฯ .. ) ดังนั้นเพียงแค่แก้ไขไฟล์สองไฟล์นี้และดูว่าพวกเขากำลังชี้ไปที่อื่นหรือไม่จากนั้นก็ทำsudo service mysql restartเพื่อตรวจสอบว่ามันใช้งานได้หรือไม่

  7. หากต้องการดูผลลัพธ์ข้อผิดพลาดเฉพาะของ mysql ให้ดีขึ้นให้ทำดังต่อไปนี้:

    cat /var/log/mysql.err- จะแสดงข้อผิดพลาด mysql ให้คุณ ฉันจะทำให้เป็นแบบนี้cat /var/log/mysql.err | lessถ้าคุณเห็นข้อมูลที่มากเกินไปเนื่องจากlessจะช่วยให้คุณเลื่อนดูผลลัพธ์ของcatมัน

    กันไปสำหรับcat /var/log/mysql.logถ้าคุณเห็นข้อผิดพลาดอาจมีวางไว้ในคำถามหรือเป็นความคิดเห็นจะช่วยตอบคำถามนี้ได้เร็วขึ้น

  8. หากคุณกำลังประสบปัญหาการเชื่อมต่อและบริการกำลังทำงานอยู่ลองดูว่าไฟร์วอลล์ของเซิร์ฟเวอร์อนุญาตการเชื่อมต่อผ่านพอร์ต 3306 (การเชื่อมต่อขาเข้า) หรือไม่ หลังจากนั้นตรวจสอบว่าเราเตอร์ (ถ้ามี) ยังไม่ได้ปิดกั้นพอร์ต 3306 โดยทั่วไปทำการทดสอบเครือข่ายเพื่อดูว่าปัญหาที่เกี่ยวข้องกับพอร์ตที่กำหนดให้กับ mysql นั้นมาจากไหน

ถ้าทั้งหมดเป็นสิ่งที่ดีเพื่อทดสอบว่าบริการ mysql กำลังทำงานอยู่หรือไม่ service mysql status

เป็นทางเลือกสุดท้าย หากคุณกำลังใช้งาน mysql อยู่ แต่คุณไม่สามารถเข้าสู่ระบบได้ให้ลองทำดังนี้

  1. หยุดเซิร์ฟเวอร์ MySQL:

    sudo /etc/init.d/mysql stop หรือ sudo service mysql stop

  2. เริ่มmysqldบริการด้วยตนเองด้วยการกำหนดค่าด้วยตนเอง

    sudo mysqld --skip-grant-tables &

    (อย่าลืมเพิ่ม & อื่นคุณจะต้องเปิดเทอร์มินัลอื่น & ส่งกระบวนการไปยังพื้นหลังและคุณสามารถฆ่าโดยใช้เทอร์มินัลเดียวกัน)

  3. เข้าสู่ระบบฐานข้อมูล MySQL เป็นROOT

    mysql -u root mysql

  4. พิมพ์สิ่งต่อไปนี้แทนที่MyPASSWORDด้วยรหัสผ่านใหม่ของคุณ

    UPDATE user SET Password=PASSWORD('MyPASSWORD') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;

นี่น่าจะเพียงพอสำหรับการเข้าสู่บริการ Mysql ของคุณในฐานะรูทอีกครั้ง หวังว่ามันจะช่วย


ขอบคุณสำหรับข้อเสนอแนะที่รวดเร็ว ไฟล์ my.cnf อยู่ใน/etc/mysql/my.cnfกรณีของฉัน ตำแหน่งนั้นถูกต้องหรือไม่ dmesgให้ผลลัพธ์ที่ดีเกินกว่าความเข้าใจของฉัน: / ฉันติดตั้ง 5.1 แล้ว - นั่นมีผลกระทบอะไรบ้าง?
radek

1
ไม่ต้องกังวลเกี่ยวกับตำแหน่งหากคุณพบไฟล์ ให้ฉันปรับปรุงคำตอบเพื่อให้ดูผลลัพธ์ mysql ใน dmesg ได้ดียิ่งขึ้น
Luis Alvarado

4

ฉันมีปัญหาเดียวกันหลังจากอัปเกรดเป็น Ubuntu Server 12.04 LTS กำลังทำงาน

sudo apt-get install mysql-server 

ก็เพียงพอที่จะแก้ไขแม้ว่ามันจะบ่นเกี่ยวกับฐานข้อมูลเก่าของ spotweb ฉันแก้ไขได้โดยลบ spotweb:

sudo apt-get purge spotweb

และกำหนดค่า MySQL ใหม่:

sudo dpkg-reconfigure mysql-server-5.5

4

ฉันจะเพิ่มกรณีนี้บางคนประสบปัญหาที่คล้ายกัน ฉันลองถอนการติดตั้งและติดตั้งใหม่ทั้งหมดเพื่อประโยชน์ กุญแจสำคัญในการค้นหาวิธีแก้ปัญหาคือพุ่งพรวดว่ามันบันทึกข้อผิดพลาดในโฟลเดอร์นี้

/ var / log / พุ่งพรวด /

สำหรับ mysql

/var/log/upstart/mysql.log

เมื่อฉันเปิดมันมีข้อความนี้

ข้อผิดพลาดตัวแยกวิเคราะห์ AppArmor สำหรับ /etc/apparmor.d/usr.sbin.mysqld ใน /etc/apparmor.d/tunables/global ที่บรรทัด 15: ไม่สามารถเปิด 'tunables / home'

เมื่อฉันดูในโฟลเดอร์/etc/apparmor.d/tunables/ฉันไม่มีไฟล์บ้านอยู่ในนั้นฉันจึงสร้างขึ้นใหม่

gedit /etc/apparmor.d/tunables/home และคัดลอกเนื้อหาจากคอมพิวเตอร์เครื่องอื่นซึ่งมีบรรทัดที่ไม่แสดงความคิดเห็นเหล่านี้

@ {HOME} = @ {HOMEDIRS} / * / / root /

@ {} HOMEDIRS = / home /

บางคนประสบปัญหาคล้ายกันที่นี่

https://bugs.launchpad.net/ubuntu/+source/mysql-5.5/+bug/982303

หลังจากนั้นฉันก็สามารถรีสตาร์ทบริการได้



1

หลังจากอัปเกรดฉันพบว่า mysql-server / mysql-server-5.5 ไม่ได้รับการติดตั้งและไม่ใช่ 5.1 ฉันเปลี่ยนชื่อ my.cnf เป็น my.cnf_old และฉันพยายามติดตั้ง mysql-serven ระหว่างการติดตั้งมีข้อผิดพลาดที่ไม่สามารถตั้งค่ารหัสผ่านรูทได้ หลังจากนี้ฉันตรวจสอบการกำหนดค่าของฉัน apparmor และอื่น ๆ ทั้งหมดดูเหมือนจะโอเค ความพยายามครั้งต่อไปของฉันคือการกำหนดค่า mysql-server ใหม่ แต่มันบ่นว่าแพคเกจไม่ได้ติดตั้งอย่างสมบูรณ์ ดังนั้นฉันตัดสินใจถอนการติดตั้งและในระหว่างนี้ apt-get แก้ไขแพคเกจและตอนนี้มันทำงาน ฉันไม่รู้ว่าทำไมเพราะฉันไม่มีอะไรเปลี่ยนแปลง


1

ฉันมีปัญหาที่คล้ายกัน แต่ได้รับการติดตามอย่างรวดเร็วเพื่อ apparmor ซึ่งฉันจำได้ว่าได้ให้ปัญหานี้กับฉันก่อนหน้านี้

หากคุณทำการเปลี่ยนแปลงการตั้งค่าเหล่านี้และระบบของคุณใช้ apparmor คุณอาจต้องปรับ /etc/apparmor.d/usr.sbin.mysqld ด้วย เช่น. เพิ่มบรรทัดเหล่านี้ (เพื่ออนุญาตให้ symlink ไปยัง my.cnf และเพื่อให้สามารถอ่านไฟล์ symlinked ได้):

/ usr / sbin / mysqld {... /etc/mysql/*.cnf lr, /path/to/symlinked/my.cnf r, ... }


1

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

จากนั้นฉันตัดสินใจที่จะลบ / ลบทุกสิ่งฉันถอนการติดตั้งเซิร์ฟเวอร์ MySQL และลบโฟลเดอร์ทั้งหมด (/ etc / mysql / และ / var / lib / mysql /) ในที่สุดต้องขอบคุณการเรียงลำดับแบบสุ่มที่ไม่ได้ให้ข้อผิดพลาดใด ๆ ระหว่าง ติดตั้งใหม่และฉันก็สามารถที่จะตั้งรหัสผ่านและเริ่มอินสแตนซ์ของเซิร์ฟเวอร์


0

ในเทอร์มินัลคุณสามารถติดตั้งอีกครั้งและทำให้มันรัน my.cnf คุณสามารถพิมพ์:

sudo apt-get install mysql-server-5.1
sudo apt-get --reconfigure mysql-server-5.1
sudo apt-get update
sudo start mysql my.cnf

มันอาจทำงานได้ด้วยวิธีนี้


0

ฉันกำลังมีปัญหาว่าการเพิ่มperformance_schemaภายใต้[mysqld]ใน/etc/mysql/my.confสาเหตุความล้มเหลวนี้ ลบบรรทัดนั้นและ mysql ก็สามารถเริ่มต้นได้อีกครั้ง

แก้ไข: ปรากฎ ram หนึ่งกิ๊กไม่เพียงพอที่จะเริ่ม mysqld โดยเปิดใช้งาน performance_schema ฉันชน 3 กิ๊กและทำงานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.