table-checksum

table-checksum

ID:40103039

大小:1.08 MB

页数:28页

时间:2019-07-21

table-checksum_第1页
table-checksum_第2页
table-checksum_第3页
table-checksum_第4页
table-checksum_第5页
资源描述:

《table-checksum》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、mk-table-checksum@qcbetterThanksTencent@FelixliangAgenda•如何判断masterslave数据一致•binlog顺序性;MySQL可重复读隔离级别•使用及参数•精确数据切分方法及必要性•平台集成•其他之前•之前09年slave分裂扩容,切换数据迁移都是停机校验,•新的在线校验方式节约变更时间,checksum数据保障数据一致性方面会有很大帮助的。•新的校验方式基于Slavebinlog传递,每条sql在master和slave上执行时,所有表的数据

2、,应该是一致的这么个道理的。如何判断MS数据时候一致•1停机校验:•32G4RAID5+8RAID10SAS•测试:200G(总共)/5G(单表数据)*64s=2560s•停机时间太长•checksumtable_name如何判断MS数据时候一致•2不停机校验:master逐表写锁定slavechecksum•begin;Locktablet2write;checksumtablet2;commit;•单表锁定,时间为分钟级,数据量越大,锁时间越长(5G表64s)如何判断MS数据时候一致•3不停机校验

3、:按块做校验,保证每个块(chunk)时间够短•mk-table-checksum的雏形•chunk•SELECT'test_checksum','tt2',0ASchunk_num,'id>=1andid<4',COUNT(*)AScnt,LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#','id','name'))asUNSIGNED)),10,16))AScrcFROM`test_checksum`.`tt2`whereid>=1andid<4;•这个sele

4、ct语句可以实现按数据段进行数据校验,每个段的数据校验时间可控,最大的优点无需锁表mk-table-checksum原理•master上执行下面两个语句,记录结果到checksum表中•核心语句为•replaceintoxxxselectxxx•updatexxx•slave获取这两个binlog然后重放,slave判断master_crc/this_crc,master_cnt/this_cnt是否一样•REPLACE/*test_checksum.tt2:1/3*/INTOdb_infobase.

5、checksum(db,tbl,chunk,boundaries,this_cnt,this_crc)SELECT'test_checksum','tt2',0ASchunk_num,'id>=1andid<4',COUNT(*)AScnt,LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#','id','name'))asUNSIGNED)),10,16))AScrcFROM`test_checksum`.`tt2`whereid>=1andid<4;•UPDATE

6、db_infobase.checksumSETmaster_crc='e9216fca',master_cnt=’2'WHEREdb='test_checksum'ANDtbl='tt2'ANDchunk='0'/*!*/;如何保证checksum时DRDB是同一时刻的校验值•binlog记录一系列的replaceupdate语句执行书序是一致的开启事物,看到的也是开始时的状态,•//但是这里我还是有一点不理解,masterbinlog不是应该在事物提交后传递到slave传递的时候不是应该是延时,这时

7、候有修改的话不就还是不一致么?还说这种情况下是不可能一致的?•CREATETABLEdb_infobase.checksum(•dbchar(64)NOTNULL,•tblchar(64)NOTNULL,•chunkintNOTNULL,•boundarieschar(100)NOTNULL,•this_crcchar(40)NOTNULL,•this_cntintNOTNULL,•master_crcchar(40)NULL,•master_cntintNULL,•tstimestampNOTNUL

8、L,•PRIMARYKEY(db,tbl,chunk)•)ENGINE=InnoDB;数据分块校验原理•获得每个chunk大致涉及的rows:n_rows=$chunk_size/$avg_row_length•确定校验份数:假设指定chunk-size为10M,则将该表分为5000/10=500份•计算每一份(块)的起始值:假设表id为主键,通过selectmin(id),max(id)fromtt2;假设最小、最大值为0、10000,则第1个区间数据

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
相关文章
更多
相关标签