我是靠谱客的博主 秀丽毛巾,最近开发中收集的这篇文章主要介绍比较两个mysql数据库里面的表是否相同的一个校验脚本,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

比较两个mysql数据库里面的表是否相同的一个校验脚本


一、原理:采用CRC32算法进行校验。那么什么是CRC32算法呢?CRC32算法 的计算是非常非常非常严格的。严格到什么程度呢?你的程序只要被改动了一个字节(甚至只是大小写的改动),它的值就会跟原来的不同。所以只要给你的“原”程序计算好CRC值,储存在某个地方,然后在程序中随机地再对文件进行CRC校验,接着跟第一次生成并保存好的CRC值进行比较,如果相等的话就说明你的程序没有被修改/破解过,如果不等的话,那么很可能你的程序遭到了病毒的感染,或者被Cracker用16进制工具暴力破解过了。


二、脚本内容
[root@drbd-01 ~]#cat checksum.sh
#!/bin/bash
split=`echo + -{1..86} +| tr -d "[0-9]|"`
echo $split > /home/mysql/checksum/$5.checksum
printf  "| %-40s   | %-40s| n" TABLE_NAME CHECKSUM >> /home/mysql/checksum/$5.checksum
echo $split >> /home/mysql/checksum/$5.checksum
for table_name in `mysql -u$1 -p$2 -h$3 -P$4 -BNe "select table_name from information_schema.tables where table_schema='$5' and table_type='base table';"`
do
        column_name=`mysql -u$1 -p$2 -h$3 -P$4 -BNe "select column_name from information_schema.columns where table_schema='$5' and table_name='$table_name';"|tr 'n' ','|sed 's/,/`,`/g'|sed 's/^/`/'|sed 's/,`$//'`
 
        if_one_column=`echo $column_name|grep ,`
        if [ -z $if_one_column ];then
                checksum=`mysql  -u$1 -p$2 -h$3 -P$4 -BNe "select sql_no_cache COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32($column_name) AS UNSIGNED)), 10, 16)), 0) as checksum from $5.$table_name;"`
        else
                checksum=`mysql -u$1 -p$2 -h$3 -P$4 -BNe "select sql_no_cache COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('',$column_name)) AS UNSIGNED)), 10, 16)), 0) as checksum from $5.$table_name;"`
        fi
        printf  "| %-40s   | %-40s| n" $table_name $checksum >> /home/mysql/checksum/$5.checksum
 
done
 
echo $split >> /home/mysql/checksum/$5.checksum


三、执行脚本的方法
sh checksum.sh user passwd localhost 3306 dbname


四、例子
4.1、建立一个如下目录,用来存放校验码:
[root@drbd-01 ~]#mkdir /home/mysql/checksum/
4.2、如下方法执行脚本,用来对db1库里面的表进行校验:
[root@drbd-01 ~]# sh checksum.sh root "123" localhost 3306  db1
4.3、到 /home/mysql/checksum/目录下查看生成的校验值:
[root@drbd-01 ~]# cat /home/mysql/checksum/db1.checksum 
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| TABLE_NAME                                 | CHECKSUM                                | 
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| t1                                         | 77073096                                | 




4.4、重复上述4.2步骤,对其他机器上的数据库也生成校验码;
4.5、对比两个机器生成的校验码,如果值不同,表明对比的两张表数据不一样。


完。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-1854138/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28916011/viewspace-1854138/

最后

以上就是秀丽毛巾为你收集整理的比较两个mysql数据库里面的表是否相同的一个校验脚本的全部内容,希望文章能够帮你解决比较两个mysql数据库里面的表是否相同的一个校验脚本所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部