Ubuntu

mysql innodb 崩潰斷言

  • February 16, 2015

自星期五以來,我的 innodb 數據庫遇到了一些非常大的問題。每當我對大約 22GB 的特定表執行某些操作時,mysql 伺服器就會崩潰。插入數據有效,其他表上的所有其他操作也正常工作。

根據“innochecksum”,所有頁面都可以。我已經嘗試使用 force_innodb_recovery <= 4 但伺服器消失了,並且在“6199219”行轉儲表時出現連接失去錯誤。即使在某些正常查詢中也會發生崩潰。行號始終相同。

這是我的錯誤日誌關於崩潰的內容:

sr@kirk:~$ sudo mysqld --console --verbose
150215 19:20:15 [注意] 外掛 'FEDERATED' 已禁用。
150215 19:20:15 InnoDB:InnoDB 記憶體堆已禁用
150215 19:20:15 InnoDB:互斥鎖和 rw_locks 使用 GCC atomic builtins
150215 19:20:15 InnoDB:壓縮表使用 zlib 1.2.3.4
150215 19:20:15 InnoDB:初始化緩衝池,大小=20.0G
150215 19:20:18 InnoDB:緩衝池初始化完成
150215 19:20:18 InnoDB:支持的最高文件格式是梭子魚。
150215 19:20:22 InnoDB:等待後台執行緒啟動
150215 19:20:23 InnoDB:5.5.41 開始;日誌序列號 80382959696
150215 19:20:23 [注意] 伺服器主機名(綁定地址):'0.0.0.0'; 埠:3306
150215 19:20:23 [注] - '0.0.0.0' 解析為 '0.0.0.0';
150215 19:20:23 [注意] 在 IP 上創建的伺服器套接字:'0.0.0.0'。
150215 19:20:23 [警告] 既沒有使用 --relay-log 也沒有使用 --relay-log-index;因此,當此 MySQL 伺服器充當從屬伺服器並更改其主機名時,複製可能會中斷!請使用 '--relay-log=mysqld-relay-bin' 來避免這個問題。
150215 19:20:23 [錯誤] 未設置伺服器 ID,不會啟動從站
150215 19:20:23 [錯誤] 無法創建從屬執行緒
150215 19:20:23 [注意] 事件調度程序:載入了 0 個事件
150215 19:20:23 [注意] mysqld:準備連接。
版本:'5.5.41-0ubuntu0.12.04.1' 套接字:'/var/run/mysqld/mysqld.sock' 埠:3306(Ubuntu)
150215 19:22:28 InnoDB:文件 btr0pcur.c 第 428 行中的執行緒 140612062639872 中的斷言失敗
InnoDB:斷言失敗:page_is_comp(next_page) == page_is_comp(page)
InnoDB:我們故意生成一個記憶體陷阱。
InnoDB:向 http://bugs.mysql.com 送出詳細的錯誤報告。
InnoDB:如果你得到重複的斷言失敗或崩潰,甚至
InnoDB:mysqld啟動後,可能有
InnoDB:InnoDB 表空間損壞。請參閱
InnoDB:http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB:關於強制恢復。
18:22:28 UTC - mysqld 收到信號 6 ;
這可能是因為您遇到了錯誤。這個二進製文件也有可能
或者它所連結的庫之一已損壞,建構不當,
或配置錯誤。此錯誤也可能是由硬體故障引起的。
我們將盡力收集一些希望對您有所幫助的資訊
診斷問題,但由於我們已經崩潰了,
肯定有問題,這可能會失敗。

key_buffer_size=16777216
讀取緩衝區大小=131072
max_used_connections=142
最大執行緒數=151
執行緒數=142
連接數=142
mysqld 可能最多可以使用
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 1274444 K 字節記憶體
希望沒關係;如果不是,減少方程中的一些變數。

執行緒指針:0x7fe83528e930
嘗試回溯。您可以通過以下資訊了解
mysqld死的地方。如果您在此之後沒有看到任何消息,則說明發生了什麼事
大錯特錯……
stack_bottom = 7fe2cc0b6e60 thread_stack 0x30000
mysqld(my_print_stacktrace+0x29)[0x7fe814a2bd79]
mysqld(handle_fatal_signal+0x483)[0x7fe8148f0923]
/lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7fe81361fcb0]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x35)[0x7fe812c860d5]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x17b)[0x7fe812c8983b]
mysqld (+ 0x63ddbd) [0x7fe814b0ddbd]
mysqld(+0x5f7eee)[0x7fe814ac7eee]
mysqld(+0x5dae0c)[0x7fe814aaae0c]
mysqld(_Z13rr_sequentialP11READ_RECORD+0x19)[0x7fe8149c4e59]
mysqld(_Z10sub_selectP4JOINP13st_join_tableb+0x71)[0x7fe8147f5bf1]
mysqld (+ 0x336914) [0x7fe814806914]
mysqld (_ZN4JOIN4execEv + 0xc03) [0x7fe814816563]
mysqld(_Z12mysql_selectP3THDPPP4ItemP10TABLE_LISTjR4ListIS1_ES2_jP8st_orderSB_S2_SB_yP13select_resultP18st_select_lex_unitP13st_select_lex+0x130)[0x7fe814811cb0]
mysqld(_Z13handle_selectP3THDP3LEXP13select_resultm+0x17c)[0x7fe814817cdc]
mysqld (+ 0x2fb9b4) [0x7fe8147cb9b4]
mysqld(_Z21mysql_execute_commandP3THD+0x16a6)[0x7fe8147d3a06]
mysqld(_Z11mysql_parseP3THDPcjP12Parser_state+0x10f)[0x7fe8147d8c1f]
mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj+0x1f26)[0x7fe8147dac16]
mysqld(_Z24do_handle_one_connectionP3THD+0x1bd)[0x7fe81488198d]
mysqld(handle_one_connection+0x50)[0x7fe8148819f0]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a)[0x7fe813617e9a]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fe812d442ed]

試圖獲得一些變數。
某些指針可能無效並導致轉儲中止。
查詢(7fe268004b60):是一個無效的指針
連接 ID(執行緒 ID):14
狀態:NOT_KILLED

http://dev.mysql.com/doc/mysql/en/crashing.html 的手冊頁包含
可以幫助您找出導致崩潰的原因的資訊。

我的系統是帶有 32GB RAM 的 ubuntu 12.04

您知道我可以嘗試解決什麼問題嗎?我備份了我所有的數據。

非常感謝您的進步,並為我糟糕的英語感到抱歉。

這是一種腐敗。

查看失敗的斷言 - page_is_comp(next_page) == page_is_comp(page)。它檢查下一頁是否與目前頁面採用相同的格式(壓縮或冗餘)。

InnoDB 索引可以是任何一種格式,但混合是不可能的。

因此,繼續使用 innodb_force_recovery=1,2,3,4,5,6(嘗試每個值直到 MySQL 啟動),轉儲數據庫並從頭開始重新創建 InnoDB 表空間。

如果 MySQL 沒有啟動 innodb_force_recovery=6 或在查詢時崩潰(順便說一句,將選項 –skip-lock-tables 添加到 mysqldump,它有時會有所幫助)然後查看https://twindb.com/recover-corrupt -mysql-數據庫/

引用自:https://serverfault.com/questions/667874