2つのMySQLデータベースデータを比較する必要があり、2つのMySQLスキーマを比較して2つのスキーマ間の違いを見つけたいと思います。
2つの変数Old_Release_DB
とNew_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.
両方のデータベースが同じでない場合、ユーティリティはゼロ以外の終了コードを返す必要があり、それをシェルスクリプトに統合できます。
私にとってこの問題に対する長期的な解決策は、このデータベーススキーマには実際に独自のデータベーススキーマを持たなければならないということです。独立したバージョン管理システム。
答え2
もちろん、データベース、テーブル、およびスキーマを比較するのに優れたオプションを提供するフリーソフトウェアであるToadソフトウェアを使用することもできます。
ここで確認してくださいhttps://www.toadworld.com/products/toad-for-sql-server
これはとても便利だと思います。