精华内容
下载资源
问答
  • 本发明属于多数据库的联机数据交互领域,具体涉及一种跨机房数据库的数据一致校验方法。背景技术:伴随着B2B电子商务行业的发展,互联网服务业务越来越多,用户基数也越来越大,为保障可靠性的需求,网站多会部署...

    cbedbb42a71819725cb70a58cb6dfa71.gif

    本发明属于多数据库的联机数据交互领域,具体涉及一种跨机房数据库的数据一致性校验方法。

    背景技术:

    伴随着B2B电子商务行业的发展,互联网服务业务越来越多,用户基数也越来越大,为保障可靠性的需求,网站多会部署在在不同地域的机房中,各机房中部署数据库系统,并提供完整的网站服务,各机房数据库之间数据互相复制,保证各机房都有一套完整的数据。然而,多机房最大的挑战是机房之间因网络延迟而带来的数据更新延迟,最终导致各机房数据库之间的数据不一致。现有主备数据库校验一致性技术中都是将在同一时间的主数据库和备用数据库进行比对以确定两个数据库之间的数据是否已实现同步,然而,因数据同步一般是在主数据库发生数据更新后,主数据库再将更新的数据同步到备用数据库中,这样就导致数据同步过程中会存在一定的延时,如果以同一时间点两个数据库之间的数据进行比对的话,往往会因为时间延迟问题导致本该判定为一直的数据被判为不一致;常用的数据库一致性技术校验方法是先对数据库中的表关键字排序,随后再以相应的算法比较,这类解决方案占用诸如内存、swap空间能大量数据库资源,在数据量巨大的时候尤为明显,甚至影响数据库的性能。

    为在不影响数据库性能的前提下解决数据库不一致的问题,专利“数据库一致性校验方法及系统、定位数据库差异的方法及系统(申请号:201310704107.X)”做了技术探究,提出一种校验数据库不一致性的方法,具体步骤包括:a.按照预定条件将主数据库与备数据库中的数据行分组;b.计算主数据库每一分组及备数据库每一分组的md5值;c.将所计算的主数据库的每一分组的md5值与相应的备数据库分组的md5值比较,如果主数据库所有分组的md5值与相应的备数据库分组的md5值一致,则表明主数据库与备数据库一致。还提供相应的系统,以及基于该方法的定位数据库差异的方法及系统。该专利虽然能够以较小的计算量及网络数据传输量,定位到存在差异的数据,但该专利仍旧还仅停留在主备数据库一致性校验的研究上,而且采用分组形式校验并不适用于大量不一致数据,反而将带来因不一致数据分散在不同分组而导致需要重复查询数据的问题,同时该专利也没有对如何实现跨地域数据库间的数据自动化定时校验给予明确的解决方案。

    技术实现要素:

    为解决现有技术存在的缺陷,本发明目的是,提供一种跨机房数据库数据一致性校验的方法,通过在跨地域的数据库间部署消息系统,并预先配置校验任务信息,包括校验频率、有校验需要的数据库表及校验字段;当校验启动后,能按照预先设置的校验频率,定时地启动校验操作,并在校验任务过程中持续地收集各个数据库表内某一具体数据的校验值,实时反馈校验结果,不仅保证在跨地域环境中自动化且高效地发现不一致的问题,而且能准确定位到具体的数据,有利于提高数据库不一致性问题的解决速度。

    本发明的技术方案是,一种跨机房数据库数据一致性校验的方法,具体步骤包括:步骤1:一致性校验环境的设置,具体为:在各个地域的机房内分别部署主节点数据库和子节点数据库,且每个数据库中设有相同的表结构;主节点数据库和子节点数据库之间构建消息系统,实现跨地域数据库间以消息传递的方式传输校验值;

    步骤2:配置校验任务信息,校验任务信息包括校验执行的频率、有校验需求的数据库表及有校验需求的表字段;

    步骤3:按照校验执行的频率,每隔固定的时间段,主节点数据库主动触发校验任务,待校验任务开始后,主节点数据库将校验任务信息,包括“有校验需求的数据库、表及有校验需求的表字段”,以消息传递的形式,通过数据库间的消息系统发送至各个子节点数据库;

    步骤4:各个子节点数据库接收到校验任务信息后,提取信息中数据库、数据表及表字段信息指令,当前子节点数据库中从本数据库中查询数据表的特定表字段,并按照表主键排序提取具体数据并通过加密算法的计算,生成唯一的校验值,并将最终的校验值结果以消息传递的形式,通过数据库间的消息系统批量发送至主节点数据库;

    步骤5:主节点数据库一直保持接收各子节点数据库发送数据的状态,一边接收校验结果,一边对校验结果进行比对,并判断各个子节点的校验结果是否一致;

    如果一致,表明各机房数据库中的数据是一致的;

    如果不一致,表明各机房数据库中的数据是不一致的,记录不一致的数据;

    步骤6:待主节点数据库将所有子节点数据库发送的校验值全部比对结束后,将所有已记录的不一致数据存储,以做后续的分析;

    步骤7:按照校验的频率,每当过一个间隔期,特定数据表中特定字段的校验任务重新开启,转步骤2:

    有益效果:本发明与现有技术相比,具备的技术效果有:

    (1)本发明通过构建消息系统,搭建跨地域数据库之间的消息传递机制,并以提前配置校验任务信息的方式,控制数据一致性校验的按需执行和执行频率,实现跨地域数据库一致性校验的自动化;

    (2)本发明通过对每一条数据单独计算校验值,以最小的成本,不仅准确定位到存在差异的主或子节点数据库,而且能具体到数据库中的某一个数据,有利于提高数据库不一致性问题的解决速度;

    (3)本发明通过为数据库及表校验配置校验信息,将校验以任务的形式交由主节点管理和控制,实现针对特定表及表内特定字段的定时校验,提高校验过程的自动化和定制化。

    附图说明

    图1为本发明实施例中数据库一致性校验结构示意图

    图2为本发明实施例中数据库一致性校验流程图;

    图3本发明实施例中主数据库发送数据校验信息命令的示意图

    图4本发明实施例中各子节点反馈校验值结果的示意图

    具体实施方式

    为了使本发明的目的、技术方案更加清楚,下面结合附图和具体实施例对本发明进行详细描述。

    图1为本发明实施例中数据库一致性校验结构示意图,本发明实施例中有4个数据中心,即IDC1、IDC2、IDC3及IDC4,4个数据中心可设置在不同地域,也可设置在不同地域;每一个机房内部署一个数据库,即DB1、DB2、DB3、DB4,且4个数据库的表结构保持一致;根据实际的校验需求,选取任意数据中心内的数据库作为主节点和子节点;本发明实施例选用IDC1中的数据库DB1作为主节点,其余3个数据库作为子节点;主节点数据库和子节点数据库之间构建消息系统MQ,通过消息系统MQ,跨地域数据库间以消息传递的方式传输校验值;

    图2是本发明实施例中数据库一致性校验方法的流程图,应用于校验主数据库与备数据库之间的一致性。以验证数据表A内数据一致性为例,校验步骤具体包括:

    步骤201:配置数据表A校验的任务信息,具体包括校验执行的频率、有校验需求的数据库表及有校验需求的表字段,并交由主节点数据库DB1管理此任务;

    步骤202:按照校验频率,每隔固定的时间段,主节点数据库DB1主动触发校验任务,待校验任务开始后,主节点数据库DB1将校验任务信息,包括“有校验需求的数据库、表及有表A的表字段;接着,按照表主键排序提取表A中的具体数据,结合任意加密算法计算,生成关于表A的唯一校验值,并将最终的校验值结果以消息传递的形式,通过数据库间的消息系统MQ批量发送至主节点数据库DB1,如图4;

    步骤204:主节点数据库DB1一直保持接收各子节点发送数据的状态,一边接收校验结果,一边对校验结果进行比对,并判断各个子节点的校验结果是否保持一致;

    如果一致,表明各机房数据库中的数据是一致的,删除已参与校验的结果;

    如果不一致,表明各机房数据库中的数据是不一致的,记录不一致的数据库及数据中心;

    步骤205:待主节点将所有子节点发送的校验值全部比对结束后,将所有已记录的不一致数据存储,以便后续提取进行分析;

    步骤206:按照校验的频率,每当过一个间隔期,特定数据表中特定字段的校验任务重新开启,转步骤201:

    所属领域的普通技术人员应当理解:以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

    展开全文
  • 本文分享了MySQL复制数据一致校验和修复的详细步骤及其自动化实现思路和方法,对MySQL复制架构运维中该项工作的实施及其自动化具有较好的借鉴意义。

    微信扫一扫关注我的公众号或者搜索添加“MySQL技术的学习分享”,可以更快速更实时地获取我的最新文章。


    1.    引言

    MySQL主从复制”技术在互联网行业常见高可用架构中应用非常广泛,例如常见的一主一从复制架构、keepalivedMySQL双主(主从)复制架构、MHA+一主两从复制架构等等都应用了MySQL主从复制技术。但因主从复制是基于binlog的逻辑复制,难免出现复制数据不一致的风险,这个风险不但会引起用户数据访问前后不一致的风险,而且会导致后续复制出现10321062错误进而引起复制架构停滞的隐患,为了及时发现并解决这个问题,我们需要定期或不定期地开展主从复制数据一致性的校验和修复工作,那么如何实现这项工作呢?又如何实现这项工作的自动化呢?我们来探讨这些问题。

     

    2.    数据一致性校验和修复方法

    为了实现主从复制数据一致性校验和修复,我们首先推荐两个热门工具,分别是percona公司的 pt-table-checksumpt-table-sync,前者用来实现主从复制数据一致性的校验,后者实现数据修复,将数据修复到一致。


    2.1        工作原理

            pt-table-checksum通过SQL在主库执行数据块的校验,再将相同的语句传送到从库,并在从库上计算数据块的校验,最后将主从库相同块的校验值进行对比,辨别主从数据是否不一致。

    pt-table-sync用来修复主从复制数据的不一致,使得它们修复到最终一致,也可以实现多个实例或者是应用双写或多写的多个不相关的数据库实例修复到一致。同时它还内部集成了pt-table-checksum的校验功能,可以一边校验一边修复,也可以基于pt-table-checksum的计算结果来进行修复。

     

    2.2        下载方法

         这两个工具均包含在percona-toolkit里,线上下载地址:  https://www.percona.com/downloads/percona-toolkit/2.2.2/

         在设备上直接下载的指令如下,下载后解压使用:wget https://www.percona.com/downloads/percona-toolkit/2.2.2/percona-toolkit-2.2.2.tar.gz

     

    2.3        校验和修复方法

    1)在主库创建校验账号

    GRANTUPDATE,INSERT,DELETE,SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'hangxing'@'MasterIP'identified by 'PASSWORD';

    GRANTALL ON test.* TO 'hangxing'@'MasterIP' IDENTIFIED BY 'PASSWORD';

    2)在主库创建校验信息表

    CREATETABLE IF NOT EXISTS checksums (

    db char(64)NOT NULL,

    tblchar(64) NOT NULL,

    chunk intNOT NULL,

    chunk_timefloat NULL,

    chunk_indexvarchar(200) NULL,

    lower_boundarytext NULL,

    upper_boundarytext NULL,

    this_crcchar(40) NOT NULL,

    this_cntint NOT NULL,

    master_crcchar(40) NULL,

    master_cntint NULL,

    tstimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY(db, tbl, chunk),

    INDEXts_db_tbl (ts, db, tbl)

    )ENGINE=InnoDB;

    3)判断主键

    若无主键做校验和修复对性能影响非常重,数据校验和修复最重要的约束便是主健,无主键或唯一索引,将导致修复不成功。

    主键判断语句:

    SELECTDISTINCT CONCAT(t.table_schema,'.',t.table_name) astbl,t.engine,IF(ISNULL(c.constraint_name),'NOPK','') AS nopk,IF(s.index_type ='FULLTEXT','FULLTEXT','') as ftidx,IF(s.index_type = 'SPATIAL','SPATIAL','') asgisidx FROM information_schema.tables AS t LEFT JOINinformation_schema.key_column_usage AS c ON (t.table_schema =c.constraint_schema AND t.table_name = c.table_name AND c.constraint_name ='PRIMARY') LEFT JOIN information_schema.statistics AS s ON (t.table_schema =s.table_schema AND t.table_name = s.table_name AND s.index_type IN('FULLTEXT','SPATIAL')) WHERE t.table_schema NOT IN('information_schema','performance_schema','mysql') AND t.table_type = 'BASETABLE' AND (t.engine <> 'InnoDB' OR c.constraint_name IS NULL ORs.index_type IN ('FULLTEXT','SPATIAL')) ORDER BY t.table_schema,t.table_name;

    4)主从数据校验

           主从数据校验使用pt-table-checksum实现,要在主库上执行,执行校验通过参数控制校验全库全表还是只校验核心表。

    校验指令举例:

    ./pt-table-checksum--nocheck-binlog-format --nocheck-plan --nocheck-replication-filters--replicate=test.checksums  --databases=db1--tables=tb1 -h 192.168.XXX.XX -P 3306-u'hangxing' -p'PASSOWRD' --recursion-method="processlist"

    解析: 

    --no-check-binlog-format 不检查复制的binlog模式。

           --nocheck-replication-filters 不检查复制过滤器,建议启用。

    --replicate=test.checksums 检查结果写入test库的checksums表里。

    --databases=db1  --tables=tb1 校验db1库里的tb1表,若无参数则校验全库全表。

    -h 192.168.XXX.XX -P 3306 主库IP地址和3306端口。

    -u'hangxing' -p'PASSOWRD' 校验账号密码。

    --recursion-method="processlist" processlist的方法来发现从库。

          执行后的输出结果:

    TS   ERRORS      DIFFS      ROWS  CHUNKS  SKIPPED   TIME  TABLE

    03-23T15:29:17    0     1    30000       1       0  1.270 testhx1.testhx1

    解析:

    TS            :完成检查的时间。 

    ERRORS     :检查时候发生错误和警告的数量。 

    DIFFS        0表示一致,大于0表示不一致。主要看这一列有无不一致数据。

    ROWS       :表的行数。 

    CHUNKS    :被划分到表中的块的数目。 

    SKIPPED    :由于错误或警告或过大,则跳过块的数目。 

    TIME         :执行的时间。 

    TABLE       :被检查的表名。 

        上述输出关键看DIFFS列,结果为0说明数据一致,无需进行数据修复,如果不为0则需要继续开展数据一致性修复工作。上述语句执行后也会将详细的内容会写入test库的checksums表中,可以查看这个库表得到详细的数据校验信息,此表中信息内容格式举例如下:  

            主库的test.checksums中输出this_crcmaster_crc,无不一致。

    mysql> select * fromtest.checksums;

    +---------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+

    | db      | tbl    | chunk | chunk_time | chunk_index | lower_boundary | upper_boundary | this_crc | this_cnt | master_crc| master_cnt | ts                  |

    +---------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+

    | testhx1 | testhx1 |     1 |  0.003661 | NULL        | NULL           | NULL           | cac6c46f|        4 | cac6c46f   |         4 | 2016-03-23 15:29:16 |

    +---------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+

    1 row in set (0.00 sec)

    从库的test.checksums中输出this_crcmaster_crc,不一致。

    mysql>select * from checksums;

    +---------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+

    |db      | tbl     | chunk | chunk_time | chunk_index |lower_boundary | upper_boundary | this_crc |this_cnt | master_crc | master_cnt | ts                  |

    +---------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+

    |testhx1 | testhx1 |     1 |   0.003661 | NULL        | NULL           | NULL           | 7c2e5f75|        5 | cac6c46f  |          4 | 2016-03-23 15:29:16 |

    +---------+---------+-------+------------+-------------+----------------+----------------+----------+----------+------------+------------+---------------------+

    1row in set (0.00 sec)

     

    5)主从数据修复

    pt-table-checksum工具确定确实存在数据不一致的情况下开始修复数据,数据修复使用工具pt-table-sync,内带校验功能,但前提是修复的表必须要有主键,这个工具也要在主库上执行。

    方法1:语句量大的情况下将修复的语句导入到sql文件中,再直接导入执行

    在主库用pt-table-sync打印出修复不一致数据的SQL,后将修复语句在从库执行。

    举例:

    pt-table-sync --print--sync-to-master h='SlaveIP',P=3306,u=hangxing,p='PASSWORD' --databases=db1--tables=tb1 > /tmp/repair.sql

    方法2:语句量不大的情况下,将修复的语句print出来,再execute

    举例:

    打印数据修复语句

    pt-table-sync--print --sync-to-master h='SlaveIP',P=3306,u=hangxing,p=' PASSWORD '--databases=testhx1 --tables=testhx1

    DELETE FROM`testhx1`.`testhx1` WHERE `id`='11' LIMIT 1 /*percona-toolkit src_db:testhx1src_tbl:testhx1 src_dsn:P=3306,h=’MasterIP’,p=...,u=checksums dst_db:testhx1dst_tbl:testhx1 dst_dsn:P=3306,h='SlaveIP',p=...,u=checksums lock:1transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:24745 user:hangxinghost:XXXXXXXXXX*/;

    REPLACEINTO `testhx1`.`testhx1`(`name`, `age`, `id`) VALUES ('bobby', '6', '7')/*percona-toolkit src_db:testhx1 src_tbl:testhx1 src_dsn:P=3306,h=’MasterIP’,p=...,u=hangxingdst_db:testhx1 dst_tbl:testhx1 dst_dsn:P=3306,h=’SlaveIP’,p=...,u=hangxinglock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:24745user:root host: XXXXXXXXXX */;

    REPLACEINTO `testhx1`.`testhx1`(`name`, `age`, `id`) VALUES ('lily', '5', '9')/*percona-toolkit src_db:testhx1 src_tbl:testhx1 src_dsn:P=3306,h=’MasterIP’,p=...,u=hangxing  dst_db:testhx1 dst_tbl:testhx1dst_dsn:P=3306,h=’SlaveIP’,p=...,u=hangxing lock:1 transaction:1 changing_src:1replicate:0 bidirectional:0 pid:24745 user:root host: XXXXXXXXXX */;

    执行数据修复语句

    pt-table-sync--execute --sync-to-master h='SlaveIP',P=3306,u=hangxing,p='PASSWORD'--databases=testhx1 --tables=testhx1

    6)再次校验

       上述修复完成之后,需要再次执行一次数据校验,确保数据成功修复,校验方法同(4)主从数据校验。


    2.4 值得注意的点

    1)校验修复工作每月定期开展;

    2)主从复制架构在割接操作前后均需执行数据校验和修复工作;

    3)主从复制出现故障后要开展数据校验和修复工作;

    4)校验修复需在业务低谷期进行,CPU利用率超过60%时不建议做数据校验和修复;

    5)校验和修复必须在主库进行;

    6)数据库的表要有主键,否则校验效率极差,并且修复不成功。

     

    3.数据一致性校验和修复的自动化实现

    理解上述方法后,我们可以顺利完成主从复制数据一致性的校验和修复工作,但是这项工作在MySQL主从复制架构维护中开展频率较高,包括定期和各种不定期的情况,每次都手工开展耗时耗力,并且容易出现人为错误及隐患,因此,我们考虑将这项工作通过脚本实现自动化。


    3.1前提准备

    创建校验账号,创建校验结果输出表,配置两台主机的ssh免密码登录。


    3.2自动化实现

    (1)部署自动化脚本和定时任务

    理解数据一致性校验和修复的全部原理和详细步骤,将其转化为多个自动化脚本,分别部署在主从库上,每月定期执行可通过在主库制定crontab定时任务调用主从库脚本实现,不定期执行可通过手动调用主从库部署的自动化脚本来实现。

    2)自动化脚本实现步骤

    a.DB相关信息赋予对应参数,如账户密码、IP、端口、常用指令等等

    dbuser=XXXX

    dbpasswd="XXXXX"

    port=3306

    mysql_commend="mysql-u${dbuser} -p${dbpasswd} -P${port}"

    master_ip=XXXXX

    slave_ip=XXXXX

    password="XXXXX"

    date=`date+%Y%m%d`

    logfile="XXXXX"

    hostname=`XXXXX`

    b.检查ssh免密码登录是否成功;

    ssh_status=`XXXXX`

        if [ $ssh_status != $hostname ]; then

        echo -e "\nthe ssh should berepair" >$logfile

        exit

    else

        echo -e "\nthe ssh is ok">$logfile

    fi

    c.脚本实现准备工作:包括账号密码的创建、建立校验结果输出表,代码可参见第2小节;

    d.将主库的脚本执行校验和主键判断写成联合SQL语句,实现剔除无主键表的所有表的自动数据校验,并将结果存入所建表中;

    selectXXXXX NOT IN XXXXX

    e.从库部署检查校验结果输出表的脚本,主库执行d后自动登录从库调用这个脚本,实现对从库上输出表中校验字段的对比如master_crc this_crc,找到数据不一致的表,并且通过执行调用修复工具的指令实现不一致数据修复语句的print

    master_cnt<> this_cnt OR master_crc <> this_crc OR isnull(master_crc)<> isnull(this_crc))

    fprint结果自动存储从库的某个路径文件下;

    intooutfile '/tmp/execute_sql.sh'

    g.主库自动登录从库scp获取语句修复文件;

    scp/tmp/execute_sql.sh root@$master_ip:/tmp/execute_sql.sh

    h.主库上自动执行修复语句;

    sh/tmp/execute_sql.sh

           i.清理掉各个中间文件,中间表等

           上述内容记录了该项工作的自动化实现思路及部分实现要点,自动化便是通过在这个思路的基础上编写主从库部署的脚本来实现,目前已亲测成功,已实现自动化的数据校验和修复,说明上述思路正确。


    4.结语

        本文分享了MySQL复制数据一致性校验和修复的详细步骤及其自动化实现思路和方法,对MySQL复制架构运维中该项工作的实施及其自动化具有较好的借鉴意义。


    展开全文
  • Mongoose 数据校验

    2020-03-18 14:41:19
    Mongoose为了保证数据库数据的一致性,提供了对数据校验方法,常用的校验属性有以下这些: 1. required 必须传入,用于任意类型 2. max 最大值,用于 Number 类型数据 3. min 最小值, 用于 Number ...

    Mongoose为了保证数据库数据的一致性,提供了对数据校验的功能,常用的校验有以下这些:

    1. required

    必须传入,用于任意类型

    2. max
     
    最大值,用于 Number 类型数据
     
    3. min
     
    最小值, 用于 Number 类型数据
     
    4. enum
     
    枚举类型,要求数据必须满足枚举值 enum: ['0', '1', '2'],用于 String 类型
     
    5. match
     
    匹配正则,要求增加的数据必须匹配正则表达式,用于 String 类型
     
    6. maxlength
     
    最大长度,输入字符的长度不能超过该长度,用于 String 类型
     
    7. minlength
     
    最小长度,输入的字符的长度最小长度,用于 String 类型
     
    8. validate
     
    自定义校验,用特定的方法来约束数据,用于任意类型
     
     
    以下是使用实例
     
    // 引入自定义的连接数据库的文件
    var mongoose = require('./db.js');
    var UserSchema = mongoose.Schema({
        name: {
            type: String,
            trim: true,
            // 必须传入       
            required: true
        },
        sn: {
            type: String,
            index: true,
            // 最大长度
            maxlength: 20,
            // 最小长度
            minlength: 10,
            // 正则匹配
            match: /^sn(.*)/,
            // 自定义校验
            validate: function (sn) {
                return sn.length >= 10;
            }
    
        },
        phone:{ 
            type:Number, 
            // 正则匹配
            match: /^\d{11}$/ 
        },
        age: {
            type: Number,
            // 最小值
            min: 0,
            // 最大值
            max: 150
        },
        status: {
            type: String,
            default: 'success',
            // 值的枚举范围
            enum: ['success', 'error']
        }
    })
    module.exports = mongoose.model('User', UserSchema, 'user');
    
    
    

     

     
    展开全文
  • 主从数据一致校验及修复方法 需要安装percona-toolkit pt-table-checksum 连接主库信息 200G 的库可能 3 个小时   pt-table-checksum--nocheck-replication-filters --no-check-binlog-format--...

    show slavestatus\G

     

    IO_thread

    Master_Log_File:mysql-bin.000001

    Read_Master_Log_Pos:2049

    SQL_thread

    Relay_Master_Log_File:mysql-bin.000001

    Exec_Master_Log_Pos:2049

     

    同步延时

    Seconds_Behind_Master:0

     

    错误处理:

    1032错误找不到记录

    在从库上添加记录

    如果为delete,可直接skip,跳execued +1位置

    start slave sql_thread;

     

    1062错误主键冲突

    在从库上删除主键冲突记录

     

     

    rpm -ql percona-toolkit-2.2.15-2.noarch

     

    主从数据一致性校验及修复方法

    需要安装percona-toolkit

    pt-table-checksum连接主库信息

    200G的库可能3个小时

     

    pt-table-checksum--nocheck-replication-filters --no-check-binlog-format--replicate=thunder.checksums --create-replicate-table --databases=thunder   -h 192.168.199.116 -P 3316 -u thunder -pthunder --recursion-method="processlist"

     

    利用 --print把执行语句打印出来

    pt-table-sync--replicate=thunder.checksums  --recursion-method="processlist" --databases=thunderh=192.168.199.116,P=3316,u=thunder,p=thunder --print

     

    利用 --execute把执行执行

    pt-table-sync--replicate=thunder.checksums  --recursion-method="processlist" --databases=thunderh=192.168.199.116,P=3316,u=thunder,p=thunder --execute

     

    Tips:

    利用PTDEBUG=1学会看调整

     

     

     

     

    展开全文
  • 今天在开发补货管理模块时,要新增加一...之前在写方法的时候,还没体会到数据一致性的问题。但是昨天由老欧写了一个接口给我看了之后,发现比我写的方法多用到了表里的lastModifiedOn和modifiedBy字段。来校验数据...
  • 3、可实现混合云自建实例的数据校验(RDS云产品例外) 使用方法: 校验两个独立数据库,无主从复制关系,排除特定数据库 pt-table-sync --charset=utf8 --ignore-databases=mysql,sys u=dlan,p=root123,h=172.16.0.29...
  • 对多条数据进行聚合,生成对对应checksum,用于批量数据校验,加快校验速度。 比对不同数据源中的聚合checksum,找出不一样的批次 逐条比对(不一致批次内的)每一条记录的checksum,找出不一致的数据 对不一致...
  • 今天在开发补货管理模块时,要新增加一个接口,功能是可以修改补货管理表里的订单状态。 在数据库里,由一个orderStatus字段来表示订单的当前状态,而这...之前在写方法的时候,还没体会到数据一致性的问题。但是...
  • 主要设计思路和算法主从数据校验的基本思路是,对主数据库某数据表使用一系列算法最终获得一个checksum,再分别从每个从数据库获得相应数据表的checksum进行比对,如果不一致,则表示主从不同步。获得checksum的方法...
  • 织梦dedecms数据校验不对,程序返回解决方法 根据提示去检查一下几个程序文件: 1:/plus/diy.php 文件是否存在,是否对应。 2:: name,id,type,是否和后台自定义表单对应。 3:value值是否和后台自定义...
  • mysql主从数据一致校验,常用的方法是Percona-Toolkit的组件pt-table-checksum,这东西怎么用网上一大堆,就不啰嗦了。主要说一下通过dsns方式发现从库的一种方式。 pt工具连接到主库后,默认是是通过show ...
  • 校验数据方法有很多种,此文利用奇偶校验对发送方和接受方数据进行校验(可以在一串数据中设置多组校验数据,此文只设定一组校验数据)。发送规则:发送数据为十六进制,相邻2个数据为一组,每组数据相加,数据...
  • 由于部分原因,系统现需要将数据进行动态处理,问题较为复杂。稍后先捋清楚背景,做此记录。...页面与数据去匹配发现值是不一致的。先不考虑问题怎么产生的。解决方法是: $(obj).attr("value",$(obj).val()); ...
  • cached根据protobuf的元数据机制去保存和读取数据库中的数据。 为了简化服务器交互的复杂度,逻辑服务器用的protobuf和cached的protobuf,数据结构要完全一致
  • DDD中数据校验

    2019-06-10 16:52:22
    入参校验 Controller校验 可以更友好的返给前端...数据库中数据校验 Repository校验 作为数据存储方提供数据的完整性,domain只解决业务问题 可以对id不存在的进行进行处理 可以处理冗余字段的一致性 Domain.re...
  • 源端和目标端的2张表上的数据是否一致,实际上后来想了下shareplex 本身应当具有这种数据校验功能, 但是还是希望从数据库的角度得出几种可用的同表结构下的数据比对方法。 注意以下几种数据比对方式适用的前提条件...
  • 数据一致性检查的4种方法

    千次阅读 2012-12-08 11:10:00
    每一个数据块头部都有一个“校验和”字段 当数据块被写回磁盘前,Oracle会重新计算这个校验和 并记录到这个字段,最终写回磁盘 下次数据块被读入内存时,Oracle会重新计算数据块的校验和 并与校验和字段中的值相...
  • 什么是数据一致性?每一个数据块头部都有一个“校验和”字段当数据块被写回磁盘前,Oracle会重新计算这个校验和并记录到这个字段,最终写回磁盘下次数据块被读入内存时,Oracle会重新计算数据块的校验和并与校验和...
  • 本文主要阐述数据校验过程设计,供相关人员借鉴。 数据一致性校验最核心内容项 校验手段 根据常见数据存储类型,主要完成对象级记录一致性校验,字段级数值、时间、字符类型的数据一致性校验,即常规提到的表级...
  • 源端和目标端的2 张表上的数据是否一致,实际上后来想了下shareplex 本身应当具有这种数据校验功能, 但是还是希望从数据库的角度得出几种可用的同表结构下的数据比对方法。 注意以下几种数据比对方式适用的前提...
  • 本文主要阐述数据校验过程设计,供相关人员借鉴。数据一致性校验最核心内容项校验手段根据常见数据存储类型,主要完成对象级记录一致性校验,字段级数值、时间、字符类型的数据一致性校验,即常规提到的表级count、...
  • 一种是自己封装Validate插件进行表单验证,基于以上原因,小女子自己封装了前端数据校验规则一套,并且与云开发后端数据校验的写法和规则一致(云开发后端数据校验体系参见上一篇笔记:)) 校友录小程序集中校验...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 301
精华内容 120
关键字:

数据校验一致方法