国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL 數(shù)據(jù)丟失排查案例

瀏覽:5日期:2023-10-03 13:05:04
前言

最近,有一位朋友突然微信聯(lián)系我,說MySQL出現(xiàn)了數(shù)據(jù)丟失的情況;毫無疑問,對于一個DBA而言,這無疑是最令人緊張的一件事情,沒有之一;聽到這個消息后,我也就立刻投入到問題排查中。

現(xiàn)場排查

一開始聽到這個消息,我心里面當(dāng)然也是非常緊張,不過很快就讓自己冷靜下來,開始進(jìn)行排查:

(1)實例狀態(tài)是不是正常的? --經(jīng)確認(rèn),實例狀態(tài)正常

(2)業(yè)務(wù)庫是哪個?是否還存在?是否被刪除? --經(jīng)確認(rèn),業(yè)務(wù)庫存在

(3)業(yè)務(wù)是訪問哪個表報錯?該表是否存在?是否被刪除? --經(jīng)確認(rèn),業(yè)務(wù)表存在

(4)應(yīng)用用戶的權(quán)限是否正常? --經(jīng)確認(rèn),應(yīng)用用戶擁有業(yè)務(wù)庫的所有權(quán)限

(5)業(yè)務(wù)訪問是報什么錯? --經(jīng)確認(rèn),業(yè)務(wù)側(cè)是訪問某些頁面報錯

(6)排查到這里,一方面是懷疑應(yīng)用程序是否有異常,另一方面是懷疑是否出現(xiàn)部分記錄丟失;開發(fā)側(cè)和運維側(cè)同時在排查,這邊給運維側(cè)排查的思路是 業(yè)務(wù)表是否有主鍵?業(yè)務(wù)側(cè)訪問報錯和業(yè)務(wù)表的對應(yīng)關(guān)系是怎樣的?能否找出相對應(yīng)的記錄?

(7)進(jìn)一步分析發(fā)現(xiàn),該業(yè)務(wù)表有主鍵,開發(fā)側(cè)也提供了查詢的記錄,經(jīng)排查該記錄存在,并未被誤刪除;開發(fā)側(cè)排查應(yīng)用程序,日志也未很清晰打印出報錯信息

(8)在這種情況下,只能先咨詢一下當(dāng)晚是否有做什么變更/發(fā)布? --經(jīng)確認(rèn),當(dāng)晚有做一些表的DDL變更

繼續(xù)排查發(fā)現(xiàn),當(dāng)晚DDL變更有涉及到該業(yè)務(wù)表的操作,變更內(nèi)容為修改字段長度,類似alter table xxx modify column xxx char(x);問題到這里也就開始有思路了,接下去開始排查sql_mode配置、查詢相應(yīng)的完整行記錄給開發(fā)確認(rèn),最終確認(rèn)是DDL變更導(dǎo)致字段被截斷,最后只能通過備份進(jìn)行恢復(fù),問題最終得到解決。

案例復(fù)現(xiàn)

看完剛剛的排查過程,相信很多童鞋都會有疑問,為什么修改字段長度對導(dǎo)致數(shù)據(jù)被截斷?MySQL難道不會不會做數(shù)據(jù)校驗嗎?讓我們接著往下看。

(1)場景1

mysql> select * from sbtest2 limit 1;+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+| id | k | c | pad |+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+| 1 | 3718516 | 08566691963-88624912351-16662227201-46648573979-64646226163-77505759394-75470094713-41097360717-15161106334-50535565977 | 63188288836-92351140030-06390587585-66802097351-49282961843 |+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+1 row in set (0.00 sec)mysql> alter table sbtest2 modify column pad char(1);ERROR 1265 (01000): Data truncated for column ’pad’ at row 1mysql> select * from sbtest2 limit 1;+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+| id | k | c | pad |+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+| 1 | 3718516 | 08566691963-88624912351-16662227201-46648573979-64646226163-77505759394-75470094713-41097360717-15161106334-50535565977 | 63188288836-92351140030-06390587585-66802097351-49282961843 |+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+1 row in set (0.00 sec)

(2)場景2

mysql> select * from sbtest2 limit 1;+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+| id | k | c | pad |+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+| 1 | 3718516 | 08566691963-88624912351-16662227201-46648573979-64646226163-77505759394-75470094713-41097360717-15161106334-50535565977 | 63188288836-92351140030-06390587585-66802097351-49282961843 |+----+---------+-------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------+1 row in set (0.00 sec)mysql> alter table sbtest2 modify column pad char(1);Query OK, 100 rows affected, 100 warnings (0.06 sec)Records: 100 Duplicates: 0 Warnings: 100mysql> select * from sbtest2 limit 1;+----+---------+-------------------------------------------------------------------------------------------------------------------------+------+| id | k | c | pad |+----+---------+-------------------------------------------------------------------------------------------------------------------------+------+| 1 | 3718516 | 08566691963-88624912351-16662227201-46648573979-64646226163-77505759394-75470094713-41097360717-15161106334-50535565977 | 6 |+----+---------+-------------------------------------------------------------------------------------------------------------------------+------+1 row in set (0.00 sec)

場景1是比較符合我們預(yù)期的,直接報錯“數(shù)據(jù)被截斷”;場景2是執(zhí)行成功,導(dǎo)致“數(shù)據(jù)部分丟失”;那么,MySQL是沒有進(jìn)行數(shù)據(jù)校驗嗎?其實MySQL都有對數(shù)據(jù)進(jìn)行校驗的,只是在場景2中,因為sql_mode配置有問題,沒有設(shè)置STRICT_TRANS_TABLES,導(dǎo)致MySQL沒有阻止該操作執(zhí)行,從而導(dǎo)致“數(shù)據(jù)丟失”慘案。

總結(jié)

至此,“數(shù)據(jù)丟失”慘案也就可以告一段落,根本原因是sql_mode沒有設(shè)置STRICT_TRANS_TABLES;這個案例也是在提醒我們,sql_mode是一個非常關(guān)鍵的配置,千萬不可隨便設(shè)置和修改;關(guān)于sql_mode的更多內(nèi)容,下篇文章會繼續(xù)給大家分享。

以上就是MySQL 數(shù)據(jù)丟失排查案例的詳細(xì)內(nèi)容,更多關(guān)于MySQL 數(shù)據(jù)丟失排查的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: a级片免费 | 国产一区亚洲二区三区毛片 | 日本三级香港三级网站 | 国产中文99视频在线观看 | aaa一级毛片免费 | 免费岛国小视频在线观看 | 一级精品视频 | 国产毛片网站 | 欧美1 | 亚洲狠狠ady亚洲精品大秀 | 日本免费一区二区三区视频 | 中文字幕日韩三级 | 色偷偷亚洲女人天堂观看欧 | 久久精品呦女 | 成在线人免费视频 | 欧洲亚洲一区二区三区 | 免费人成黄页网站在线观看国产 | 免费日本在线视频 | 男人使劲躁女人视频小v | 欧美色偷偷 | 亚洲综合视频网 | 青青草国产免费国产是公开 | 欧美经典成人在观看线视频 | 欧美日本亚洲国产一区二区 | 特黄a三级三级三级 | 欧美视频精品一区二区三区 | 一级毛片aaaaaa视频免费看 | 国产一级特黄aa级特黄裸毛片 | 国产伦精品一区二区三区 | 国产精品午夜免费观看网站 | 欧美一区二区三区gg高清影视 | 欧美色视频日本片高清在线观看 | 欧美一级片手机在线观看 | 暖暖免费高清日本一区二区三区 | 天天看有黄有色大片 | 国产九九在线观看播放 | 欧美一区二区在线 | 一个人的视频日本免费 | dy888午夜国产午夜精品 | 免费手机黄色网址 | 成人国产精品免费软件 |