日期:2014-05-16  浏览次数:20960 次

如何比较两个数据库中的表和记录的不同?版本比较
有一个数据库,但是他们时间都是不相同的,那么如何有效的比较两个数据库数据表的不同?
主要是比较两个数据库表的不同,还有就是表的数据记录数的不同。

我用的方法就是在CMD里面列出两个数据库的表的列表SHOW TABLES,然后各自保存到txt文件,然后再用Notepad++来比较文件,但是这样只能看出两个数据库的表的不同,却不能看出各个表的记录数的不同。
如何才可以快速有效的比较两个数据库的表还有表的记录不同?


------解决方案--------------------
use database_a;
select * from table into outfile "compare_a.txt";
use database_b;
select * from table into outfile "compare_b.txt";
然后比较这两个txt?
------解决方案--------------------
如果是myisam引擎 可以去information_schema.table来比较行数

如果是innodb且用了innodb_file_per_table这个参数,那么可以直接去data目录去比较每个物理文件大小
前提是表结构索引都一样,而且是大致比较 并不精准
------解决方案--------------------
楼主可否转换一下思路。
直接利用集合运算(sql语句),看看所有的同名表是否含有相同的内容就可以了。应用不需要导出表的内容了
------解决方案--------------------
比较2个库的结构是否一致?

简单的办法把2个库都备份出来,mysqldump ... -d >/home/a.txt
只备份结构,然后找一个文件比较的工具,比较这2个文件就可以了。很快,不同的地方会有明显的提示的。

比较2个库的数据是否一致?在2个库里对每个表分别checksum,然后比较值是否一样。


SQL code

mysql> CHECKSUM TABLE lim1;
+-----------+------------+
| Table     | Checksum   |
+-----------+------------+
| test.lim1 | 3181119096 |
+-----------+------------+
1 row in set (0.00 sec)

mysql> CHECKSUM TABLE lim;
+----------+------------+
| Table    | Checksum   |
+----------+------------+
| test.lim | 1197970544 |
+----------+------------+
1 row in set (0.29 sec)

mysql> CHECKSUM TABLE lim;
+----------+------------+
| Table    | Checksum   |
+----------+------------+
| test.lim | 1197970544 |
+----------+------------+
1 row in set (0.33 sec)