MySQL 데이터베이스를 SQLite 데이터베이스로 내보내는 데 도움을주세요.
답변:
Github 에는 Mysql을 Sqlite3 파일로 변환 하는 환상적인 Linux 쉘 스크립트가 있습니다. 서버에 mysqldump와 sqlite3를 모두 설치해야합니다. 잘 작동합니다.
2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
@quassy가 편집 한 @ user2111698의 답변은 약속대로 작동합니다. 이 작업을 자주 수행하기 때문에 bash 스크립트에 지침을 넣습니다.
#!/bin/bash
mysql_host=localhost
mysql_user=george
mysql_dbname=database
sqlite3_dbname=database.sqlite3
# dump the mysql database to a txt file
mysqldump \
--skip-create-options \
--compatible=ansi \
--skip-extended-insert \
--compact \
--single-transaction \
-h$mysql_host \
-u$mysql_user \
-p $mysql_dbname \
> /tmp/localdb.txt
# remove lines mentioning "PRIMARY KEY" or "KEY"
cat /tmp/localdb.txt \
| grep -v "PRIMARY KEY" \
| grep -v KEY \
> /tmp/localdb.txt.1
# mysqldump leaves trailing commas before closing parentheses
perl -0pe 's/,\n\)/\)/g' /tmp/localdb.txt.1 > /tmp/localdb.txt.2
# change all \' to ''
sed -e 's/\\'\''/'\'''\''/g' /tmp/localdb.txt.2 > /tmp/localdb.txt.3
if [ -e $sqlite3_dbname ]; then
mv $sqlite3_dbname $sqlite3_dbname.bak
fi
sqlite3 $sqlite3_dbname < /tmp/localdb.txt.3
자세한 설명이있는 요지는 https://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d 에서 찾을 수 있습니다.
상단 게시물에서 언급 한 mysql2sqlite.sh는 PRIMARY KEY 행에 잘 대처하지 못하며 )
CREATE 문을 완료하기 위해 후행 을 작성하지 않습니다 .
이것이 내가 한 일입니다. mysql 덤프를 다음과 같이 실행했습니다.
mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h<host> -u<user> -p<passwd> <database name> > localdb.txt
그런 다음 grep을 사용하여 PRIMARY KEY 및 KEY를 제거했습니다.
cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1
그런 다음 편집기를 사용하여 파일을 수정했습니다. 키가 제거되면 다음과 같은 CREATE 문이 생성됩니다.
CREATE ...
...,
)
그 후행 ,
을 제거해야합니다. vi에서이 표현식은, $ \ n)과 일치합니다.
그런 다음 모두 \'
를''
그런 다음 가져 오기를 수행 할 수 있습니다.
sqlite3 local.sqlite3 < localdb.txt.1
그리고 그게 다야. 저에게 효과가있는 단일 프로그램을 찾지 못했습니다. 누군가에게 도움이되기를 바랍니다.
sqlite 데이터베이스에서 테이블 구조를 수동으로 만들었습니다.
다음 명령으로 데이터를 업로드했습니다.
mysqldump -u root {database} {table} --no-create-info --skip-extended-insert --complete-insert --skip-add-locks --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db
두 데이터베이스에서 다른 apex 인코딩을 수정 하기 위해 sed 를 사용해야 했습니다.
개인적으로 나는 mysqldump의 간단한 사용법을 좋아하지만 약간의 조정이 필요합니다 (유닉스를 사용하는 기술과 수행하려는 작업에 따라 다름).
전의. PK가있는 하나의 테이블 (prods)에 대해 :
$ mysqldump mysql prods -u ME -pPASS --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db
$ mysqldump mysql prods -u ME -pPASS --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db
Error: near line 1: table "prods" already exists
Error: near line 7: UNIQUE constraint failed: prods.id, prods.ts
$ sqlite3 testme2.db '.schema'
CREATE TABLE "prods" (
"id" varchar(30) NOT NULL DEFAULT '',
"ts" int(11) NOT NULL DEFAULT '0',
"val" double DEFAULT NULL,
PRIMARY KEY ("id","ts")
);
더 복잡한 일을 위해서는 래퍼를 작성하는 것이 더 좋을 것입니다. 또는 Gist 에서 이미 언급 한 환상적인 awk Linux 쉘 스크립트를 사용하십시오 .
SQLite 데이터베이스 브라우저라는 환상적이고 가벼운 도구가있어서 sqlite 데이터베이스를 만들고 편집 할 수 있습니다. Android 앱용 데이터베이스를 만드는 데 사용했습니다. SQL 문을 실행하여 데이터를로드 할 수 있으므로 mySQL 데이터베이스에서 데이터를 내보내는 경우이 도구를 사용하여 가져올 수 있습니다. 다음은 링크입니다. http://sqlitebrowser.sourceforge.net/
데이터 내보내기
mysqldump database > database.sql
데이터를 가져옵니다.
sqlite3 database < database.sql
-u (사용자) 및 -p (암호) 옵션이 필요할 수 있습니다.