mysql經常鎖死怎麼辦?mysql表鎖死解決方案

來源:互聯網
上載者:User

在伺服器上命令列登入,mysql -uroot -upassword,把密碼寫到命令列裡,不用每次再輸入,按ctrl+p 然後斷行符號,嘗試N次,終於登入進去了;串連數過多,終究還是可以找到空子進去的。趕快查看並保留運行狀態的重要參數:

 代碼如下 複製代碼

show variables;
show status;

show processlist;

好傢夥,這麼多串連:

| 10520 | unauthenticated user | 192.168.0.109:41063 | NULL  | Connect | NULL | login | NULL             |
| 10521 | unauthenticated user | 192.168.0.109:41065 | NULL  | Connect | NULL | login | NULL             |
| 10522 | unauthenticated user | 192.168.0.109:41067 | NULL  | Connect | NULL | login | NULL             |
| 10523 | unauthenticated user | 192.168.0.109:41068 | NULL  | Connect | NULL | login | NULL             |
| 10524 | unauthenticated user | 192.168.0.109:41069 | NULL  | Connect | NULL | login | NULL             |
| 10525 | unauthenticated user | 192.168.0.109:41070 | NULL  | Connect | NULL | login | NULL             |
| 10526 | unauthenticated user | 192.168.0.109:41071 | NULL  | Connect | NULL | login | NULL             |
如些上千行。先不管,這裡肯定是問題突破口。

 代碼如下 複製代碼

set global max_connections=4000;

增加允許的最大串連數,先讓前台網站可以正常工作。

回過頭google :mysql unauthenticated user

果然,遇到此類問題的人很多,問題在於mysql的反向ip位址解析,配置參數裡加上skip-name-resolve就可以。

補充


一、查看進程運行情況(會話1)

 代碼如下 複製代碼
mysql> select id,user,host,db,command,time,state from processlist a;
+—-+——+—————–+——————–+———+——+———–
+
| id | user | host | db | command | time | state
|
+—-+——+—————–+——————–+———+——+———–
+
| 40 | root | localhost:14046 | information_schema | Query | 0 | executing
|
| 39 | root | localhost:13992 | chf | Sleep | 251 |
|
| 38 | root | localhost:13991 | chf | Sleep | 251 |
|
+—-+——+—————–+——————–+———+——+———–
+
3 rows in set (0.00 sec)

二、構造表被鎖現象
1)鎖住表(會話1)

 代碼如下 複製代碼
mysql>LOCK TABLES chf.disc02 READ;或者–LOCK TABLES chf.disc02 WRITE;

2)執行dml操作(會話2)

 代碼如下 複製代碼
mysql>delete from chf.disc02 limit 1;–會話處於卡死狀態

3)查詢進程運行情況(會話1)

 代碼如下 複製代碼
mysql> select id,user,host,db,command,time,state from processlist a;
+—-+——+—————–+——————–+———+——+———–
+
| id | user | host | db | command | time | state
|
+—-+——+—————–+——————–+———+——+———–
+
| 41 | root | localhost:14358 | chf | Query | 5 | Locked
|
| 40 | root | localhost:14046 | information_schema | Query | 0 | executing
|
| 39 | root | localhost:13992 | chf | Sleep | 343 |
|
| 38 | root | localhost:13991 | chf | Sleep | 343 |
|
+—-+——+—————–+——————–+———+——+———–
+

4 rows in set (0.01 sec)
說明:發現進程id為41的進程狀態為Locked
三、解鎖操作
1)刪掉被鎖進程(會話1)

 代碼如下 複製代碼
mysql> kill 41;

出現現象(會話2)
ERROR 2013 (HY000): Lost connection to MySQL server during query
2)查看進程(會話1)

 代碼如下 複製代碼
mysql> select id,user,host,db,command,time,state from processlist a;
+—-+——+—————–+——————–+———+——+———–
+
| id | user | host | db | command | time | state
|
+—-+——+—————–+——————–+———+——+———–
+
| 40 | root | localhost:14046 | information_schema | Query | 0 | executing
|
| 39 | root | localhost:13992 | chf | Sleep | 298 |
|
| 38 | root | localhost:13991 | chf | Sleep | 298 |
|
+—-+——+—————–+——————–+———+——+———–
+
3 rows in set (0.01 sec)

四、批量解鎖

 代碼如下 複製代碼
mysql> select concat(‘kill ‘,id,’;') kill_process from processlist a where a.state=’Locked’;
+————–+
| kill_process |
+————–+
| kill 43; |
| kill 42; |
+————–+
2 rows in set (0.01 sec)

Note:
1)可以使用show processlist查看目前使用者串連
如果是root帳號,你能看到所有使用者的當前串連。如果是其它普通帳號,只能看到自己佔用的串連。show processlist;只列出前100條,如果想全列出請使用show full processlist;
2)在構造鎖的會話中,使用unlock tables;也可以解鎖

總結一下原因,大概如下:

因為mysql預設會根據用戶端的ip地址反向解析,用於使用者登入授權之用。不過正常情況下,很少會有人這樣用。ip地址反向解析是很慢的,尤其是高負荷的mysql,每秒種幾百次甚至更高的請求,這個請求壓到本地的dns伺服器上,dns伺服器說不定會懷疑你在惡意請求,然後不理你了,然後這些登入請求就掛在那裡,後面的串連還持續,然後越積越多,然後就達到mysql的最大串連資料限制了,然後新的串連就直接被拒,得到串連數過多的訊息。

因為mysql設定檔使用的之前的設定檔,當時跟web同伺服器,所以不存在這個問題。

這也正好解釋了為什麼phpMyAdmin裡看mysqld狀態時,有很多失敗的串連,它們應該就是因反解析失敗而被拒的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.