mysql打不開表問題解決方案

來源:互聯網
上載者:User

標籤:amp   content   ring   statistic   txt   ble   ssi   print   body   

做開發時候某一表怎麼也打不開,資料也不多,網上查了按下面這篇文章完美解決,但是要記得用root登入mysql:記一次MySQL中Waiting for table metadata lock的解決方案原創 2017年03月29日 12:06:32
  • 標籤:
  • mysql
  • 5860

最近項目中的資料庫查詢經常掛起,應用程式啟動後也報操作逾時。測試人員就說資料庫又掛了(貌似他們眼中的串連失敗,查詢無果都是掛了),通過 show processlist 一看,滿屏都是 Waiting for table metadata lock 狀態的串連。第一反應就是kill掉這些串連,奈何串連實在太多,實在kill不過來,於是重啟服務,貌似重啟果真能解決90%的問題,但如果不找到問題原因,問題也肯定會再次出現。

在網上查詢得知MySQL在進行一些alter table等DDL操作時,如果該表上有未提交的事務則會出現 Waiting for table metadata lock ,而一旦出現metadata lock,該表上的後續操作都會被阻塞(詳見 http://www.bubuko.com/infodetail-1151112.html)。所以這個問題需從兩方面解決:

1. 查看未提交事務

從 information_schema.innodb_trx 表中查看當前未提交的事務

select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx\G
  • 1

(\G作為結束符時,MySQL Client會把結果以列模式展示,對於列比較長的表,展示更直觀)

欄位意義:

  • trx_state: 事務狀態,一般為RUNNING
  • trx_started: 事務執行的起始時間,若時間較長,則要分析該事務是否合理
  • trx_mysql_thread_id: MySQL的線程ID,用於kill
  • trx_query: 事務中的sql

一般只要kill掉這些線程,DDL操作就不會Waiting for table metadata lock。

2. 調整鎖逾時閾值

lock_wait_timeout 表示擷取metadata lock的逾時(單位為秒),允許的值範圍為1到31536000(1年)。 預設值為31536000。詳見 https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_lock_wait_timeout 。預設值為一年!!!已哭瞎!將其調整為30分鐘

set session lock_wait_timeout = 1800;set global lock_wait_timeout = 1800;
  • 1
  • 2

好讓出現該問題時快速故障(failfast)

mysql打不開表問題解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.