MySQL · 特性分析 · 数据一样checksum不一样

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 背景有一个特殊环境需要进行人肉迁移数据,对比了表里的数据一模一样,但是无论如何checksum就是不一致,那么问题出在哪里呢?问题排查数据是否一致眼睛都把屏幕盯穿了,也没发现不一致的数据。导出数据的方式checksum还是不一致,所以这个原因排除。MySQL版本嗯,这个确实不一样,源端是5.5,目的端是5.6,但是这个是checksum函数不一样吗?还是表的结构变了

背景

有一个特殊环境需要进行人肉迁移数据,对比了表里的数据一模一样,但是无论如何checksum就是不一致,那么问题出在哪里呢?

问题排查

数据是否一致

眼睛都把屏幕盯穿了,也没发现不一致的数据。

导出数据的方式

image
checksum还是不一致,所以这个原因排除。

MySQL版本

嗯,这个确实不一样,源端是5.5,目的端是5.6,但是这个是checksum函数不一样吗?还是表的结构变了?咨询了内核的同学,说checksum的源代码没变啊,接下来那应该是表结构变了?通过查手册发现:
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.
既然这样了,那我们就来验证下是不是因为datetime的问题。
image
嗯,确实是datetime的格式导致的。

总结

这个问题总结来说是因为MySQL5.5和5.6的时间存储格式有变化,导致了checksum不一样。

这个问题知道原因后觉得非常简单,但是排查起来却不是那么简单的。遇到问题不要慌,理出要查的1,2,3,然后用排除法一步一步验证就能知道问题在哪里了。

附一详细步骤如下:

源端:

1.备份结构和数据

mysqldump -h127.0.0.1 -P源端口 -u root --default-character-set=utf8 -B drcdb>src_lingluo.sql

2.拷贝文件

scp src_lingluo.sql lingluo.sss@目的端:/tmp

目的端:

3.把数据导进去

mysql>set names utf8;source /tmp/src_lingluo.sql;

4.在两边取checksum

sh get_checksum.sh

5.目的端:

scp table_checksum.txt lingluo.sss@目的端:/tmp

6.vimdiff 对比文件

如果文件内容一样的话,说明数据一样

附二get_checksum.sh

#!/bin/sh 
port=$1

table_list='`mysql -h127.0.0.1 -P${port} -u root -A -N << EOF | tail -n +3
    use db_name;show tables
EOF`'

for i in ${table_list}
do
    table_cs='`mysql -h127.0.0.1 -P${port} -u root -A -N -D db_name -e \"checksum 
table ${i};\"`'
    echo ${table_cs} >> table_checksum.txt
done
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 SQL MySQL
MySQL · 引擎特性 · 基于InnoDB的物理复制
最近有幸前去美国参加Percona Live 2016会议并分享了我们最近在MySQL复制上所做的工作,也就是基于InnoDB的物理复制。会后很多小伙伴私信我说分享的PPT太内核了,不太容易理解。因此本文主要针对分享的内容进行展开描述,希望能对大家有所帮助。 背景知识 在开始之前,你需要对Inn
6982 0
|
缓存 监控 关系型数据库
MySQL · 引擎特性 · WAL那些事儿
前言 日志先行的技术广泛应用于现代数据库中,其保证了数据库在数据不丢的情况下,进一步提高了数据库的性能。本文主要分析了WAL模块在MySQL各个版本中的演进以及在阿里云新一代数据库POLARDB中的改进。
2334 0
|
关系型数据库 MySQL
MySQL · RocksDB · 写入逻辑的实现
简介 在RocksDB中,每次写入它都会先写WAL,然后再写入MemTable,这次我们就来分析这两个逻辑具体是如何实现的. 首先需要明确的是在RocksDB中,WAL的写入是单线程顺序串行写入的,而MemTable则是可以并发多线程写入的。
1903 0
|
存储 关系型数据库 MySQL
MySQL · 特性分析 · MyRocks简介
RocksDB是facebook基于LevelDB实现的,目前为facebook内部大量业务提供服务。经过facebook大量工作,将RocksDB作为MySQL的一个存储引擎移植到MySQL,称之为MyRocks。 经过两年的发展,MyRocks已经比较成熟(RC阶段),现已进入了facebook MySQL的主分支了。MyRocks是开源的,参见git 。 下面对MyRocks做一个简单介绍,
2758 0
|
关系型数据库 MySQL 索引

相关产品

  • 云数据库 RDS MySQL 版