如何在Linux中使用shell脚本比较两个表并找出它们之间的差异?

如何在Linux中使用shell脚本比较两个表并找出它们之间的差异?

我必须比较两个MySQL数据库数据,我想比较两个MySQL模式并找出两个模式之间的差异。

我创建了两个变量Old_Release_DBNew_Release_DB。在Old_Release_DB我存储了旧的发布模式之后,进行了一些修改,例如删除了某些列,添加了一些列,重命名了一些列,更改了列属性,例如增加了数据类型大小(例如:varchar(10)to varchar(50))。然后它成为我存储在 New_Release_DB.

现在我想要表名称,已更改的列名称列表New_Release_DB,并随列名称一起更改。

例子,

Table_A Column_Name Add(if it is added),
Table_A Column_Name Delete(if it is deleted),
Table_A Column_Name Change(if its property has changed)

我正在 Linux 的 shell 脚本中尝试它,但我没有得到它。如果我可以使用其他脚本(例如 Python 或 Java),请告诉我。

答案1

要从命令行比较两个 mysql 数据库的模式之间的差异,您可以使用mysqldiff

文档中的示例用法

shell> mysqldiff --server1=root@localhost \
          employees.salaries:emp1.salaries --differ

# server1 on localhost: ... connected.
# Comparing employees.salaries to emp1.salaries                    [FAIL]
# Object definitions are not the same:
  CREATE TABLE `salaries` (
    `emp_no` int(11) NOT NULL,
    `salary` int(11) NOT NULL,
    `from_date` date NOT NULL,
    `to_date` date NOT NULL,
    PRIMARY KEY (`emp_no`,`from_date`),
    KEY `emp_no` (`emp_no`)
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1
?           ^^^^^
+ ) ENGINE=MyISAM DEFAULT CHARSET=latin1
?          ++ ^^^
Compare failed. One or more differences found.

如果两个数据库不相同,实用程序应返回非零退出代码,您可以将其合并到 shell 脚本中。
对我来说,这个问题的长期解决方案是这个数据库模式确实应该有自己的独立的版本控制系统

答案2

您当然可以使用 Toad 软件,它是一个免费软件,它具有出色的选项可用于比较数据库、表和模式。

检查这里https://www.toadworld.com/products/toad-for-sql-server

我发现这非常方便。

相关内容