MDB(Access file)을 Mysql로 마이그레이션하기

2017년 7월 18일 현재 테스트해본 것을 기준으로 작성한다.

Application 으로 옮기기

  • bullzip.com 검색해보면 대부분 http://www.bullzip.com/products/a2m/info.php 을 추천한다. 하지만 한글이 깨진다.
  • mdb를 txt 파일로 내보낸 후 Mysql에서 impor하기
    이 방법은 mdb 에 테이블 수가 많으면 굉장히 번거로운 방법이다.

  • ACCDB MDB Explorer
    맥용 프로그램으로 trial 버전은 30일동안 사용가능하다.
    사용해보니 한글도 잘 옮긴다. 그런데 mdb 테이블에 row가 많으면 프로그램이 멈춰버린다. 단순히 row가 많은 것보다는 table의 용량이 크면 그런다. 10000 row가 넘지만, 짧은 단순 문자열과 숫자만 있는 테이블에서는 이상 없었고, 많은 텍스트를 저장하는 노드 테이블은 2000 row 도 안되는데 멈췄다.

  • MDB / ACCDB Viewer
    맥용 프로그램으로 trial 버전은 모든 row중 절반만 옮겨준다. 유료버전은 19$로 그리 비싸지 않다.
    한글도 잘 옮겨가고 큰 용량의 mdb도 무리 없이 잘 옮겨준다.

직접 옮기기

리눅스나 맥을 사용한다면 간단한 쉘 스크립트를 이용해서 직접 옮길 수도 있다.

참고자료)https://stackoverflow.com/questions/5722544/how-can-i-convert-an-mdb-access-file-to-mysql-or-plain-sql-file

  1. mdbtools 설치되어 있어야 한다. apt-get 또는 homebrew등을 이용해 설치한다.
  2. 다음 소스를 작성하고 to_mysql.sh로 저장한다. 파일은 실행권한을 주어야 한다.

    #!/bin/bash
    TABLES=$(mdb-tables -1 $1)
    
    for t in $TABLES
    do
        echo "DROP TABLE IF EXISTS $t;"
    done
    
    mdb-schema $1 mysql
    
    for t in $TABLES
    do
        mdb-export -D '%Y-%m-%d %H:%M:%S' -I mysql $1 $t
    done
    
  3. 다음처럼 실행한다.

    ./to_mysql.sh xxx.mdb > data.sql
    

Mysql에 import 하기

작성된 data.sql 파일을 Mysql에 넣어보면 에러가 발생한다. 이는 mdb와 mysql간의 구조차이 때문이다. 파일을 수정하여 테이블 구조를 조금 바꿔주어야 한다. 특히 null 값이 들어간 필드가 이런 문제를 발생시킨다. 그리고 mdb를 sql문을 바꿨을 때 줄바꿈 끝에 ^M가 들어간 곳도 문제가 될 수 있다. import 후, 에러메세지를 보고 적절히 수정해주면 된다.

text (255) NOT NULL

:%s/text (255) NOT NULL/text (255)/gi

:%s/^M//gi

^M

results matching ""

    No results matching ""