当前位置:  开发笔记 > 编程语言 > 正文

比较两个MySQL数据库

如何解决《比较两个MySQL数据库》经验,为你挑选了10个好方法。

我目前正在使用MySQL数据库开发应用程序.

数据库结构仍在不断变化,并在开发过程中发生变化(我更改了本地副本,只留下了测试服务器上的副本).

有没有办法比较数据库的两个实例,看看是否有任何变化?

虽然目前只是丢弃以前的测试服务器数据库是好的,因为测试开始输入测试数据可能会有点棘手.
同样的情况会更晚发生在生产中......

是否有一种简单的方法可以逐步更改生产数据库,最好是通过自动创建脚本来修改它?


答案中提到的工具:

Red-Gate的MySQL架构和数据比较(商业)

Maatkit(现在的Percona)

liquibase

蟾蜍

Nob Hill数据库比较(商业)

MySQL Diff

SQL EDT(商业)

Jared.. 210

如果您正在使用小型数据库,我发现在两个数据库上运行mysqldump并使用--skip-comments--skip-extended-insert生成SQL脚本的选项,那么在SQL脚本上运行diff非常有效.

通过跳过注释,您可以避免无意义的差异,例如运行mysqldump命令的时间.通过使用该--skip-extended-insert命令,您可以确保使用自己的insert语句插入每一行.这消除了单个新记录或修改记录可能在将来的所有插入语句中引起连锁反应的情况.使用这些选项运行会产生更大的转储而没有注释,所以这可能不是你想要在生产中使用的东西,但是对于开发它应该没问题.我举了下面使用的命令的例子:

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql

`-d`,`--no-data`可能对那些需要生产使用的人感兴趣,但只关心模式 (41认同)

命令行识字的双倍投票!!! (12认同)

一个更好的工具是MySQL自己开发的[mysqldbcompare](http://dev.mysql.com/doc/mysql-utilities/1.4/en/mysqldbcompare.html)实用程序,可以在Windows,Linux或Mac - 它还可以输出数据和模式更改的SQL语句,并且比简单的命令行diff可以确定的测试更多. (7认同)

要比较*数据*,请改用它; 仍然是一些MySQL4 +关于字符集等的评论.`myqldump --opt --compact --skip-extended-insert -u user -p db table> file.sql` (5认同)

对于有颜色的漂亮差异尝试`vimdiff` (4认同)


Anson Smith.. 99

Toad for MySQL具有数据和模式比较功能,我相信它甚至可以创建同步脚本.最重要的是,它是免费软件.



1> Jared..:

如果您正在使用小型数据库,我发现在两个数据库上运行mysqldump并使用--skip-comments--skip-extended-insert生成SQL脚本的选项,那么在SQL脚本上运行diff非常有效.

通过跳过注释,您可以避免无意义的差异,例如运行mysqldump命令的时间.通过使用该--skip-extended-insert命令,您可以确保使用自己的insert语句插入每一行.这消除了单个新记录或修改记录可能在将来的所有插入语句中引起连锁反应的情况.使用这些选项运行会产生更大的转储而没有注释,所以这可能不是你想要在生产中使用的东西,但是对于开发它应该没问题.我举了下面使用的命令的例子:

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql


`-d`,`--no-data`可能对那些需要生产使用的人感兴趣,但只关心模式
命令行识字的双倍投票!!!
一个更好的工具是MySQL自己开发的[mysqldbcompare](http://dev.mysql.com/doc/mysql-utilities/1.4/en/mysqldbcompare.html)实用程序,可以在Windows,Linux或Mac - 它还可以输出数据和模式更改的SQL语句,并且比简单的命令行diff可以确定的测试更多.
要比较*数据*,请改用它; 仍然是一些MySQL4 +关于字符集等的评论.`myqldump --opt --compact --skip-extended-insert -u user -p db table> file.sql`
对于有颜色的漂亮差异尝试`vimdiff`

2> Anson Smith..:

Toad for MySQL具有数据和模式比较功能,我相信它甚至可以创建同步脚本.最重要的是,它是免费软件.


我对这个工具感到很兴奋,直到我意识到它在windows中运行,而不是linux.回到搜索...
使用`--run-all-tests --difftype sql --disable-binary-logging`选项的mysqldbcompare可以完成几乎相同的工作(除了输出与注释混合,并且字符串中的特殊字符不会被转义).
@Anson Smith你能告诉我linux的另一种选择吗?
提到的所有工具看起来都很好.我现在正在任意选择Toad,直到我可以进行更多的研究.
对我来说很棒.我需要它做的所有事情和突出显示的更改记录的单元格使得很容易看到改变了什么.

3> seanyboy..:

我使用一个名为Navicat的软件来:

将Live数据库同步到我的测试数据库.

显示两个数据库之间的差异.

这需要钱,它只是Windows和Mac,它有一个糟糕的用户界面,但我喜欢它.


很好的捕获,我甚至不知道它有这些功能.到目前为止,它是mac上最好的东西.

4> Yury Litvino..:

SQLyog(商业)中有一个Schema Synchronization Tool,它生成用于同步两个数据库的SQL.

在此输入图像描述



5> andyhky..:

从功能比较列表中...... MySQL Workbench在其社区版中提供了Schema Diff和Schema Synchronization.


效果很好!它是免费的,谢谢.对于那些找不到它的人(像我一样).它在这里:数据库 - >逆向工程师 - >在MySQL模型或EER图中 - >数据库 - >与任何源同步

6> develCuy..:

肯定有很多方法,但在我的情况下,我更喜欢dump和diff命令.所以这是一个基于Jared评论的脚本:

#!/bin/sh

echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"

dump () {
  up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
  mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
}

rm -f /tmp/db.diff

# Compare
up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

欢迎反馈:)



7> jmpeace..:

dbSolo,已付款,但此功能可能是您正在寻找的功能 http://www.dbsolo.com/help/compare.html

它适用于Oracle,Microsoft SQL Server,Sybase,DB2,Solid,PostgreSQL,H2和MySQL 替代文字



8> Zac..:

如果您只需要比较模式(而不是数据),并且可以访问Perl,mysqldiff可能会起作用.我使用它是因为它允许您将本地数据库与远程数据库(通过SSH)进行比较,因此您无需费心转储任何数据.

http://adamspiers.org/computing/mysqldiff/

它将尝试生成SQL查询以同步两个数据库,但我不相信它(或任何工具,实际上).据我所知,没有100%可靠的方法来反向设计将一个数据库模式转换为另一个数据库模式所需的更改,尤其是在进行了多次更改时.

例如,如果仅更改列的类型,则自动化工具可以轻松猜测如何重新创建该类型.但是如果您还移动列,重命名它,添加或删除其他列,那么任何软件包可以做的最好的事情就是猜测可能发生的事情.而你最终可能会丢失数据.

我建议跟踪您对开发服务器所做的任何架构更改,然后在实时服务器上手动运行这些语句(或将它们转换为升级脚本或迁移).它更乏味,但它会保证您的数据安全.当您开始允许最终用户访问您的网站时,您是否真的要进行持续繁重的数据库更改?



9> anders.norga..:

看看http://www.liquibase.org/



10> 小智..:

检查:http://schemasync.org/ schemasync工具对我有用,它是一个命令行工具,可以在linux命令行中轻松工作

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有