日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql checksum用法_MySQL checksum理解_mysql

發(fā)布時間:2024/3/24 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql checksum用法_MySQL checksum理解_mysql 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

mysql checksum了解

在主從復(fù)制中Checksum常常需要對某些重要的表進(jìn)行一致性檢查。

Checksum Table在邏輯備份時候前后是否可以用于驗證數(shù)據(jù)一致性。擴(kuò)展一下發(fā)現(xiàn)有一些有趣的問題,比如數(shù)據(jù)插入順序不同、表引擎不同、操作系統(tǒng)位數(shù)不同等。

插入順序不同是否有影響

我們知道全表掃描是可以有很多種順序的,尤其當(dāng)表里面出現(xiàn)過delete動作以后,邏輯導(dǎo)出再導(dǎo)入另外一個表后,兩個表的全表掃描結(jié)果可能不同。

Checksum table計算返回值的邏輯大致如下:

ha_checksum crc= 0; foreach(row in table) { row_crc= get_crc(row); crc+= row_crc; } return crc;

可以看到只要總行數(shù)以及行內(nèi)容相同,與讀取行的順序無關(guān)。

從這個邏輯還能得到一下幾個結(jié)論:

1)與使用的引擎無關(guān),也就是說即使主備不用同一個引擎,checksum也可用于檢查。雖然InnoDB有隱藏行,但這里無視。

2)與是否有索引無關(guān)。row_crc只用行本身的數(shù)據(jù)來計算,并不包括索引數(shù)據(jù)。

也就是說如果能夠保證兩個表里面的數(shù)據(jù)一樣,表結(jié)構(gòu)(列內(nèi)容和順序一樣),操作系統(tǒng)一樣,MySQL版本一致,是能夠保證checksum的結(jié)果的。

字段順序不同是否有影響

在個row計算row_crc時,是每個字段依次計算的。但計算過程中會將上一個字段的結(jié)果作為計算下一個值的輸入。

switch (f->type()) { case MYSQL_TYPE_BLOB: case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_GEOMETRY: case MYSQL_TYPE_BIT: { String tmp; f->val_str(&tmp); row_crc= my_checksum(row_crc, (uchar*) tmp.ptr(), tmp.length()); break; } default: row_crc= my_checksum(row_crc, f->ptr, f->pack_length()); break; }

因此字段順序會影響結(jié)果。

字段長度不同是否有影響

即使看到相同的內(nèi)容,也有可能得到不同的checksum。

從上面計算每個field的crc上看,若為變長字段(varchar等),由于用于計算的是實(shí)際長度,因此不會影響。比如將表的varchar(20)字段改成varchar(25),不會改變checksum的值。

但若將char(20)改成char(25),或者int改成bigint,則會改變checksum。

操作系統(tǒng)位數(shù)不同

因為返回值是unsigned long,我們就擔(dān)心32位和64位機(jī)器的溢出問題。所幸在計算過程中的ha_myisam直接定義為uint32,只是在返回的時候才轉(zhuǎn)成unsigned long,因此無影響。

字符集不同

這個問題其實(shí)一直比較含糊。實(shí)際上與輸入字符集有關(guān)。但有一個結(jié)論是肯定的:若表里面字段的unhex()值相同,得到的checksum即相同。

通過下面的代碼進(jìn)行對表進(jìn)行檢查 返回一個唯一值

mysql > checksum table test ;

歡迎大家閱讀《MySQL checksum理解_mysql》,跪求各位點(diǎn)評,by 搞代碼

微信 賞一包辣條吧~

支付寶 賞一聽可樂吧~

總結(jié)

以上是生活随笔為你收集整理的mysql checksum用法_MySQL checksum理解_mysql的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。