sqlite報錯database is locked

問題描述

由於超級管理員也看不到我們組織,也沒有權限更改用戶的角色或邀請新用戶,於是想要通過db直接修改數據的方式處理,無奈呀。。。操作流程如下:

  1. 登錄Linux服務器連接sqlite數據庫:sqlite3 /data1/grafana/data/grafana.db
  2. 更新用戶權限:update org_user set role=‘Admin’ where id = 483 and user_id in (222,223);
  3. 更新成功後去頁面驗證發現沒有成功,則直接更新所有用戶的角色:update org_user set role=‘Admin’ where user_id in (222,223);
  4. 結果報錯如下
sqlite> update org_user set role='Admin' where user_id in (222,223);
Error: database is locked

執行.quit退出連接後再次登錄執行依然報錯該異常,什麼鬼?

問題定位

百度各種都是通過python腳本c語言等第三方連接後併發操作出現的異常,修改併發執行便解決了問題。但是我們沒有併發執行啊。。。
但是問題定位確實是併發產生的。因爲sqlite是庫級別鎖,只能同時有一個線程或進程執行寫操作。那麼看下進程咯。結果發現果然存在後臺進程掛在後臺

[...hostname...]$ ps -ef | grep sqlite
517       57160  55672  0 13:59 pts/2    00:00:00 sqlite3 /data1/grafana/data/grafana.db
517       64049  55672  0 14:57 pts/2    00:00:00 grep sqlite
[...hostname...]$ ps -ef | grep 57160
517       57160  55672  0 13:59 pts/2    00:00:00 sqlite3 /data1/grafana/data/grafana.db
517       64101  55672  0 14:57 pts/2    00:00:00 grep 57160
[...hostname...]$ ps -ef | grep 55672
517       55672  55671  0 13:48 pts/2    00:00:00 -bash
517       57160  55672  0 13:59 pts/2    00:00:00 sqlite3 /data1/grafana/data/grafana.db
517       64110  55672  2 14:58 pts/2    00:00:00 ps -ef
517       64111  55672  0 14:58 pts/2    00:00:00 grep 55672
[...hostname...]$ who am i
ops      pts/2        2020-06-19 13:45 (172.24.1.41)
[...hostname...]$ exit
logout
There are stopped jobs.
[...hostname...]$ exit
logout

明明已經執行了.quit退出sqlite客戶端,爲什麼還會有後臺進程在執行寫操作?無奈

問題解決

問題定位後解決方法就很簡單咯,殺掉後臺進程即可。委婉點,我直接退出當前ssh連接重新登錄跳板機,跳到目標機器再次執行。木有異常了_

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章