MySQL8.x 中新增了一個輕量級的備份鎖,它允許在 online 備份的時候進(jìn)行 DML 操作,同時可防止快照不一致。這個鎖禁止的操作很少,它禁止的操作包括:
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了大城免費建站歡迎大家使用!
文件的創(chuàng)建、刪除、改名
賬戶的管理
REPAIR TABLE
TRUNCATE TABLE
OPTIMIZE TABLE
備份鎖由?lock instance for backup?和?unlock instance?語法組成。使用這些語句需要 BACKUP_ADMIN 權(quán)限。
1、確定mysql有鎖表的情況則使用以下命令查看鎖表進(jìn)程
2、殺掉查詢結(jié)果中已經(jīng)鎖表的trx_mysql_thread_id
擴展:
1、查看鎖的事務(wù)
2、查看等待鎖的事務(wù)
3、查詢是否鎖表:
4、查詢進(jìn)程
希望一下內(nèi)容對你有所幫助
鎖定讀SELECT ... FOR UPDATE和SELECT ... LOCK IN SHARE MODE
LOCK TABLES和UNLOCK TABLES語法
LOCK TABLES
tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
[, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}] ...
UNLOCK TABLES
LOCK TABLES可以鎖定用于當(dāng)前線程的表。如果表被其它線程鎖定,則造成堵塞,直到可以獲取所有鎖定為止。UNLOCK TABLES可以釋放被當(dāng)前線程保持的任何鎖定。當(dāng)線程發(fā)布另一個LOCK TABLES時,或當(dāng)與服務(wù)器的連接被關(guān)閉時,所有由當(dāng)前線程鎖定的表被隱含地解鎖。
表鎖定只用于防止其它客戶端進(jìn)行不正當(dāng)?shù)刈x取和寫入。保持鎖定(即使是讀取鎖定)的客戶端可以進(jìn)行表層級的操作,比如DROP TABLE。
有時候,會很不小心,在業(yè)務(wù)運行中執(zhí)行了一條鎖表語句。這時候該怎么辦?
例如:修改元數(shù)據(jù)。
SHOW FULL PROCESSLIST 查看一下:
發(fā)現(xiàn)修改之后,鎖表了。這時候怎么辦? 殺死它 KILL 4623660
然后一切又恢復(fù)正常了。
一般對于數(shù)據(jù)量較大的表,需要修改表結(jié)構(gòu),或者做一些耗時比較久的鎖表操作,建議在晚上(業(yè)務(wù)閑時)執(zhí)行。這個時候可以配合使用任務(wù)處理一下。
如:修改一個表的字段長度,和添加索引
名詞解釋:
接著回家睡覺,第二天回來檢查結(jié)果就好了。
附:添加唯一索引示例
MYSQL存儲過程結(jié)合任務(wù)處理耗時操作