DB/MSSQL

MySQL Workbench를 이용한 마이그레이션 (MS-SQL → MySQL) 스키마 복사, ddl 워크벤치

벨포트조던 2024. 7. 31.
반응형

아래 내용은 다른 데이터베이스끼리 마이그레이션 할수 있다고 나오는데.. 현재

나는 mysql -> mariaDB 로 비교시에 에러가 난다... 이상하다 .. 

 

필드를 하나 추가햇는데 

워크벤치 에러나고,  datagrip 으로도 해봤는데, 에러는 안나고 필드 비교가 정상적으로 되지않음

 

동일한 mysql, mysql 에서 1달전에 햇을떄는 workbench 에서 정상작동햇음...  

 

워크벤치 에러는 이런식임 

 


Traceback (most recent call last):
  File "C:\Program Files\MySQL\MySQL Workbench 8.0 CE\workbench\wizard_progress_page_widget.py", line 198, in thread_work
    self.func()
  File "C:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\migration_schema_selection.py", line 184, in task_reveng
    self.main.plan.migrationSource.reverseEngineer()
  File "C:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\migration.py", line 365, in reverseEngineer
    self.state.sourceCatalog = self._rev_eng_module.reverseEngineer(self.connection, self.selectedCatalogName, self.selectedSchemataNames, self.state.applicationData)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SystemError: TypeError("can only concatenate str (not "NoneType") to str"): error calling Python module function DbMySQLRE.reverseEngineer
ERROR: Reverse engineer selected schemas: TypeError("can only concatenate str (not "NoneType") to str"): error calling Python module function DbMySQLRE.reverseEngineer
Failed

 

 

-------->>> 워크벤치 에러임..... 

워크벤치가 charset , collation 을 전혀 다른 값으로 보여주고 있음

DB 상에서는 a 인데, b 로 보여주고 있어서 안되었음

한달전에는 잘 동작했는데, 그 사이에 뭔가 ...뭔지모른 문제가 있었다.

 

그래서 그냥 datagrip으로 해결함

 

datagrip이 훨씬 쓰기좋네 ...

 

 

 

 


 

이기종 Database를 마이그레이션 하는 방법 중 Mysql Workbench를 소개한다.

Mysql Workbench는 Mysql 에서 다른 Mysql 서버로 이관하는것 뿐만아니라 다른 종류의 DBMS에서 Mysql로 이관하는것도 지원하고 있다. 단, Target은 Mysql만 설정 가능하다.

 

여러가지 DBMS중 SQL Server의 Data를 Mysql로 이관하는 Test를 해보았다.

모든 데이터와 프로그램 소스가 완벽하게 이관되지는 않고 일부 에러나는 경우도 있으며 procedure나 function 등의 Object는 스크립트 추출정도는 지원하지만 실시간 적용은 하지않는것 같다.

 

상세한 내용은 공식문서를 참조할 수 있다.

 

Mysql Workbench 공식문서 참조

 

 

그럼 마이그레이션 방법을 순차적으로 정리해 보았다.

반응형

1. 화살표 이미지를 클릭하거나 Database 메뉴에서 Migration Wizard… 항목을 클릭한다.

 

 

 

2. Start Migration을 클릭한다.

 

 

 

3. Source 서버 설정으로 SQL Server를 선택하고 Connection Method는 ODBC (native)를 선택하여 DB 접속정보를 입력한다.

 

 

 

4. Target 서버 설정으로 Mysql 서버의 접속 정보를 입력한다.

 

 

 

5. 데이터 Migration한 Schema를 선택한다.

 

 

6. 대상 Table을 선택한다. 프로시저나 펑션 등도 선택할 수 있지만 실제 migration시 생성은 되지않고 sql 스크립트 파일로는 생성이 되어 직접 적용을 해줘야 한다.

 

 

7. Migration 할 대상의 스크립트를 생성한다.

 

 

8. 오른쪽 위의 View를 클릭하여 Column Mappings를 선택하면 아래와 같이 컬럼 매핑정보를 볼수 있고 Target DB에 생성할 스크립트 수정이 가능하다.

 

 

 

9. Target DB에 schema 생성 옵션을 체크하고 SQL Script file도 체크하면 Next를 누르면 실제 Schema를 생성하고 SQL문으로 DDL문을 받을수 있다.

 

 

10. Table 생성이 정삭적으로 되었는지 로그를 확인할 수 있다.

 

 

11. Table 생성 결과를 확인 할 수 있으며 생성문을 수정하여 Recreate Objects를 누르면 재생성도 가능하다.

 

 

 

12. 마지막 Data Migration 작업으로 Online Copy of table data to target RDBMS를 선택하면 실시간으로 데이터가 Copy가 된다. Option 부분에서 UTF-8을 선택하면 한글이 깨져서 에러가 날 수 있으니 선택하지 않아도 될거 같다.

 

 

13. 최종 이관이 완료되면 로그로 이관된 내용을 확인할 수 있다. 내가 테스트한 결과는 전체 대상 Table 중 Table 1개는 실패하였다.

 

 

 

한개의 Table 마이그레이션을 실패한 이유

실제 SQL Server에서 numeric(20)으로 된 컬럼의 값이 아래와 같으며 숫자 컬럼은 Mysql로 마이그레이션시 Bigint 타입으로 변환한다. 이 과정에서 실제 데이터가 bigint의 자릿수를 넘어간다면 오류가 발생한다.

EX) SQL Server 데이터 : 99202012171409057319
            bigint 최대 범위 : 18446744073709551615

MS-SQL에서 해당 컬럼을 decimal로 변환하였지만 조회시 bigint로 변환하여 조회되므로 varchar(20)으로 변환하여 데이터를 복사하였다.

 

출처: https://m2seo.tistory.com/entry/MySQL-Workbench를-이용한-마이그레이션-MS-SQL-→-MySQL [화곡공룡의 일상다반사:티스토리]

반응형

댓글