首頁 / 網站建設 / phpmyadmin出怪手?!其實是MySQL作怪
Logo

phpmyadmin出怪手?!其實是MySQL作怪

今天碰到一個特別詭異的問題,phpmyadmin登入之後有一個資料表一點就一直停在loading的畫面,但是上線中的機器又不能直接給他重啟,登入SSH下一個優化指令mysqlcheck -u root -p -oA --auto-repair --all-database居然直接給他整個停住 :er 不死心再開一個SSH連線去MYSQLDUMP那個資料庫出來也是整個停住,但是除了這個資料庫之外其他都正常,WTF?!我的天,這是啥鬼情形啊… 🤔

後來經提醒後下指令檢查mysqladmin -u root -p processlist才發現佔用MySQL的線程居然多到靠北 🖕 一堆佔著矛坑不拉屎是哪招,動用大絕招終止運作太久的MySQL進程

mysql -e "show processlist" | awk '{ $6 = $6 +1; if ($6 >= 60 && $5 == "Query") system("mysqladmin kill "$1); print strftime("%c") "] query Killed. [Account: "$2"] [Database: "$4"] [query Runtime: "$6" seconds]"; }' >> /var/log/kill_mysql_proc.log

再放上一個腳本交給crontab兄弟處理每日2點自動優化一次資料庫然後終止超時的MySQL進程,記得把OOXXOOXX改成MySQL的root密碼

0 2 * * * mysqlcheck -u root -pOOXXOOXX -oA --auto-repair --all-database > /dev/null 2>&1
20 2 * * * sh /root/kill_mysql_maxtime.sh > /dev/null 2>&1

腳本內容如下

#!/bin/bash
############### 你要修改的地方從這裡開始 ###############
DB_HOST="localhost"
DB_PORT=3306
DB_USER="root"
DB_PASS="OOXXOOXX"
maxtime="30"
############### 你要修改的地方從這裡結束 ###############
#
sql="SHOW PROCESSLIST"
sss=$(/usr/bin/mysqladmin processlist|sed -e "s/s//g"|awk -F'|' '{print $2,$7,substr($9,1,6)}'|awk '{if($2>'"$maxtime"' && $3=="SELECT"){print $1}}')
for pid in $(echo "$sss"); do
/usr/bin/mysql -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASS -e "kill $pid"
done
echo "$sss"
date

就這樣就搞定啦,一切又恢復正常,但出現這種問題也說明要來微調一下my.cnf了 🤐

臉書回應

篇回應

關於 窮苦人家的小孩

In every democracy, the people get the government they deserve. ~Alexis de Tocqueville
上一篇:
下一篇:

您可能會喜歡

[CentOS]MariaDB 5.x 升級到 10.x 版本

CentOS 7預設的資料庫來 …

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料