Linux에서 쉘 스크립트를 사용하여 두 테이블을 비교하고 차이점을 찾는 방법은 무엇입니까?

Linux에서 쉘 스크립트를 사용하여 두 테이블을 비교하고 차이점을 찾는 방법은 무엇입니까?

두 개의 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의 쉘 스크립트에서 시도하고 있지만 얻지 못합니다. 다른 스크립트(예: 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.

두 데이터베이스가 동일하지 않은 경우 유틸리티는 0이 아닌 종료 코드를 반환해야 하며 이를 쉘 스크립트에 통합할 수 있습니다.
나에게 있어 이 문제에 대한 장기적인 해결책은 이 데이터베이스 스키마가 실제로 고유한 데이터베이스 스키마를 가져야 한다는 것입니다.독립적인 버전 관리 시스템.

답변2

물론 데이터베이스, 테이블 및 스키마를 비교하는 데 탁월한 옵션을 제공하는 무료 소프트웨어인 Toad 소프트웨어를 사용할 수도 있습니다.

여기에서 확인하세요https://www.toadworld.com/products/toad-for-sql-server

나는 이것이 매우 편리하다고 생각합니다.

관련 정보