开发者社区> 技术小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MySQL · 特性分析 · 数据一样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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)
原文:【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)   1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.
4632 0
新手向: ECS搭建Java运行平台, 安装MySQL 以及Tomcat运行
阿里云搭建Java运行环境, 包括MySQL的安装, Tomcat的安装和运行, 以及部分问题解决, 适合新手.
3321 0
Windows 10下安装Mysql 5.7
mysql软件下载 mysql官方下载地址 01 02 03 04 mysql软件安装 05 06 07 08 09 10 ...
851 0
MySQL指令安装
MySQL指令安装 第一步:官网下载mysql压缩文件:https://dev.mysql.com/downloads/mysql/ 第二步:解压文件到 E:\mysql目录下 E:\mysql\mysql-5.
1143 0
Docker安装Mysql服务
拉取官方镜像 # docker pull mysql # docker inspect mysql | grep ''VERSION'' "GOSU_VERSION=1.
1223 0
运维CentOS7下mysql 5.7 下载并安装
打开https://dev.mysql.com/downloads/mysql/这个官网 [root@jiaxin-ceshi src]# wget https://cdn.mysql.com//Downloads/MySQL-5.
1447 0
Linux下yum安装MySQL
Linux下yum安装MySQL
9734 0
+关注
技术小能手
云栖运营小编~
7194
文章
9
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载