Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较两个数据库是否存在任何差异_Python_Mysql - Fatal编程技术网

Python 比较两个数据库是否存在任何差异

Python 比较两个数据库是否存在任何差异,python,mysql,Python,Mysql,我在临时服务器上有一个mysql数据库,在生产服务器上有另一个mysql数据库。起初,两者完全相同。后来,在模式更改、添加或删除某些表等方面对临时数据库进行了一些修改。现在,我需要将临时服务器的数据库与生产数据库进行比较,以便在生产中部署和更改 我知道有一些外部工具可用于此。 但我想知道是否可以使用一些mysql命令来实现这一点,或者编写python程序来实现这一点 如果有人知道这个问题的解决方法,请告诉我 做两个s,然后在它们上面运行diff[-du] $ mysqldump --databa

我在临时服务器上有一个mysql数据库,在生产服务器上有另一个mysql数据库。起初,两者完全相同。后来,在模式更改、添加或删除某些表等方面对临时数据库进行了一些修改。现在,我需要将临时服务器的数据库与生产数据库进行比较,以便在生产中部署和更改

我知道有一些外部工具可用于此。 但我想知道是否可以使用一些mysql命令来实现这一点,或者编写python程序来实现这一点

如果有人知道这个问题的解决方法,请告诉我

做两个s,然后在它们上面运行
diff
[-du]

$ mysqldump --databases prod > prod.sql
$ mysqldump --databases stage > stage.sql
$ diff -du stage.sql prod.sql

允许您比较两个数据库并确定差异。

如果您想编写所有代码来实现这一点,您可以自己区分表,但这并不简单(我知道,我已经做到了)。如果您想这样做,只需对每个数据库运行
SHOW TABLES
查询,然后对数据库中的每个表运行
SHOW FULL COLUMNS FROM:table
,然后构造查询以更新每个列/表/数据库


另一个可能更好的选择是使用现有的工具,不过它有一个API,或者你可以下载源代码并将其用作参考。

以下内容对我很有用。因为我只是想比较模式中的更改。我不想比较实际数据

$ mysqldump -u root -p --databases --no-data staging > stage.sql
$ mysqldump -u root -p --databases --no-data production > prod.sql
$ vimdiff stage.sql prod.sql

我只想比较一下模式。我不想比较这些数据。如果我们进行转储,它将向我提供sql命令和数据条目。我说得对吗?有什么更好的方法吗?当我试图在Ubuntu12.04机器中使用“mysqldbcompare”命令时,它说找不到该命令。我也安装了“mysql工作台”,但仍然有相同的错误。知道如何在Ubuntu中获得该命令吗?这只是偶然的。如果从两个数据库返回的行的顺序不同怎么办?