![Linux에서 쉘 스크립트를 사용하여 두 테이블을 비교하고 차이점을 찾는 방법은 무엇입니까?](https://linux55.com/image/87739/Linux%EC%97%90%EC%84%9C%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%91%90%20%ED%85%8C%EC%9D%B4%EB%B8%94%EC%9D%84%20%EB%B9%84%EA%B5%90%ED%95%98%EA%B3%A0%20%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
두 개의 MySQL 데이터베이스 데이터를 비교해야 하며 두 개의 MySQL 스키마를 비교하여 두 스키마 간의 차이점을 찾고 싶습니다.
두 개의 변수 Old_Release_DB
와 New_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
나는 이것이 매우 편리하다고 생각합니다.