MySQL InnoDB เกิดความผิดพลาดหลังจากโพสต์


28

เช้านี้ MySQL ก็พบกับฉัน

ด้วยข้อยกเว้นของมาตรฐาน MySQL รวมฐานข้อมูลทุกอย่างที่ฉันใช้คือ InnoDB

ฉันพยายามรีสตาร์ท MySQL daemon แต่ล้มเหลวสองครั้ง

ฉันรีสตาร์ทเซิร์ฟเวอร์ทั้งหมดและ MySQL เริ่มต้นอย่างถูกต้องและทำงานได้ดีตั้งแต่นั้น

ไฟล์บันทึก mysqld สำหรับความผิดพลาดครั้งแรกมีดังต่อไปนี้:

120927 10:21:05 mysqld_safe Number of processes running now: 0
120927 10:21:06 mysqld_safe mysqld restarted
120927 10:21:12 [Note] Plugin 'FEDERATED' is disabled.
120927 10:21:12 InnoDB: The InnoDB memory heap is disabled
120927 10:21:12 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120927 10:21:12 InnoDB: Compressed tables use zlib 1.2.3
120927 10:21:12 InnoDB: Using Linux native AIO
120927 10:21:13 InnoDB: Initializing buffer pool, size = 4.0G
InnoDB: mmap(4395630592 bytes) failed; errno 12
120927 10:21:13 InnoDB: Completed initialization of buffer pool
120927 10:21:13 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120927 10:21:13 [ERROR] Plugin 'InnoDB' init function returned error.
120927 10:21:13 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120927 10:21:13 [ERROR] Unknown/unsupported storage engine: InnoDB
120927 10:21:13 [ERROR] Aborting

120927 10:21:13 [Note] /usr/libexec/mysqld: Shutdown complete

120927 10:21:13 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

เมื่อพยายามรีสตาร์ท daemon ไฟล์บันทึก mysqld จะมี:

120927 10:43:44 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120927 10:43:44 [Note] Plugin 'FEDERATED' is disabled.
120927 10:43:44 InnoDB: The InnoDB memory heap is disabled
120927 10:43:44 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120927 10:43:44 InnoDB: Compressed tables use zlib 1.2.3
120927 10:43:44 InnoDB: Using Linux native AIO
120927 10:43:44 InnoDB: Initializing buffer pool, size = 4.0G
InnoDB: mmap(4395630592 bytes) failed; errno 12
120927 10:43:44 InnoDB: Completed initialization of buffer pool
120927 10:43:44 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120927 10:43:44 [ERROR] Plugin 'InnoDB' init function returned error.
120927 10:43:44 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120927 10:43:44 [ERROR] Unknown/unsupported storage engine: InnoDB
120927 10:43:44 [ERROR] Aborting

120927 10:43:44 [Note] /usr/libexec/mysqld: Shutdown complete

120927 10:43:44 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

หลังจากเซิร์ฟเวอร์รีสตาร์ทไฟล์บันทึก mysqld ประกอบด้วย:

120927 10:46:11 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120927 10:46:11 [Note] Plugin 'FEDERATED' is disabled.
120927 10:46:11 InnoDB: The InnoDB memory heap is disabled
120927 10:46:11 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120927 10:46:11 InnoDB: Compressed tables use zlib 1.2.3
120927 10:46:11 InnoDB: Using Linux native AIO
120927 10:46:11 InnoDB: Initializing buffer pool, size = 4.0G
120927 10:46:11 InnoDB: Completed initialization of buffer pool
120927 10:46:12 InnoDB: highest supported file format is Barracuda.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
120927 10:46:12  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
120927 10:46:15  InnoDB: Waiting for the background threads to start
120927 10:46:16 InnoDB: 1.1.8 started; log sequence number 57665645675
120927 10:46:16 [Note] Event Scheduler: Loaded 0 events
120927 10:46:16 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.5.21-cll'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL) by Atomicorp

ฉันไม่เคยลองถอดรหัสไฟล์บันทึก MySQL ที่ขัดข้อง

ฉันใช้เวอร์ชัน: 5.5.21-cll MySQL Community Server (GPL) โดย Atomicorp

ความคิดใดที่ฉันควรเริ่มต้น

UPDATE: จากคำแนะนำของ @ Michael-sqlbot ฉันดึง syslog และพบสิ่งนี้:

Sep 27 10:20:58 ip-97-74-197-181 kernel: pcscd invoked oom-killer: gfp_mask=0xd0, order=0, oomkilladj=0
Sep 27 10:21:00 ip-97-74-197-181 kernel:
Sep 27 10:21:00 ip-97-74-197-181 kernel: Call Trace:
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff800c9f35>] out_of_memory+0x8e/0x2f3
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff8002dfc7>] __wake_up+0x38/0x4f
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff8000f67d>] __alloc_pages+0x27f/0x308
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff80017a84>] cache_grow+0x139/0x3c7
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff8005be28>] cache_alloc_refill+0x138/0x188
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff8000ad2e>] kmem_cache_alloc+0x6c/0x76
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff80012877>] getname+0x25/0x1c2
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff8001a04b>] do_sys_open+0x17/0xbe
Sep 27 10:21:00 ip-97-74-197-181 kernel:  [<ffffffff8005d28d>] tracesys+0xd5/0xe0
Sep 27 10:21:00 ip-97-74-197-181 kernel:
Sep 27 10:21:11 ip-97-74-197-181 kernel: Mem-info:
Sep 27 10:21:20 ip-97-74-197-181 kernel: Node 0 DMA per-cpu:
Sep 27 10:21:27 ip-97-74-197-181 kernel: cpu 0 hot: high 0, batch 1 used:0
Sep 27 10:21:38 ip-97-74-197-181 kernel: cpu 0 cold: high 0, batch 1 used:0
Sep 27 10:21:49 ip-97-74-197-181 kernel: cpu 1 hot: high 0, batch 1 used:0
Sep 27 10:21:49 ip-97-74-197-181 kernel: cpu 1 cold: high 0, batch 1 used:0
Sep 27 10:21:49 ip-97-74-197-181 kernel: cpu 2 hot: high 0, batch 1 used:0
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 2 cold: high 0, batch 1 used:0
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 3 hot: high 0, batch 1 used:0
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 3 cold: high 0, batch 1 used:0
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 DMA32 per-cpu:
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 0 hot: high 186, batch 31 used:60
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 0 cold: high 62, batch 15 used:57
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 1 hot: high 186, batch 31 used:139
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 1 cold: high 62, batch 15 used:61
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 2 hot: high 186, batch 31 used:47
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 2 cold: high 62, batch 15 used:57
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 3 hot: high 186, batch 31 used:52
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 3 cold: high 62, batch 15 used:53
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 Normal per-cpu:
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 0 hot: high 186, batch 31 used:29
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 0 cold: high 62, batch 15 used:17
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 1 hot: high 186, batch 31 used:178
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 1 cold: high 62, batch 15 used:52
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 2 hot: high 186, batch 31 used:22
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 2 cold: high 62, batch 15 used:59
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 3 hot: high 186, batch 31 used:71
Sep 27 10:21:52 ip-97-74-197-181 kernel: cpu 3 cold: high 62, batch 15 used:54
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 HighMem per-cpu: empty
Sep 27 10:21:52 ip-97-74-197-181 kernel: Free pages:       41728kB (0kB HighMem)
Sep 27 10:21:52 ip-97-74-197-181 kernel: Active:1031140 inactive:970428 dirty:0 writeback:0 unstable:0 free:10432 slab:4277 mapped-file:801 mapped-anon:1993003 pagetables:11636
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 DMA free:10096kB min:12kB low:12kB high:16kB active:0kB inactive:0kB present:9700kB pages_scanned:0 all_unreclaimable? yes
Sep 27 10:21:52 ip-97-74-197-181 kernel: lowmem_reserve[]: 0 2965 8015 8015
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 DMA32 free:24424kB min:4236kB low:5292kB high:6352kB active:1544164kB inactive:1428756kB present:3037024kB pages_scanned:7185900 all_unreclaimable? yes
Sep 27 10:21:52 ip-97-74-197-181 kernel: lowmem_reserve[]: 0 0 5050 5050
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 Normal free:7208kB min:7212kB low:9012kB high:10816kB active:2580172kB inactive:2453052kB present:5171200kB pages_scanned:12935183 all_unreclaimable? yes
Sep 27 10:21:52 ip-97-74-197-181 kernel: lowmem_reserve[]: 0 0 0 0
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
Sep 27 10:21:52 ip-97-74-197-181 kernel: lowmem_reserve[]: 0 0 0 0
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 DMA: 6*4kB 3*8kB 4*16kB 4*32kB 4*64kB 5*128kB 1*256kB 1*512kB 0*1024kB 0*2048kB 2*4096kB = 10096kB
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 DMA32: 24*4kB 3*8kB 1*16kB 1*32kB 1*64kB 3*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 5*4096kB = 24424kB
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 Normal: 0*4kB 13*8kB 8*16kB 0*32kB 19*64kB 1*128kB 2*256kB 0*512kB 1*1024kB 0*2048kB 1*4096kB = 7208kB
Sep 27 10:21:52 ip-97-74-197-181 kernel: Node 0 HighMem: empty
Sep 27 10:21:52 ip-97-74-197-181 kernel: 9391 pagecache pages
Sep 27 10:21:52 ip-97-74-197-181 kernel: Swap cache: add 5745145, delete 5744809, find 81873079/82270945, race 0+63
Sep 27 10:21:52 ip-97-74-197-181 kernel: Free swap  = 0kB
Sep 27 10:21:52 ip-97-74-197-181 kernel: Total swap = 2096472kB
Sep 27 10:21:52 ip-97-74-197-181 kernel: Free swap:            0kB
Sep 27 10:21:52 ip-97-74-197-181 kernel: 2359296 pages of RAM
Sep 27 10:21:52 ip-97-74-197-181 kernel: 324458 reserved pages
Sep 27 10:21:52 ip-97-74-197-181 kernel: 21388 pages shared
Sep 27 10:21:52 ip-97-74-197-181 kernel: 336 pages swap cached
Sep 27 10:21:52 ip-97-74-197-181 kernel: Out of memory: Killed process 3044, UID 27, (mysqld).

คำตอบ:


34

ฉันมีข่าวดีและข่าวร้าย ข่าวดีก็คือระบบไฟล์และ mysql ของคุณน่าจะดีที่สุด ... แต่ตรวจสอบ / var / log / syslog หรือเทียบเท่าเพื่อดูว่ามีอะไรเกิดขึ้นในระบบของคุณก่อน 10:21:05

เมื่อข้อความแรกที่คุณโพสต์ถูกบันทึกเซิร์ฟเวอร์ mysql ของคุณเสียชีวิตแล้ว

120927 10:21:05 mysqld_safe Number of processes running now: 0

ดังนั้นสมมติว่าคุณไม่ได้มองข้ามอะไรในบันทึกข้อผิดพลาด mysql ฉันจะบอกว่ามันไม่ผิดพลาดและตาย - มันถูกฆ่าตายจริง ๆ

เมื่อ mysqld_safe (ซึ่งเป็น wrapper ไม่ใช่เซิร์ฟเวอร์ของตัวเอง) ตระหนักว่าเซิร์ฟเวอร์ไม่ทำงานและเซิร์ฟเวอร์ไม่ได้หยุดอย่างสง่างามมันเริ่มต้นใหม่สำหรับคุณ ...

120927 10:21:06 mysqld_safe mysqld restarted

... จากนั้นภูตเซิร์ฟเวอร์จะบันทึกข้อความเริ่มต้นปกติบางอย่าง ...

120927 10:21:12 [Note] Plugin 'FEDERATED' is disabled.
120927 10:21:12 InnoDB: The InnoDB memory heap is disabled
120927 10:21:12 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120927 10:21:12 InnoDB: Compressed tables use zlib 1.2.3
120927 10:21:12 InnoDB: Using Linux native AIO

... แต่เมื่อ mysqld ขอให้ระบบปฏิบัติการจัดสรรหน่วยความจำ 4GB สำหรับพูลบัฟเฟอร์ InnoDB ...

120927 10:21:13 InnoDB: Initializing buffer pool, size = 4.0G

... เคอร์เนลพูดว่า "ไม่"

InnoDB: mmap(4395630592 bytes) failed; errno 12

ตรวจสอบแหล่งเคอร์เนลเพื่อให้แน่ใจว่า:

#define ENOMEM      12  /* Out of memory */

ใช่. ดังนั้นทุกข้อความด้านล่างบรรทัด "ล้มเหลว; errno 12" ควรถูกมองข้าม - พวกเขาทั้งหมดมีผลข้างเคียงของอันนี้

แต่สิ่งเหล่านี้ทั้งหมดเกิดขึ้นหลังจากการชนครั้งแรก

การคาดเดาที่ดีที่สุดของฉันคือสภาพหน่วยความจำเหลือน้อยมากทำให้เคอร์เนลของคุณเริ่มต้นฆ่า mysqld เพื่อพยายามทำให้ระบบเสถียร

ตามธรรมชาติแล้วอะไรก็ตามที่ทำให้หน่วยความจำขาดหายไปหลังจากรีบูต เซิร์ฟเวอร์ mysql สามารถจัดสรร 4GB สำหรับพูลบัฟเฟอร์ InnoDB และควรจะดีจนกระทั่งสิ่งใดก็ตามที่ทำให้คุณมีหน่วยความจำไม่เพียงพอทำให้เกิดขึ้นอีกครั้ง

ก่อนอื่นให้เดาว่า: กระบวนการของเด็ก apache จะเรียกใช้อาละวาด


3

เรื่องนี้เกิดขึ้นกับฉันเมื่อเร็ว ๆ นี้และหัวข้อนี้มีค่าสำหรับการช่วยให้ฉันเข้าใจว่าเกิดอะไรขึ้น

ฉันใช้ LAMP stack บน Ubuntu 14.04 กับ 1GB Ram เซิร์ฟเวอร์ของฉันหยุดทำงานเนื่องจากการรับส่งข้อมูลทางเว็บ สำหรับฉันเล่นซอกับไฟล์ปรับแต่ง mysql เพียงแค่ขยายเวลาที่ฉันต้องเจอกับความผิดพลาดแบบอื่น ในการทดสอบและแก้ไขปัญหานี้ในที่สุดฉันก็ใช้เครื่องมือ ab ของ Apache:

ab -n 100 -c 10 http://gastonia.com/

10 concurrencies (-c) ก็โอเคเพิ่มมากขึ้นจนกระทั่งฉันตี 30 - แบม - พัง ฉันสำรองข้อมูลจนกว่าฉันจะพบหมายเลขที่ปลอดภัยและจากนั้นฉันปรับคำสั่ง ServerLimit ของ Apache:

ServerLimit 20

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

หวังว่าจะเป็นประโยชน์กับทุกคนประสบปัญหาเดียวกัน


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

1

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

ปกติแล้วฉันสามารถรีสตาร์ท Mysql ได้โดยหยุด Apache ครั้งแรก

หลังจากอ่านโพสต์นี้ฉันดูในบันทึก syslog ของฉันและฉันพบ: เคอร์เนล: หน่วยความจำไม่เพียงพอ: ฆ่ากระบวนการ 19468 (mysqld) คะแนน 256 หรือเสียสละเด็กด้วยเวลาประทับเดียวกันกับ Mysql ล่ม

ฉันยังจับคู่กับการระเบิดของปริมาณการใช้งานและสแต็คของกระบวนการ httpd (apache) ฉันลดขนาดพูล innoDB เพิ่มขนาด swap เล็กน้อยและเพิ่มจำนวนสูงสุดของกระบวนการ apache ในกรณี


0

เมื่อคุณมี

Sep 27 10:21:52 ip-97-74-197-181 kernel: Swap cache: add 5745145, delete 5744809, find 81873079/82270945, race 0+63
Sep 27 10:21:52 ip-97-74-197-181 kernel: Free swap  = 0kB
Sep 27 10:21:52 ip-97-74-197-181 kernel: Total swap = 2096472kB
Sep 27 10:21:52 ip-97-74-197-181 kernel: Free swap:            0kB

พยายามตรวจสอบว่ากระบวนการใดที่กินหน่วยความจำและสลับ:

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less

แล้วฆ่าพวกมันทั้งหมด:

ps -ef | grep eatingprocess |  grep -v grep  |  awk '{print $2}' | xargs kill -9
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.