亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mysql寫入數(shù)據(jù)十幾秒后被自動刪除了如何解決

 更新時間:2022年09月15日 10:50:12   作者:南城FE???????  
這篇文章主要介紹了Mysql寫入數(shù)據(jù)十幾秒后被自動刪除了如何解決,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

背景

事情是這樣的,在公司內(nèi)部新開發(fā)了一個功能還沒有上線,目前部署在測試環(huán)境,Node服務(wù)會開啟一個定時任務(wù),每5分鐘會處理好一部分?jǐn)?shù)據(jù)寫入到mysql數(shù)據(jù)庫中。

在這之前,一切都運(yùn)行正常,中秋節(jié)后上班第一天打開后臺系統(tǒng)發(fā)現(xiàn)沒有數(shù)據(jù)展示了,然后查詢數(shù)據(jù)庫發(fā)現(xiàn)歷史存儲的數(shù)據(jù)都沒了,沒了?,F(xiàn)在只會存儲最新的定時任務(wù)執(zhí)行后的數(shù)據(jù)。可在此之間沒有修改過任何代碼,這個就神奇了。

頭疼時間

查看寫入的數(shù)據(jù)始終都只會存儲最新的數(shù)據(jù),則檢查是否沒有觸發(fā)更新的邏輯,全部都命中新增的邏輯。

const isExist = await this.Model.findOne({
  where: {
    projectId
  }
});
if (isExist) {
  await isExist.destroy()
  updateList.push(item)
} else {
  createList.push(item)
}

現(xiàn)在的邏輯是將新增和更新分開處理,經(jīng)檢查發(fā)現(xiàn)所有的isExist都是null,導(dǎo)致全部命中新增的邏輯??墒菙?shù)據(jù)庫中明明是有數(shù)據(jù)的,為什么查詢不出來呢?懷疑是有第三方數(shù)據(jù)存在臟數(shù)據(jù)之類的情況,所以我將數(shù)據(jù)庫現(xiàn)存數(shù)據(jù)全部清空,重新寫入查看效果。結(jié)果第一次寫入是正常的,后續(xù)還是不會觸發(fā)更新,經(jīng)過查詢發(fā)現(xiàn)每次寫入數(shù)據(jù)庫大約十幾秒數(shù)據(jù)就被清空了。

可是在寫入后的代碼邏輯中是沒有執(zhí)行刪除數(shù)據(jù)的處理,而且每次都是穩(wěn)定復(fù)現(xiàn),寫入后就被刪除了,查詢無果無奈找到db幫找原因。db查詢?nèi)罩窘o出的結(jié)論就是有定時執(zhí)行刪除的邏輯。

看到日志只能繼續(xù)在代碼中找原因了。由于此時是使用的 sequelize 的 bulkCreate 批量創(chuàng)建數(shù)據(jù),所以開始懷疑是不是這個批量處理的過程中出現(xiàn)了問題,當(dāng)初是因?yàn)槊看螆?zhí)行的數(shù)據(jù)量太多所以沒有選擇單條執(zhí)行,這個時候?yàn)榱伺挪閱栴},所以我改成了單條數(shù)據(jù) create 方式創(chuàng)建數(shù)據(jù)。

this.Model.bulkCreate(list)

修改為:

for (const item of list) {
  this.Model.create(item)
}

結(jié)果不出意外的還是定時被刪除了,?? 然后開始懷疑是事務(wù)沒有提交的問題,雖然此邏輯是完全不需要用到事務(wù)操作,但還是抱著懷疑的心態(tài)試試看。

let transaction;
try {
  // 建立事務(wù)對象
  transaction = await this.ctx.model.transaction();
  for (const item of list) {
    // 事務(wù)增操作
    await this.Model.create(item, {
        transaction,
    });
    // 提交事務(wù)
    await transaction.commit();
  }
} catch (err) {
    // 事務(wù)回滾
    await transaction.rollback();
}

結(jié)果不出意外的還是定時被刪除了,??????此時已經(jīng)沒有改動的余地了,此時的天都已經(jīng)黑了,可是問題還沒解決,只能繼續(xù)面向百度編程了,此時搜索到也有同一個人遇到這樣的問題,他的解決方案是修改表名稱,這時候也只能死馬當(dāng)作活馬醫(yī)了。

結(jié)果出意外的恢復(fù)正常寫入以及更新了。

為什么更改了表名稱后就正常呢,思來想去也想不出為什么。結(jié)果今天在重新部署服務(wù)的時候看了一眼歷史部署記錄,發(fā)現(xiàn)了端倪。就在假期的最后一天晚上有一個部署記錄,然后我回看了和最開始發(fā)生數(shù)據(jù)異常的時間段相差無幾?;揪涂梢詳喽ê痛舜尾渴鹩泻艽蟮年P(guān)系,由于公司內(nèi)部的部署方案有docker和虛擬機(jī)兩種方式,導(dǎo)致每個時間段都會有兩個定時任務(wù)同時執(zhí)行,由于數(shù)據(jù)處理的過程中需要查詢第三方數(shù)據(jù),最后兩邊寫入的時間會存在一定的延時,導(dǎo)致寫好的數(shù)據(jù)被另一邊執(zhí)行了刪除的邏輯,由于那臺服務(wù)器一直未更新修改的代碼,一直執(zhí)行的是最開始那份先刪除再更新的邏輯。至于為啥執(zhí)行了刪除但是沒有更新,猜想是刪除后更新的邏輯出錯了。這也是為什么修改了表名稱后就正常了,因?yàn)槟桥_服務(wù)器上面還是舊的代碼,新增刪除不能讀到之前的那張表了,問題到此終于是告一段落了。

總結(jié)

到此是否感覺看了一個大烏龍事件,最終的原因和代碼沒有任何關(guān)系,但是卻三番五次的改動無果。在排查過程中還有很多沒有寫的,比如懷疑重復(fù)數(shù)據(jù)導(dǎo)致所以增加唯一索引,懷疑自增ID多大重新清零,但是這個改動的過程中也學(xué)到了不少新的知識,如何使用事務(wù),新增唯一索引,修改表名稱,重置自增ID等很多服務(wù)端相關(guān)的知識。最后的總結(jié)是遇到問題先不要質(zhì)疑代碼,從系統(tǒng)層面,運(yùn)行版本,環(huán)境變量,運(yùn)維等方面也要有一定的思考

到此這篇關(guān)于Mysql寫入數(shù)據(jù)十幾秒后被自動刪除了如何解決的文章就介紹到這了,更多相關(guān)Mysql數(shù)據(jù)自動刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL數(shù)據(jù)庫入門之備份數(shù)據(jù)庫操作詳解

    MySQL數(shù)據(jù)庫入門之備份數(shù)據(jù)庫操作詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫入門之備份數(shù)據(jù)庫操作,結(jié)合實(shí)例形式詳細(xì)分析了MySQL備份數(shù)據(jù)庫基本操作命令與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • MySQL中的?Binlog?深度解析及使用詳情

    MySQL中的?Binlog?深度解析及使用詳情

    這篇文章主要介紹了MySQL中的?Binlog?深度解析及使用詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Mysql開啟外網(wǎng)訪問的全過程記錄

    Mysql開啟外網(wǎng)訪問的全過程記錄

    mysql 默認(rèn)是不允許外放訪問的,只允許 localhost 或 127.0.0.1 訪問,下面這篇文章主要給大家介紹了關(guān)于Mysql開啟外網(wǎng)訪問的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • MySQL中對于索引的基本增刪查改操作總結(jié)

    MySQL中對于索引的基本增刪查改操作總結(jié)

    這篇文章主要介紹了MySQL中對于索引的基本增刪查改操作總結(jié),索引可以提高M(jìn)ySQL的檢索速度,需要的朋友可以參考下
    2016-01-01
  • MySQL最佳實(shí)踐之分區(qū)表基本類型

    MySQL最佳實(shí)踐之分區(qū)表基本類型

    這篇文章主要給大家介紹了關(guān)于MySQL最佳實(shí)踐之分區(qū)表基本類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • mac系統(tǒng)OS X10.10版本安裝最新5.7.9mysql的方法

    mac系統(tǒng)OS X10.10版本安裝最新5.7.9mysql的方法

    這篇文章給大家介紹mac系統(tǒng)OS X10.10版本安裝最新5.7.9mysql的方法,本文分步驟純文字說明,介紹的非常詳細(xì),具有參考價值,在此分享供大家參考
    2015-10-10
  • MySQL查詢學(xué)習(xí)之基礎(chǔ)查詢操作

    MySQL查詢學(xué)習(xí)之基礎(chǔ)查詢操作

    這篇文章主要給大家介紹了關(guān)于MySQL查詢學(xué)習(xí)之基礎(chǔ)查詢操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • MySql服務(wù)未知原因消失解決方法

    MySql服務(wù)未知原因消失解決方法

    這篇文章主要介紹了MySql服務(wù)未知原因消失解決方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • MySQL利用索引優(yōu)化ORDER BY排序語句的方法

    MySQL利用索引優(yōu)化ORDER BY排序語句的方法

    這篇文章主要介紹了MySQL利用索引優(yōu)化ORDER BY排序語句的方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-10-10
  • MySQL在線DDL gh-ost使用總結(jié)

    MySQL在線DDL gh-ost使用總結(jié)

    在本篇內(nèi)容里小編給大家整理了關(guān)于MySQL在線DDL gh-ost使用方法和相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-02-02

最新評論