เอ็นจินหน่วยเก็บข้อมูลที่ไม่รู้จัก / ไม่รองรับ: InnoDB | MySQL อูบุนตู


45

ฉันเพิ่งอัพเกรดจาก LTS Ubuntu ไปเป็น Precise และตอนนี้ mysql ปฏิเสธที่จะเริ่ม มันบ่นของต่อไปนี้เมื่อฉันพยายามที่จะเริ่มต้น:

╰$ sudo service mysql restart
stop: Unknown instance:
start: Job failed to start

และสิ่งนี้แสดงใน "/var/log/mysql/error.log":

120415 23:01:09 [Note] Plugin 'InnoDB' is disabled.
120415 23:01:09 [Note] Plugin 'FEDERATED' is disabled.
120415 23:01:09 [ERROR] Unknown/unsupported storage engine: InnoDB
120415 23:01:09 [ERROR] Aborting

120415 23:01:09 [Note] /usr/sbin/mysqld: Shutdown complete

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


อนึ่งฉันได้รับ mysql เพื่อแสดงความคิดเห็นออกรายการ "skip_innodb" ใน my.cnf แต่ฉันค่อนข้างแน่ใจว่าฉันไม่ควรแก้ปัญหาด้วยวิธีนี้
Garrett

กรุณาแสดงตัวแปรทั้งหมดจาก my.cnf ที่มีการตั้งค่า
Innodb

คำตอบ:


34

หลังจากตรวจสอบบันทึกฉันพบข้อผิดพลาดต่อไปนี้:

[ERROR] Unknown/unsupported storage engine: InnoDB

ฉันลบไฟล์เหล่านี้:

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1 

ที่ /var/lib/mysql

วิธีนี้แก้ไขปัญหาของฉันหลังจากรีสตาร์ท


7
rmคำสั่งที่ใช้ในการลบไฟล์ที่มากกว่าการเปลี่ยนชื่อพวกเขาเท่าที่ฉันรู้ ...
Itai Ganot

2
ไฟล์เหล่านั้นมีข้อมูลจริงสำหรับฐานข้อมูลของคุณ คุณไม่ต้องการลบ
Stefan Lasiewski

ไม่ibdataไฟล์มีข้อมูล (ยกเว้นว่าคุณมีไฟล์ต่อตาราง) ไฟล์ ib_logfile เป็นบันทึกการเล่นซ้ำที่มีข้อมูลสำหรับธุรกรรมการเปลี่ยนแปลงฐานข้อมูลที่อาจอยู่ในกระบวนการเมื่อ / หากฐานข้อมูลขัดข้อง หากคุณสามารถปิดเซิร์ฟเวอร์ได้สำเร็จการลบไฟล์บันทึกเหล่านี้จะไม่ทำร้ายคุณ ถ้ามันล้มเหลวคุณต้องใช้มัน แต่นี่เป็นคำตอบที่ถูกต้อง หากไฟล์ my.cnf ของคุณเปลี่ยนแปลงตัวเลือก innodb_log_file_size และไฟล์ไม่ตรงกับสองไฟล์เหล่านี้อีกต่อไปคุณจะได้รับข้อความแสดงข้อผิดพลาดที่สถานะ OP ระบุ การลบ / ย้ายเพื่อให้ใหม่สามารถแก้ไขได้
Safado

2
ทำไมการแก้ไขเท่านั้นที่สามารถทำเวลา 5 นาทีเกินฉัน ... ฉันควรจะได้ระบุไว้ว่าจะเป็นศักยภาพการแก้ไขข้อผิดพลาดดังกล่าวข้างต้นที่กล่าวถึง ตามที่ระบุไว้โดย OP มันไม่ใช่การแก้ไขที่เขาต้องการ
Safado

1
mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bakคุณสามารถเปลี่ยนชื่อพวกเขาเช่น
kenorb

22

หากคุณต้องการจริงๆskip-innodb(ใช้กรณี: รอยความทรงจำต่ำ) แน่นอนว่าคุณไม่ต้องแสดงความคิดเห็น อย่างไรก็ตามหาก InnoDB เป็นเอ็นจิ้นการจัดเก็บข้อมูลเริ่มต้นเซิร์ฟเวอร์จะไม่สามารถเริ่มต้นได้จนกว่าคุณจะบอกให้เอ็นจิ้นการจัดเก็บข้อมูลใดที่จะใช้แทนเช่นdefault-storage-engine=myisamMyISAM

ดังนั้นลองทำสิ่งนี้:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam

5
ลองเพิ่ม "default-storage-engine = myisam" ใน /etc/mysql/my.cnf ในส่วน [mysqld]หากคุณต้องการมี "skip_innodb"
pincoded

ทำงานได้อย่างสวยงาม ไชโย!
Boann

4
ถ้าคุณต้องการการสนับสนุนจาก Innodb ล่ะ?
Nilzor

MariaDB บน Centos 7 เพิ่มdefault-storage-engine=myisamในไฟล์ /etc/my.cnf [mysqld]ภายใต้ นั่นเป็นการหลอกลวง ขอบคุณ
Damodar Bashyal

12

หากคุณใช้ MySQL 5.6+ และต้องการปิดการใช้งาน InnoDB อย่าลืม " --default-tmp-storage " ไม่เช่นนั้นจะไม่ทำงาน:

หากต้องการปิดใช้งาน InnoDB ให้ใช้ --innodb = OFF หรือ --skip-innodb ในกรณีนี้เนื่องจากเอ็นจิ้นการจัดเก็บข้อมูลเริ่มต้นคือ InnoDB เซิร์ฟเวอร์จะไม่เริ่มทำงานนอกจากว่าคุณจะใช้ --default-storage-engine และ --default-tmp-storage-engine เพื่อตั้งค่าเริ่มต้นเป็นเอนจิ้นอื่นสำหรับทั้งถาวรและ ตารางชั่วคราว

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#option_mysqld_ignore-builtin-innodb

คุณสามารถเพิ่มสิ่งนี้ลงใน my.cnf ของคุณ:

[mysqld] 
innodb=OFF 
ignore-builtin-innodb 
skip-innodb
default-storage-engine=myisam 
default-tmp-storage-engine=myisam

เพียงเพื่อให้แน่ใจว่ามันจะทำงาน


+1 ไม่ต้องสังเกตเอกสารทางการ มันควรจะตั้งค่า default-storage-engineและdefault-tmp-storage-engineขอบคุณ
Giberno

7

ตรวจสอบบันทึกข้อผิดพลาด mysql ของคุณ

tail -100 /var/log/mysql/error.log

หากบันทึกของคุณบอกว่า (เหมือนของฉัน):

InnoDB: การเตรียมใช้งานบัฟเฟอร์พูลขนาด = 128.0M
InnoDB: mmap (137363456 ไบต์) ล้มเหลว errno 12
[ข้อผิดพลาด] InnoDB: ไม่สามารถจัดสรรหน่วยความจำสำหรับบัฟเฟอร์พูลได้

คุณมีหน่วยความจำไม่เพียงพอที่จะใช้ขนาดบัฟเฟอร์เริ่มต้นที่ 128M

แก้ไขไฟล์ config /etc/mysql/my.cnfเพิ่มบรรทัดเพื่อระบุ innodb_buffer_pool_size ที่เล็กกว่า

# make the buffer pool smaller than 128M since we only have 1 GB of total RAM
innodb_buffer_pool_size = 16M

บันทึกไฟล์กำหนดค่าและเริ่ม mysql

sudo service mysql start

เป็นจุดที่นี่ แต่อาจเป็นกระบวนการที่ค้างของเว็บเซิร์ฟเวอร์หรือสิ่งที่กิน RAM ก็ตรวจสอบด้วยเช่นกัน
sjas

0

ลองอีก 2 อย่าง 1. ลดขนาดพูลบัฟเฟอร์ Innodb 2. แก้ไขสคริปต์เริ่มต้น mysql และเพิ่มตัวเลือก --innodb

ฉันยังสงสัยว่าแพ็คเกจของคุณมีราคาแพงหรือไม่ คุณลองรุ่นรองอื่นได้ไหม

นอกจากนี้ฉันคิดว่าเซิร์ฟเวอร์ mysql ของคุณได้รับการอัพเกรดเช่นกัน? บางทีรุ่นนั้นอาจจะเสีย? ความแม่นยำยังไม่สิ้นสุด


ได้ทำไปแล้วจะไม่มีผลกระทบ
Garrett

ขออภัยแก้ไขด้วยบางสิ่งที่ต้องลองอีกเช่นแพ็คเกจที่ไม่ดี ลองใช้เวอร์ชั่น mysql.com หรือ percona ซึ่งมีความเสถียรมากกว่า
johnshen64

ตรวจสอบให้แน่ใจว่าได้ลบแพ็คเกจเก่าทั้งหมดเมื่อติดตั้งแพ็คเกจใหม่แล้ว
johnshen64

การกำจัดแพ็คเกจจะทำให้ข้อมูลฐานข้อมูลสูญหายหรือไม่
การ์เร็ตต์

ไม่ควร แต่เพื่อความปลอดภัยคุณควรสำรองข้อมูล DBS ของคุณเสมอ
johnshen64

0

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

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