Linuxでシェルスクリプトを使用して2つのテーブルを比較し、違いを見つける方法は?

Linuxでシェルスクリプトを使用して2つのテーブルを比較し、違いを見つける方法は?

2つのMySQLデータベースデータを比較する必要があり、2つのMySQLスキーマを比較して2つのスキーマ間の違いを見つけたいと思います。

2つの変数Old_Release_DBNew_Release_DB。以前のリリーススキーマを保存した後、Old_Release_DB一部の列の削除、一部の列の追加、一部の列名の変更、データ型のサイズの増加などの列属性の変更など、いくつかの変更がvarchar(10)行わ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のシェルスクリプトで試していますが、取得できません。他のスクリプト(PythonやJavaなど)が利用可能な場合はお知らせください。

ベストアンサー1

コマンドラインで2つの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.

両方のデータベースが同じでない場合、ユーティリティはゼロ以外の終了コードを返す必要があり、それをシェルスクリプトに統合できます。
私にとってこの問題に対する長期的な解決策は、このデータベーススキーマには実際に独自のデータベーススキーマを持たなければならないということです。独立したバージョン管理システム

おすすめ記事