두 개의 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
나는 이것이 매우 편리하다고 생각합니다.