天天看點

MySQL · 特性分析 · 資料一樣checksum不一樣

有一個特殊環境需要進行人肉遷移資料,對比了表裡的資料一模一樣,但是無論如何checksum就是不一緻,那麼問題出在哪裡呢?

眼睛都把螢幕盯穿了,也沒發現不一緻的資料。

MySQL · 特性分析 · 資料一樣checksum不一樣

checksum還是不一緻,是以這個原因排除。

嗯,這個确實不一樣,源端是5.5,目的端是5.6,但是這個是checksum函數不一樣嗎?還是表的結構變了?咨詢了核心的同學,說checksum的源代碼沒變啊,接下來那應該是表結構變了?通過查手冊發現:

<code>The checksum value depends on the table row format. If the row format changes, the checksum also changes. For example, the storage format for temporal types such as TIME, DATETIME, and TIMESTAMP changes in MySQL 5.6 prior to MySQL 5.6.5, so if a 5.5 table is upgraded to MySQL 5.6, the checksum value may change.</code>

既然這樣了,那我們就來驗證下是不是因為datetime的問題。

MySQL · 特性分析 · 資料一樣checksum不一樣

嗯,确實是datetime的格式導緻的。

這個問題總結來說是因為MySQL5.5和5.6的時間存儲格式有變化,導緻了checksum不一樣。

這個問題知道原因後覺得非常簡單,但是排查起來卻不是那麼簡單的。遇到問題不要慌,理出要查的1,2,3,然後用排除法一步一步驗證就能知道問題在哪裡了。

附一詳細步驟如下:

源端:

1.備份結構和資料

2.拷貝檔案

目的端:

3.把資料導進去

4.在兩邊取checksum

5.目的端:

6.vimdiff 對比檔案

如果檔案内容一樣的話,說明資料一樣

附二get_checksum.sh