重啟mysql服務(wù)
成都創(chuàng)新互聯(lián)是一家專業(yè)提供渭南企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、做網(wǎng)站、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為渭南眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
執(zhí)行show processlist,找到state,State狀態(tài)為L(zhǎng)ocked即被其他查詢鎖住。KILL?? 10866。
有時(shí)候,會(huì)很不小心,在業(yè)務(wù)運(yùn)行中執(zhí)行了一條鎖表語(yǔ)句。這時(shí)候該怎么辦?
例如:修改元數(shù)據(jù)。
SHOW FULL PROCESSLIST 查看一下:
發(fā)現(xiàn)修改之后,鎖表了。這時(shí)候怎么辦? 殺死它 KILL 4623660
然后一切又恢復(fù)正常了。
一般對(duì)于數(shù)據(jù)量較大的表,需要修改表結(jié)構(gòu),或者做一些耗時(shí)比較久的鎖表操作,建議在晚上(業(yè)務(wù)閑時(shí))執(zhí)行。這個(gè)時(shí)候可以配合使用任務(wù)處理一下。
如:修改一個(gè)表的字段長(zhǎng)度,和添加索引
名詞解釋:
接著回家睡覺(jué),第二天回來(lái)檢查結(jié)果就好了。
附:添加唯一索引示例
MYSQL存儲(chǔ)過(guò)程結(jié)合任務(wù)處理耗時(shí)操作
這個(gè)是屬于系統(tǒng)遺留問(wèn)題,也就是一種系統(tǒng)的保護(hù)機(jī)制。就是為了避免出現(xiàn)這種在線修改系統(tǒng)的操作。
增加字段屬于系統(tǒng)的修改操作。盡量不要在線操作,因?yàn)榭赡艹霈F(xiàn)。未知的漏洞。一定要。離線。修改完畢,然后經(jīng)過(guò)測(cè)試后。認(rèn)為已經(jīng)沒(méi)有問(wèn)題了。在。次日的凌晨發(fā)一個(gè)通知。停機(jī)維護(hù)。這樣才能保證系統(tǒng)的正常運(yùn)轉(zhuǎn)。
如果在前期設(shè)置系統(tǒng)的時(shí)候就預(yù)留了。熱升級(jí)的空間。這樣才能達(dá)到在線操作的目的,而且系統(tǒng)的金融群總是一部分先升級(jí)。
很多情況下,你需要使用系統(tǒng)里邊的工具集。在線修改表格。原理其實(shí)非常的簡(jiǎn)單,新建的和原表的表格結(jié)構(gòu)。要一模一樣。對(duì)這個(gè)表格進(jìn)行修改,然后把結(jié)構(gòu)變更的日期。插入進(jìn)去。而且還建議您盡量在業(yè)務(wù)的低縫隙進(jìn)行修改。避免發(fā)生不可控的未知狀況。
使用說(shuō)明:
1、如果是用 MySQL + Apache,使用的又是 FreeBSD 網(wǎng)絡(luò)操作系統(tǒng)的話,安裝時(shí)候你應(yīng)按注意到FreeBSD的版本問(wèn)題,在FreeBSD 的 3.0 以下版本來(lái)說(shuō),MySQL Source 內(nèi)含的 MIT-pthread 運(yùn)行是正常的,但在這版本以上,你必須使用 native threads。
2、如果在 COMPILE 過(guò)程中出了問(wèn)題,請(qǐng)先檢查你的 gcc版本是否在 2.81 版本以上,gmake 版本是否在3.75以上。
3、如果不是版本的問(wèn)題,那可能是你的內(nèi)存不足,請(qǐng)使用configure--with-low-memory 來(lái)加入。
4、如果要重新做你的configure,那么你可以鍵入rm config.cache和make clean來(lái)清除記錄。
5、把 MySQL 安裝在 /usr/local 目錄下,這是缺省值,您也可以按照你的需要設(shè)定你所安裝的目錄。
項(xiàng)目坑有千千萬(wàn),我們靜下心來(lái)還是可以找到解決辦法的
最近接了一個(gè)由供應(yīng)商留下來(lái)的項(xiàng)目,正是周末休息時(shí)間突然一個(gè)電話說(shuō)功能用不了,翻看日志發(fā)現(xiàn)是業(yè)務(wù)功能的表被鎖了,我就奇了怪了,天天沒(méi)事,突然周末來(lái)使兒。一番了解才發(fā)現(xiàn)那個(gè)鎖表情況是天天都有的,但是一直沒(méi)找到原因,所以DBA運(yùn)維同事天天充當(dāng)定時(shí)刪除機(jī)器,每天早上清除鎖表進(jìn)程,丟失的數(shù)據(jù)也手動(dòng)補(bǔ)錄,厲害了,這就是供應(yīng)商做的項(xiàng)目嗎?爛到這個(gè)層度(吐槽一番)
回到正題,我們來(lái)聊一聊我的解決步驟
1、確定mysql有鎖表的情況則使用以下命令查看鎖表進(jìn)程
2、殺掉查詢結(jié)果中已經(jīng)鎖表的trx_mysql_thread_id
擴(kuò)展:
1、查看鎖的事務(wù)
2、查看等待鎖的事務(wù)
3、查詢是否鎖表:
4、查詢進(jìn)程
第一步,創(chuàng)建數(shù)據(jù)庫(kù)表writer和查看表結(jié)構(gòu),利用SQL語(yǔ)句:
create table writer(
wid int(10),
wno int(10),
wname varchar(20),
wsex varchar(2),
wage int(2)
第二步,向數(shù)據(jù)庫(kù)表writer插入五條數(shù)據(jù),插入后查看表里數(shù)據(jù)
第三步,利用鎖定語(yǔ)句鎖定數(shù)據(jù)庫(kù)表writer,利用SQL語(yǔ)句:
lock table writer read;
讓數(shù)據(jù)庫(kù)表只讀不能進(jìn)行寫(xiě)
第四步,為了驗(yàn)證鎖定效果,可以查看數(shù)據(jù)庫(kù)表數(shù)據(jù),利用SQL語(yǔ)句:
select * from writer;
第五步,利用update語(yǔ)句對(duì)id=5進(jìn)行更新,SQL語(yǔ)句為:
update writer set wname = '胡思思' where id = 5;
第六步,利用unlock進(jìn)行解鎖,SQL語(yǔ)句為:
unlock tables;