欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年05月08日 11:33:57   作者:brightdeng@DBA·DBA  
這篇文章主要分享了MySQL 數(shù)據(jù)丟失排查的一個(gè)案例,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下

前言

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

現(xiàn)場(chǎng)排查

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

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

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

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

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

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

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

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

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

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

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

看完剛剛的排查過(guò)程,相信很多童鞋都會(huì)有疑問(wèn),為什么修改字段長(zhǎng)度對(duì)導(dǎo)致數(shù)據(jù)被截?cái)??MySQL難道不會(huì)不會(huì)做數(shù)據(jù)校驗(yàn)嗎?讓我們接著往下看。

(1)場(chǎng)景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 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)

(2)場(chǎng)景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: 100

mysql> 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)

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

總結(jié)

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

以上就是MySQL 數(shù)據(jù)丟失排查案例的詳細(xì)內(nèi)容,更多關(guān)于MySQL 數(shù)據(jù)丟失排查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL性能參數(shù)詳解之Skip-External-Locking參數(shù)介紹

    MySQL性能參數(shù)詳解之Skip-External-Locking參數(shù)介紹

    MySQL的配置文件my.cnf中默認(rèn)存在一行skip-external-locking的參數(shù),即跳過(guò)外部鎖定。根據(jù)MySQL開(kāi)發(fā)網(wǎng)站的官方解釋,External-locking用于多進(jìn)程條件下為MyISAM數(shù)據(jù)表進(jìn)行鎖定
    2016-05-05
  • mysql去重的兩種方法詳解及實(shí)例代碼

    mysql去重的兩種方法詳解及實(shí)例代碼

    這篇文章主要介紹了mysql去重的兩種方法詳解及實(shí)例代碼的相關(guān)資料,這里對(duì)去重的兩種方法進(jìn)行了一一實(shí)例詳解,需要的朋友可以參考下
    2017-01-01
  • 一文詳解MySQL 存儲(chǔ)引擎

    一文詳解MySQL 存儲(chǔ)引擎

    本文主要介紹了一文詳解MySQL存儲(chǔ)引擎,常用兩種存儲(chǔ)引擎是MyISAM和InnoDB,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 深入了解mysql長(zhǎng)事務(wù)

    深入了解mysql長(zhǎng)事務(wù)

    這篇文章主要介紹了mysql長(zhǎng)事務(wù)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)mysql,感興趣的朋友可以了解下
    2020-08-08
  • mysql中如何使用正則表達(dá)式查詢

    mysql中如何使用正則表達(dá)式查詢

    這篇文章主要介紹了mysql中如何使用正則表達(dá)式查詢,需要的朋友可以參考下
    2014-06-06
  • mysql之過(guò)濾分組的具體實(shí)現(xiàn)

    mysql之過(guò)濾分組的具體實(shí)現(xiàn)

    在MySQL中過(guò)濾分組數(shù)據(jù)通常使用GROUP BY結(jié)合HAVING子句和WHERE子句,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 詳解MySQL存儲(chǔ)過(guò)程的創(chuàng)建和調(diào)用

    詳解MySQL存儲(chǔ)過(guò)程的創(chuàng)建和調(diào)用

    這篇文章主要為大家介紹了MySQL存儲(chǔ)過(guò)程的創(chuàng)建和調(diào)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • centos上安裝mysql并設(shè)置遠(yuǎn)程訪問(wèn)的操作方法

    centos上安裝mysql并設(shè)置遠(yuǎn)程訪問(wèn)的操作方法

    這篇文章主要介紹了centos上安裝mysql并設(shè)置遠(yuǎn)程訪問(wèn)的操作方法,需要的朋友可以參考下
    2017-11-11
  • mysql 8.0.11安裝教程圖文解說(shuō)

    mysql 8.0.11安裝教程圖文解說(shuō)

    本文通過(guò)圖文并茂的形式給大家介紹了mysql 8.0.11安裝教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-04-04
  • Canal監(jiān)聽(tīng)MySQL的實(shí)現(xiàn)步驟

    Canal監(jiān)聽(tīng)MySQL的實(shí)現(xiàn)步驟

    本文主要介紹了Canal監(jiān)聽(tīng)MySQL的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論