MySQL을 SQlite로 변환 [닫기]


120

Windows에서 무료 도구를 사용하여 MySQL에서 SQLite로 변환 할 수 있습니까?


답변:


78

GitHub에 mysql2sqlite.sh 스크립트가 있습니다.

헤더에 설명 된대로 스크립트는 다음과 같이 사용할 수 있습니다.

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

대안


8
매력으로 작동합니다! 다음은 약간의 문서입니다. $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar

이 스크립트는 명령 줄에서 인수를 끌어와 당신이 등 구성 사용자 정의 포트에 대해 알 수 있도록, mysqldump에 그들에게 전달 man mysql또는man mysqldump
데빈 하워드

2
이 스크립트는 후계자로 대체되었습니다 것을주의 그것의 가치는 여기에 유지 : github.com/dumblob/mysql2sqlite
drzax을

비 ASCII 문자로 플레이하는 것이 더 좋습니다. $. / mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun

52

다음변환기 목록입니다 . ( archive.today의 스냅 샷 )


Windows에서도 작동하지만 거의 언급되지 않는 대체 방법은 특정 데이터베이스 차이를 추상화하는 ORM 클래스를 사용하는 것입니다. 예를 들어 PHP ( RedBean ), Python (Django의 ORM 레이어, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) 등에서 이러한 정보를 얻을 수 있습니다.

즉, 다음과 같이 할 수 있습니다.

  1. ORM 클래스를 사용하여 소스 데이터베이스에서 데이터를로드합니다.
  2. 데이터를 메모리에 저장하거나 디스크에 직렬화합니다.
  3. ORM 클래스를 사용하여 대상 데이터베이스에 데이터를 저장합니다.

43

Sequel (Ruby ORM)에는 데이터베이스를 처리하기위한 명령 줄 도구가 있습니다. Ruby가 설치되어 있어야합니다.

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite

1
잊지 마세요 gem install mysqlgem install sqlite3

1
그리고 gem install pgpostgres db로 또는 postgres db로 변환하려면 속편에 메이저 db 용 어댑터가 있어야합니다
Macario

2
대신 mysqlmysql2당신이 사용하는 경우mysql2
Carlosin

1
참고 : ruby-dev이러한 네이티브 gem 패키지를 빌드 하려면 패키지가 필요 합니다.
Panda

1
"gem install sequel mysql2 sqlite3"를 사용한 다음 "sequel mysql2 : // user : password @ host / database -C sqlite : //db.sqlite"를 사용해야했습니다. PERFECT
unom

17

모든 DB 스키마를 변환 할 수있는 것은 아닙니다. MySQL은 SQLite보다 더 복잡하고 기능이 풍부합니다. 그러나 스키마가 충분히 간단하다면 SQL 파일에 덤프하여 SQLite DB로 가져 오거나로드 할 수 있습니다.


MySQL 데이터베이스를 파일로 덤프 한 후이 스크립트를 사용하여 SQLite github.com/dumblob/mysql2sqlite 로 변환 할 수 있습니다 (@David_LeBauer의 답변에 언급 됨).
Paul Rougieux

7

20GB 이상의 MySQL 데이터베이스를 SQLite로 변환해야 할 때 약 2 일 전에 동일한 문제에 직면했습니다. 결코 쉬운 일이 아니었고 저는 작업을 수행하는 이 Python 패키지 를 작성 했습니다 .

Python으로 작성되는 장점은 크로스 플랫폼 (셸 / bash 스크립트와는 다름)이며 pip installWindows에서도 모두 쉽게 설치할 수 있다는 것 입니다. 처리중인 데이터의 생성기와 청킹을 사용하므로 메모리 효율성이 매우 높습니다.

또한 대부분의 데이터 유형을 MySQL에서 SQLite올바르게 변환 하기 위해 노력했습니다 .

이 도구는 철저한 테스트를 거쳐 Python 2.7 및 3.5+ 에서 작동합니다 .

명령 줄을 통해 호출 할 수 있지만 일부 더 큰 Python 오케스트레이션에 포함 할 수있는 표준 Python 클래스로 사용할 수도 있습니다.

사용 방법은 다음과 같습니다.

Usage: mysql2sqlite [OPTIONS]

Options:
  -f, --sqlite-file PATH     SQLite3 database file  [required]
  -d, --mysql-database TEXT  MySQL database name  [required]
  -u, --mysql-user TEXT      MySQL user  [required]
  -p, --mysql-password TEXT  MySQL password
  -h, --mysql-host TEXT      MySQL host. Defaults to localhost.
  -P, --mysql-port INTEGER   MySQL port. Defaults to 3306.
  -c, --chunk INTEGER        Chunk reading/writing SQL records
  -l, --log-file PATH        Log file
  -V, --vacuum               Use the VACUUM command to rebuild the SQLite
                             database file, repacking it into a minimal amount
                             of disk space
  --use-buffered-cursors     Use MySQLCursorBuffered for reading the MySQL
                             database. This can be useful in situations where
                             multiple queries, with small result sets, need to
                             be combined or computed with each other.
  --help                     Show this message and exit.

1
안녕하세요 @techouse, 멋지네요! .sql덤프 파일로 작업 할 수있는 방법이 있습니까? 아니면 설치된 MySQL 데이터베이스에 연결해야합니까?
vortek

야! 음, 작동하는 MySQL 데이터베이스 가 필요 하지 않습니다 . 실제 서버가없는 덤프가있는 경우 수행중인 작업을 알고 있다면 파일을 수동으로 변경하는 것이 가장 좋습니다 .
Klemen Tušar 19.04.15

나는 당신이 항상 😎 파이썬 가상 환경을 사용하는 것이 좋습니다 @arkadianriver
Klemen Tušar을


4

MySql DB를 Sqlite로 변환하는 가장 간단한 방법 :

1) MySql 데이터베이스에 대한 SQL 덤프 파일을 생성하십시오.

2) 여기 에서 RebaseData 온라인 변환기에 파일 업로드

3) Sqlite 형식으로 데이터베이스를 다운로드 할 수있는 다운로드 버튼이 페이지에 나타납니다.


4

완벽한 솔루션을 찾았습니다

먼저 다음 스크립트가 필요합니다 ( 'mysql-to-sqlite.sh'라는 파일에 저장).

#!/bin/bash
if [ "x$1" == "x" ]; then
  echo "Usage: $0 <dumpname>"
  exit
fi

cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\\r\\n/\\n/g' |
sed 's/\\"/"/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
  $a=$1;
  s/\\'\''/'\'\''/g;
  s/\\n/\n/g;
  s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed without error. Output file: $1.db"
  rm $1.sql
  rm $1.err
else
  echo "There were errors during conversion.  Please review $1.err and $1.sql for details."
fi

그런 다음 데이터베이스 사본을 덤프합니다.

you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile

이제 변환을 실행하십시오.

you@prompt:~$ mysql-to-sqlite.sh dumpfile

그리고 모든 것이 잘되면 sqlite3를 통해 사용할 수있는 dumpfile.db가 있어야합니다.

you@prompt:~$ sqlite3 dumpfile.db 
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
dg_cities                 dg_forms                  dg_surnames             
dg_counties               dg_provinces              dg_user_accounts        
dg_countries              dg_provinces_netherlands
dg_first_names            dg_states

3

이를 수행하는 방법에는 여러 가지가 있습니다. 나는 또한이 문제가 있었고 많이 검색 한 다음 MySQL을 SQLite로 변환하는 간단한 방법을 얻었습니다.

다음과 같이하세요:

  1. 먼저 SQLite DB 브라우저를 설치해야합니다 (테이블과 데이터를보기에 매우 작고 빠름)

  2. 메모장에서 MySQL 파일을 열거 나 메모장에서 열면 좋을 것입니다 ++

  3. 첫 번째 추가 줄에 정보 또는 쿼리가 포함 된 경우 제거하고 저장합니다.

  4. SQLite DB Browser, Create Database, Tables 및 동일한 유형을 MySQL 데이터베이스에있는 것과 같이 엽니 다.

  5. SQLite DB Browser의 Menu Bar에서 File-> Import data MySQL File을 선택합니다.

경고 대화 후 SQLite로 쉽게 변환됩니다.

오류가 발생하면 MySQL 파일에 더 많은 추가 줄을 제거하십시오.

평가판으로 MySQL을 SQLite 변환기 소프트웨어에 설치할 수도 있지만 변환을 위해 제공하는 정보는 평생입니다.


데이터에 아포스트로피와 같은 문자가 없으면 제대로 작동했습니다. 예를 들어 sql dumb에서 "This is Peter 's book"은 'This is Peter \'s book '이됩니다. 이로 인해 DB Browser throw 오류가 발생합니다. 대용량 데이터의 경우 제거하기가 어렵습니다. 그러나 phpAdmin에서 CSV로 DB Browser로 데이터를 가져 오면 성공적으로 가져옵니다. 나는이 도움 희망
Seunope

1

Mac 을 실행하는이 문제에 대한 나의 해결책 은

  1. Macario의 대답과 유사한 Ruby와 속편을 설치하십시오. 이 링크를 따라 Mac OSX 용 Ruby, mysql 및 sqlite3 Ruby on Rails 개발 설정을 설정했습니다.
  2. 속편 설치

    $ gem install sequel

    여전히 필요한 경우

    % gem install mysql sqlite3

    그런 다음 Sequel doc bin_sequel.rdoc를 기반으로 다음을 사용했습니다 (데이터베이스 복사 참조).

    sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite

윈도우 사용자는 윈도우 솔루션 루비와 속편을 설치할 수 있습니다.


mysql 데이터베이스 전체가 아닌 DB에서 하나의 테이블 만 복사하려면 어떻게해야합니까?
Atul Vaibhav 2016

과거에 단일 테이블에 대해이 작업을 수행했지만 더 나은 방법이있을 수 있습니다. 첫 번째 행 옵션의 열 이름을 선택한 상태에서 테이블을 csv로 내 보냅니다. 그런 다음 SQLite 용 DB 브라우저를 사용하여 csv에서 테이블 가져 오기 옵션을 사용하여 기존 sqlite 데이터베이스로 테이블을 가져옵니다. 그런 다음 모든 필드가 TEXT로 설정되어 있다고 믿기 때문에 필요한 유형으로 필드를 변경해야 할 것입니다. 프로젝트에서 우리는 프로세스를 개발했지만 테이블의 모든 데이터를 반환하는 API 호출을 수행 한 다음 앱 데이터베이스에 데이터를 삽입 / 교체했습니다.
Grant Luck 2011

작동하는 것 같습니다. 그럼에도 불구하고 출력 파일이 어디에 있는지 찾을 수 없습니다. 도와주세요?
Pontios 18.11.02

1

이 스레드에서 여러 가지 방법을 시도했지만 아무것도 효과가 없었습니다. 그래서 여기에 새로운 솔루션이 있습니다. 또한 매우 간단합니다.

  1. RazorSQL을 설치합니다 . Mac, Windows 및 Linux에서 작동합니다.
  2. RazorSQL에서 예를 들어 localhost에서 데이터베이스에 연결합니다. 변환은 SQL 덤프 파일에서 작동하지 않습니다.
  3. 데이터베이스-> 데이터베이스 변환-> SQLite를 선택하십시오. 이 sqlite데이터베이스를 만드는 데 필요한 모든 쿼리 가 포함 된 txt 파일이 저장 됩니다.
  4. DB Browser for SQLite 와 같은 SQLite 데이터베이스 관리자를 설치합니다 . 모든 OS에서 작동합니다.
  5. 빈 데이터베이스를 만들고 SQL 실행 탭으로 이동하여 3 단계의 콘텐츠를 붙여 넣습니다.

이제 SQLite 데이터베이스가 있습니다.


RazorSQL은 테이블 정의 및 데이터 삽입이 포함 된 "일반적인"* .sql 파일을 빌드하는 것처럼 보이지만 특별히 SQLite와 관련된 것은 아닙니다. 큰 마이너스 뷰를 내 보내지 않았습니다. MySql과 함께 제공되는 mysqldump 클라이언트도 뷰를 내보내지만 SQLite가 소화하지 못하는 조건부 항목 등을 많이 생성합니다.
dalilander

0

경험이 있다면 Perl \ Python \ etc로 간단한 스크립트를 작성하고 MySQL을 SQLite로 변환하십시오. Mysql에서 데이터를 읽고 SQLite에 씁니다.


0

Jfly가 제안한 SQLite2009 Pro Enterprise Manager가 마음에 듭니다. 하나:

  • MySQL 데이터 유형 INT는 SQlite 데이터 유형 INTEGER로 변환되지 않습니다 (DBeaver와 함께 작동).

  • MySQL에서 외래 키 제한을 가져 오지 않습니다 (MySQL에서 SQlite 로의 외래 키 제한 전송을 지원하는 도구를 찾을 수 없습니다.)


0

에서 변환 도구의 목록을 나는 발견 Kexi을 . 다양한 DB 서버 (MySQL 포함)에서 SQLite로 가져 오는 UI 도구입니다. 일부 데이터베이스를 가져올 때 (예 : MySQL에서) Kexi 형식으로 저장합니다. Kexi 형식은 '네이티브'SQLite 형식입니다. 따라서 kexi 파일을 복사하고 데이터를 sqlite 형식으로 만드십시오.


0

데이터베이스 파일을 받았지만 올바른 서버 (SQLite 또는 MySQL)를 설치하지 않은 경우 다음 도구를 사용해보십시오. https://dbconvert.com/sqlite/mysql/ 평가판을 사용하면 각 테이블의 처음 50 개 레코드를 변환 할 수 있습니다. , 나머지 데이터에는 워터 마크가 표시됩니다. 이것은 Windows 프로그램이며 실행중인 데이터베이스 서버로 덤프하거나 출력을 .sql 파일로 덤프 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.