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

背景

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

问题排查

数据是否一致

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

导出数据的方式


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的问题。

嗯,确实是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
时间: 2024-09-21 13:00:01

MySQL · 特性分析 · 数据一样checksum不一样的相关文章

MySQL · 特性分析 · MDL 实现分析

前言 在MySQL中,DDL是不属于事务范畴的,如果事务和DDL并行执行,操作相关联的表的话,会出现各种意想不到问题,如事务特性被破坏.binlog顺序错乱等,为了解决类似这些问题,MySQL在5.5.3引入了MDL锁(Metadata Locking),关于其设计思路可以参考这两个worklog:WL#3726 和 WL#4284.本篇从代码实现角度对MDL进行分析. 重要数据结构 MDL 是在 MySQL server 层实现的一个模块,通过对外接口和server层其它模块进行交互,在sql

MySQL · 特性分析 · InnoDB transaction history

1. 背景 在写压力负载比较重的MySQL实例上, InnoDB可能积累了较长的没有被purge掉的transaction history,导致实例性能的衰减,或者空闲空间被耗尽,下面就来看看它是怎么产生的,或者有没有什么方法来减轻,避免这样的问题出现. 2. InnoDB purge概要 InnoDB是一个事务引擎,实现了MVCC特性,也就是在存储引擎里对行数据保存了多个版本.在对行数据进行delete或者update更改时,行数据的前映像会保留一段时间,直到可以被删除的时候. 在大部分OLT

MySQL · 特性分析 · MySQL 5.7 外部XA Replication实现及缺陷分析

MySQL 5.7 外部XA Replication实现及缺陷分析 MySQL 5.7增强了分布式事务的支持,解决了之前客户端退出或者服务器关闭后prepared的事务回滚和服务器宕机后binlog丢失的情况. 为了解决之前的问题,MySQL5.7将外部XA在binlog中的记录分成了两部分,使用两个GTID来记录.执行prepare的时候就记录一次binlog,执行commit/rollback再记录一次.由于XA是分成两部分记录,那么XA事务在binlog中就可能是交叉出现的.Slave端的

MySQL · 特性分析 · 企业版特性一览

背景 MySQL 企业版由 Oracle 公司维护,当然也是收费的.其产品类别也基本和 Oracle 数据库一致,包括标准版.企业版.集群版等.标准版包括基本的特性,价格也会比企业版便宜很多.今天和小编一起来看下 MySQL Enterprise Edition 提供的一些功能,这些功能的源码当然是不开源的,也是企业版的卖点. 企业级备份恢复 备份 备份工具提供 InnoDB 的联机在线备份,同时 MyISAM 引擎的备份会阻塞写入.联机备份是否阻塞应用,还要根据引擎的特性来定.这点上,Perc

MySQL · 特性分析 · Index Condition Pushdown (ICP)

前言 上一篇文章 提过,我们在之后的文章中会从 optimizer 的选项出发,系统的介绍 optimizer 的各个变量,包括变量的原理.作用以及源码实现等,然后再进一步的介绍优化器的工作过程(SQL 语句扁平化处理.索引选择.代价计算.多表连接顺序选择以及物理执行等内容),本期我们先看一下众所周知的 ICP,官方文档请参考这里. ICP 测试 首先,咱们来看一下打开 ICP 与关闭 ICP 之间的性能区别,以下是测试过程: 准备数据: create table icp(id int, age

MySQL · 特性分析 · MySQL 5.7新特性系列一

1. 背景 MySQL 5.7在2015-10-21发布了GA版本,即5.7.9,目前小版本已经到了5.7.12.5.7新增了许多新的feature和优化,接下来一个系列,我们就一起来尝尝鲜.首先这次主要是预览feature的变化以及兼容性问题.后面的系列,会针对重要的feature展开来学习. 2 安全相关的特性 2.1 认证插件 mysql.user表中的plugin更改成not null,5.7开始不再支持mysql_old_password的认证插件,推荐全部使用mysql_native

MySQL · 特性分析 · 5.7 代价模型浅析

代价模型 mysql 5.7代价计算相对之前的版本有较大的改进.例如 代价模型参数可以动态配置,可以适应不同的硬件 区分考虑数据在内存和在磁盘中的代价 代价精度提升为浮点型 jion计算时不仅要考虑condition,还要考虑condition上的filter,具体参见参数condition_fanout_filter 5.7 在代价类型上分为io,cpu和memory, 5.7的代价模型还在完善中,memory的代价虽然已经收集了,但还没有没有计算在最终的代价中. 5.7 在源码上对代价模型进

MySQL · 特性分析 ·MySQL 5.7新特性系列四

继上三期月报:MySQL 5.7新特性之一介绍了一些新特性及兼容性问题MySQL 5.7新特性之二介绍了临时表的优化和实现MySQL 5.7新特性之三介绍了undo表空间的truncate功能 这期我们一起来学习下MySQL 5.7的并行复制. 1. 背景 MySQL的master<->slave的部署结构,使用binlog日志保持数据的同步,全局有序的binlog在备库按照提交顺序进行回放. 由于新硬件的发展,SSD的引入和多core的CPU,master节点的并发处理能力持续提升,slav

MySQL · 特性分析 · innodb buffer pool相关特性

背景 innodb buffer pool做为innodb最重要的缓存,其缓存命中率的高低会直接影响数据库的性能.因此在数据库发生变更,比如重启.主备切换实例迁移等等,innodb buffer poll 需要一段时间预热,期间数据库的性能会受到明显影响. 另外mysql 5.7以前innodb buffer pool缓存大小修改不是动态的,重启才能生效.因此innodb buffer pool的预热和innodb buffer pool大小的动态修改,对性能要求较高的应用来说是不错的特性,下面