MySQL Workbench mwb 파일에서 sql 파일로 자동 변환

6505 단어 GitMySQLPython

누구를 위한 서류입니까?


MySQL Workbench를 사용하여 DB에 대한 표 정의 (ER 그림 제작) 를 하는 사람
mwb 파일을 버전 관리 하에 놓고 (이진법이라서) 차이를 확인할 수 없어 당황하는 사람
mwb를 교재로 사용하기 위해 내부에서 xml을 열심히 연습하는 사람

mwb에서 표 정의를 관리하는 데 겪는 어려움


예를 들어 아래와 같다user 표를 작성하여 파일app.mwb에 저장한다git add.

그럼, 이후 계속 개발git commit추가표.
article가 덮어쓰였습니다app.mwb.
그럼 이따가 이commiit log를 보면 뭘 알게 될까요?
만약 두 개의 개정판을 얻었을 때의 파일을 가져와Workbench에서 내용을 확인한다면 차이를 발견할 수 있으나, 일반적으로 간단하게 확인할 수 있는 것은 텍스트 파일의 차이뿐이다.(github 이미지 diff 같은 mwb diff가 있었으면 좋겠는데, 지금은 그런 게 없는 것 같다)

만약 mwb가 2진법이라면 텍스트로 쓰면 되잖아


mwb의 파일 자체(실체는 zip으로 고정된 xml 파일)를 분석하고 내부의 표 정의를 검색할 수 있지만 MySQL Workbench는 실제로git commit -u 스크립트 인터페이스를 탑재했다.이번에는 이것을 사용하여 mwb→sql 변환을 진행합니다.그리고 Lua에서 훅을 하고 sql 파일도 버전 관리에 자동으로 넣으면 됩니다.버전 관리 시스템에서 어떻게 처리하는지 각자 방법을 생각해 보세요.

주의점

  • 스크립트 인터페이스만 사용하더라도 MySQL Workbench의 GUI를 시작하는 모니터
  • 스크립트 인터페이스를 사용하는 문서가 거의 없음
  • GUI에서 SQL을 출력할 때 출력 내용을 상세하게 제어할 수 있으나 스크립트 인터페이스에서 덤프할 때 확정적인 형식으로만 출력할 수 있음
  • 첫 번째 질문은 MySQL Workbench만 사용하기 위해 X Window System을 추가하는 것을 좋아하지 않기 때문에 Python 가상 프레임 버퍼를 사용합니다.(Windows는 한순간에 화면이 나오지만 포기하세요)
    두 번째는 이번에 MySQL Workbench 자체의 코드를 보면서 만들었기 때문에 정말 정확하다는 보장이 없습니다.
    세 번째, 예를 들어 GUI 제어를 통해 DROP TABLE 문장을 추가/추가하지 않을 수 있지만 아직 스크립트에서 조작하는 방법을 모른다.하지만 이번 목적은 차분을 텍스트화하고 간단하게 확인하는 것이기 때문에 문제없다.

    코드


    다음 창고에 필요한 코드와 샘플, 사용 방법을 놓았습니다.호스트git commit에 파이썬 스크립트가 삽입되어 있지만 실제로는 10줄 정도에 불과하다.

    설명


    컨디션


    (Windows 7에서 동작 확인)
  • Windows
  • Linux(Ubuntu 12.04를 통한 동작 확인)
  • ※ 리눅스에 GUI가 표시되지 않는 이동 방법에 대해 설명합니다.Windows는 더욱 간단합니다. 상기 창고의 README를 참조하세요.

    설치하다.

  • mysql-workbench 5.2
  • Xvfb
  • 부팅


    Xvfb를 통해 가상 디스플레이를 활성화합니다.
    Xvfb를 시작하면 font에 대한 정보가 나타날 수 있지만 개의치 않습니다.
    $ Xvfb :1 &
    [dix] Could not init font path element /usr/share/fonts/X11/cyrillic, removing from list!
    
    이 상태에서: 가상 프레임 버퍼 1개를 사용하여 MySQL Workbench를 시작합니다.Xvfb에는 덤프 모델에 사용되는 파이톤 스크립트가 기술되어 있으며 다음과 같이 시작하면 mwb2sql.sh mwb2sql.sh 안에 정의된 모든 모델, 표의 CREATE 문장을 출력한다.
    $ DISPLAY=:1 sh mwb2sql.sh test.mwb a.sql
    
    가상 프레임워크 버퍼 메모리를 사용했기 때문에 ssh를 통해 연결해도 문제가 없습니다.a.sql에서 다음을 출력합니다.
    -- ----------------------------------------------------------------------------
    -- MySQL Workbench Migration
    -- Migrated Schemata: mydb
    -- Source Schemata: 
    -- Created: Thu Aug 01 02:32:15 2013
    -- ----------------------------------------------------------------------------
    
    SET FOREIGN_KEY_CHECKS = 0;;
    
    -- ----------------------------------------------------------------------------
    -- Schema mydb
    -- ----------------------------------------------------------------------------
    DROP SCHEMA IF EXISTS `mydb` ;
    CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
    
    -- ----------------------------------------------------------------------------
    -- Table mydb.table1
    -- ----------------------------------------------------------------------------
    CREATE  TABLE IF NOT EXISTS `mydb`.`table1` (
      `id` INT NOT NULL ,
      `name` VARCHAR(45) NULL ,
      `created` DATETIME NULL ,
      `updated` DATETIME NULL ,
      PRIMARY KEY (`id`) )
    ENGINE = InnoDB;
    SET FOREIGN_KEY_CHECKS = 1;;
    

    git hook과의 협업


    마지막으로, 이 스크립트와git hook을 텍스트로 조합한 sql 파일을 자동commiit로 만듭니다.창고에 있는 test.mwb 파일을 현재 개발 중인 창고의 a.sql로 사용하세요.
    hook 스크립트에 가상 프레임 버퍼 메모리를 사용하지 않기 때문에 export DISPLAY를 먼저 지정합니다.훅 스크립트도 바꿀 수 있습니다.
    $ export DISPLAY=:1
    
    이 상태에서 개발 중인 창고에서 임의의 mwb 파일git_pre-commit을 만들어 보세요.git/hooks/pre-commit.git add와 같은 파일은 자동으로 만들어져야 합니다.이 경우 client-side hook이지만 서버-side hook으로도 사용할 수 있습니다.

    경품: ER 그림을 쓰기 위해 Workbench를 사용하는 사람에게만


    이전보다 많이 안정됐지만, 조금이라도 조작하다가 떨어지는 경우가 많기 때문에 단순히 그림을 쓰는 도구로 사용하는 것은 추천하지 않는다.그러나 DB 서버의 실제 테이블과 mwb의 모델이 동기화되고 차별화되는 등 워크벤치 특유의 기능이 많은데 워크벤치를 특별히 사용한다면 이런 기능을 추천합니다.

    좋은 웹페이지 즐겨찾기