MySQL ขัดข้อง: InnoDB: ไม่สามารถล็อค. / ibdata1 ข้อผิดพลาด: 11


43

ฉันมีเว็บเซิร์ฟเวอร์อย่างง่าย (Debian 6.0 x86, DirectAdmin พร้อมหน่วยความจำ 1 GB และยังมีพื้นที่ว่าง 10 GB, mySQl รุ่น 5.5.9) แต่เซิร์ฟเวอร์ mySQL ยังคงทำงานล้มเหลวและฉันต้องฆ่ากระบวนการ mySQL ทั้งหมดเพื่อให้สามารถรีสตาร์ทได้ อีกครั้ง

/var/log/mysql-error.log เอาท์พุท:

130210 21:04:26 InnoDB: Using Linux native AIO
130210 21:04:34 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:05:42 InnoDB: Completed initialization of buffer pool
130210 21:05:48 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:22 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:27 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:06:29 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:07:22 InnoDB: Completed initialization of buffer pool
130210 21:07:51 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:08:33 InnoDB: Completed initialization of buffer pool
130210 21:12:03 [Note] Plugin 'FEDERATED' is disabled.
130210 21:12:47 InnoDB: The InnoDB memory heap is disabled
130210 21:12:47 InnoDB: Mutexes and rw_locks use InnoDB's own implementation
130210 21:12:47 InnoDB: Compressed tables use zlib 1.2.3
130210 21:12:47 InnoDB: Using Linux native AIO
130210 21:13:11 InnoDB: highest supported file format is Barracuda.
130210 21:13:23 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130210 21:14:05  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
130210 21:17:53  InnoDB: Unable to open the first data file
InnoDB: Error in opening ./ibdata1
130210 21:17:53  InnoDB: Operating system error number 11 in a file operation.

ฉันได้พบหัวข้อในเว็บไซต์ mySQL ที่นี่แต่ไม่มีวิธีแก้ปัญหาสำหรับมัน

ความคิดใด ๆ ใคร


และ MySQL รุ่นนี้คืออะไร?
Michael Hampton

ฉันไม่เข้าใจส่วนนี้ของล็อกไฟล์จะบอกเกี่ยวกับปัญหากับ MySQL ที่เริ่มต้นไม่เกี่ยวกับสาเหตุของข้อผิดพลาด สิ่งที่ดีที่สุดคือการลบแหล่งที่มาของปัญหา
Krzysztof Księżyk

@MichaelHampton โพสต์ได้รับการแก้ไข (mySQL เวอร์ชั่น 5.5.9 และเพิ่มการบันทึก)
Devator

1
คุณตรวจสอบว่าไม่มีการเรียกใช้ mysqld ก่อนที่จะเริ่มหรือไม่ อย่างไร?
symcbean

คำตอบ:


32

อีกวิธีจากความคิดเห็นหนึ่งในบล็อกเดียวกัน:

สิ่งนี้ช่วยฉัน:

lsof -i: 3306

จากนั้นฆ่ามัน (หมายเลขกระบวนการ)

kill -9 PROCESS

เช่น kill -9 13498

จากนั้นลองรีสตาร์ท MySQL อีกครั้ง

ผ่านhttp://www.webhostingtalk.com/archive/index.php/t-1070293.html


1
service mysql restartแสดงว่าไม่มีกระบวนการทำงานอยู่ แต่lsofพบแล้ว ฆ่ามันservice mysql startและตอนนี้น้ำท่วมกระบวนการของอีเมลล้มเหลวสามารถหยุด ขอบคุณมาก.
Doyle Lewis

28

ด้วยอูบุนตู 14.04 ฉันประสบปัญหานี้เมื่อพยายามรีสตาร์ทผ่าน

/etc/init.d/mysql restart

ลองแทน

service mysql restart 

1
ขอบคุณมันช่วยได้ แต่ทำไม
เกินไป


@too หากคุณมีทั้งสคริปต์ init.d แบบเก่าและการกำหนดค่าแบบพุ่งพรวดสำหรับงานคุณต้องใช้service job startมิฉะนั้นถ้าคุณเริ่มต้นด้วยสคริปต์ init.d การพุ่งพรวดจะไม่ทราบและสามารถลองได้ เพื่อบู๊ตอินสแตนซ์อื่น (อย่างน้อยก็เป็นกรณีที่มีสคริปต์เริ่มต้นของ MySQL)
wireman

@wireman: นั่นอธิบายว่าทำไมแพ็คเกจอื่น ๆ รวมถึงปม (เซิร์ฟเวอร์ DNS) มีปัญหาที่คล้ายกัน เมื่อพวกเขาตัดสินใจบังคับใช้มัน? ฉันคิดว่า /etc/init.d นั้นเหนือกว่าเพราะมันช่วยให้เชลล์สมบูรณ์ดังนั้นจึงช่วยให้ผู้ใช้ไม่ต้องพิมพ์มากเกินไป ความคืบหน้าในการใช้พลังของ -1 :)
เกินไป

@too Bash เสร็จสามารถปรับแต่งได้ ไม่มีอะไรที่อูบุนตูมีประโยชน์ แต่ดูเหมือนแปลกที่ไม่มีใครคิดserviceชื่อแท็บ อาจส่งคำขอคุณลักษณะไปยัง Canonical ผ่านเครื่องมือติดตามบั๊ก
CVn

18

สาเหตุที่พบบ่อยที่สุดของปัญหานี้คือพยายามเริ่ม MySQL เมื่อมันทำงานอยู่

เมื่อต้องการแก้ไขมันฆ่าปิดกรณีใด ๆ การทำงานของ MySQL service mysql startและแล้วเริ่มต้นใหม่ได้ใช้สคริปต์เริ่มต้นปกติของคุณเช่น

อย่าพยายามเริ่ม MySQL ด้วยตนเองเมื่อใช้รุ่นที่จัดจำหน่ายแบบกระจายเว้นแต่ว่าคุณพร้อมสำหรับโลกที่เจ็บปวด


however the mySQL server keeps crashing- ฉันไม่เริ่ม mySQL ใหม่ มันก็ล่มเองหลังจากนั้นฉันต้องรีสตาร์ทมันอย่างชัดเจน ;-)
Devator

@MichaelHampton คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับ 'โลกแห่งความเจ็บปวด' และ 'เริ่ม MySQL ด้วยตนเอง' ได้หรือไม่ ขอบคุณ)
Serge Kvashnin

11

วิธีการแก้

ทำสำเนาของไฟล์ดั้งเดิม (ibdata1, ib_logfile0, ib_logfile1 ... )

mv ibdata1 ibdata1.bak 
cp -a ibdata1.bak ibdata1

http://cglreport.zhenhua.info/2008/08/mysql-error-unable-to-lock-ibdata1.html


ช่วยฉันด้วยเวทย์มนตร์
nils petersohn

จุด cp -a คืออะไรฉันได้อ่าน man page แล้ว
Ilja

2
ขอบคุณมากมันช่วยได้ แต่ทำไม
DaviAragao

ฉันมีปัญหานี้หลังจากรีสตาร์ทล้มเหลวบน db ที่ทำงานในคอนเทนเนอร์นักเทียบท่า ฉันคาดเดาอย่างมีเหตุผลว่าทำไมมันถึงใช้งานได้และเป็นที่เก็บข้อมูลเมตาบางส่วนในไฟล์ ย้ายและคัดลอกไปยังตำแหน่งเดิมลบข้อมูลเมตาที่ระบุว่าถูกล็อค การดำเนินการ -a รักษาคุณสมบัติของไฟล์รวมถึงแอตทริบิวต์ที่เกี่ยวข้องกับ SELinux แต่ไม่ใช่ข้อมูลเมตาระหว่างการคัดลอก
JDL

2

สิ่งนี้ช่วยฉันแก้ปัญหา:

ลบไฟล์ ibdata ทั้งหมดและปล่อยให้ mysql สร้างขึ้น

หยุด mysql:

service mysql stop

ไปที่คลัง mysql:

cd /var/lib/mysql/

ย้ายไฟล์ innodb ไปที่ไหนสักแห่งในกรณีที่คุณต้องการ:

mv ib* /root/

เริ่ม mysql:

service mysql start

การเลื่อนดูคำตอบที่เป็นประโยชน์ฉันคิดว่านี่จะดูเหมือนว่าจะใช้งานได้เนื่องจากข้อผิดพลาดกำลังบ่นว่าไม่สามารถล็อคไฟล์นั้นได้ หลังจากเคลื่อนไหว mysql ก็สร้างมันขึ้นมาใหม่ แต่ก็ยังบ่นอยู่ ... บ้าคลั่ง!
Kyle Burkett

1

มาที่นี่จาก googling ของข้อผิดพลาดการทำซ้ำเดียวกัน แต่มีรหัสข้อผิดพลาด 13 ( InnoDB: Unable to lock ./ibdata1, error: 13) หลังจากลองใช้วิธีแก้ปัญหามากมายในอินเทอร์เน็ตคิดค้นวิธีแก้ปัญหาที่ช่วยฉันได้ (apparmor!)

เพิ่มบรรทัดเหล่านี้ในการกำหนดค่า/etc/apparmor.d/usr.sbin.mysqld(และโหลด apparmor และ mysql แน่นอน):

/path/to/mysql/data/ r,
/path/to/mysql/data/** rwk,

ความแตกต่างที่สำคัญระหว่างการแก้ไขบ่อยครั้ง: กฎสองข้อ (สำหรับผู้ใช้เองและสำหรับไฟล์ทั้งหมดที่อยู่ภายในให้จดคู่**) และkตัวเลือกเพื่ออนุญาตให้ mysql ล็อคไฟล์

หวังว่าจะช่วยคนได้


/etc/apparmor.d/local/usr.sbin.mysqldนอกจากนี้คุณยังสามารถเพิ่มไปยัง สร้างไฟล์หากไม่มีอยู่ สำหรับรายละเอียดเพิ่มเติมโปรดดู/etc/apparmor.d/local/README
knb

1

ตรวจสอบพื้นที่เพื่อให้แน่ใจว่าเป็น 100%

df -h

ราวกับว่ามันเต็มมันจะไม่สร้างไฟล์. ถุงเท้า


คำตอบนั้นเกี่ยวกับผลข้างเคียงที่น่าแปลกใจฉันไม่เห็นด้วยอย่างยิ่งที่จะเป็น LQ
user259412

0

โปรดตรวจสอบว่าคุณมีpid-fileพารามิเตอร์ใน[mysql]ส่วนของ my.cnfไฟล์ หากไม่มีอยู่unable to lock ...ibdata1.. error:1จะเกิดขึ้น


0

เรียบง่าย แต่เร็วกว่าด้วย "cp -a" และช่วยเมื่อ "cp -a" และทุกอย่างอื่นไม่สามารถทำได้

  1. service mysql stop && pkill -f mysql

กำจัดกระบวนการ mysql ทั้งหมด

  1. vi /etc/mysql/my.cnf

เปลี่ยนพารามิเตอร์ datadir = / var / lib / mysql เป็น datadir = / var / lib / mysql2 (หรือเพิ่มถ้าคุณไม่มี)

  1. mv /var/lib/mysql /var/lib/mysql2

เปลี่ยนชื่อ datadir เป็นชื่อใหม่

  1. service mysql start

เตรียมแทมบูรีนของคุณ


0

หากวิธีการอื่นไม่สามารถใช้งานได้ปัญหาอาจเกิดจากการกำหนดค่าผิดพลาดของ AppArmor

ดังนั้นเพียงทำ:

$ apt install apparmor-profiles

จากนั้นรีสตาร์ท MySQL (สังเกตว่าจะรีสตาร์ทเร็วแค่ไหน)

ฉันสังเกตเห็นไฟล์ที่ขาดหายไปซึ่งเกี่ยวข้องกับ AppArmor เมื่อทำ:

$ systemctl status mysql.service

ดังนั้นทำไมฉันคิดว่ามีบางอย่างผิดปกติกับการกำหนดค่าของ AppArmor

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