MySQL数据库迁移后数据比对方式

MySQL数据库在迁移的时候,需要核对数据。一般人想当然会使用如下的语句,由于数据导入之后,数据字典不能及时更新,会出现不准确的现象。
#数据库中每个表的数据量
SELECT table_name,table_rows FROM information_schema.tables
WHERE TABLE_SCHEMA = ‘数据库名’ ORDER BY table_rows DESC;

当然如果要更准确,可以使用pt-checksum工具,但pt-checksum只能对比主从复制的数据,并且效率和使用上也不太方便。本文教你另外一种方案,可以作为迁移前后数据对比一个简便方法,虽然笨拙,但准确。

###生成批量查询表记录语句
select concat(‘select "’, table_name, ‘", count(*) from ‘, TABLE_SCHEMA, ‘.’,table_name,’;’) from information_schema.tables where TABLE_SCHEMA not in (‘information_schema’,‘performance_schema’,‘mysql’,‘sys’);

###然后在需要比对的数据库进行查询,比对查询后的结果

###按照上述思路,写成shell脚本

# cat checkdata.sh 
#!/bin/sh

FILE=/tmp/check.sql
CKSQL="select concat('select \"', table_name, '\", count(*) from ', TABLE_SCHEMA, '.',table_name,';') from information_schema.tables where TABLE_SCHEMA not in ('information_schema','performance_schema','mysql','sys');"

#第一个数据库的连接属性(源端)
DB01_HOST=10.10.10.151
DB01_PORT=3306
DB01_USER=root
SRC_PWD='rootmysql'
SRC_FILE=/tmp/src.txt

#第二个数据库的连接属性(目标端)
DB02_HOST=10.10.10.153
DB02_PORT=3306
DB02_USER=root
DEST_PWD='rootmysql'
DEST_FILE=/tmp/dest.txt

#从源端生成查询表记录语句
echo "======= start src db count ========"
mysql -h ${DB01_HOST} -u ${DB01_USER} -p${SRC_PWD} -N -s -e "$CKSQL"  > $FILE 2>&1;

#删除第一行
sed -i "1d" $FILE

#源端执行查询表记录语句
echo "======= start dest db count ========"
mysql -h ${DB01_HOST} -u ${DB01_USER} -p${SRC_PWD} -N -s -e "source $FILE" > $SRC_FILE 2>&1;

#目标端执行查询表记录语句
mysql -h ${DB02_HOST} -u ${DB02_USER} -p${DEST_PWD} -N -s -e "source $FILE" > $DEST_FILE 2>&1;

echo "======= start diff file ========"
diff ${SRC_FILE} ${DEST_FILE}
if [ $? -eq 0 ];then
    echo "file all same!"
else
    echo "file have different!!!"
fi



免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论