@Clinton, na stronie, do której masz link, znajduje się ostrzeżenie, że informacje są nieaktualne.
kjones
Odpowiedzi:
71
Na Githubie jest fantastyczny skrypt powłoki Linuksa, który konwertuje Mysql do pliku Sqlite3. Potrzebujesz zarówno mysqldump, jak i sqlite3 zainstalowanych na serwerze. Działa świetnie.
jak dotąd działa najlepiej! potrzebne tylko do usunięcia niektórych instrukcji „COLLATE xy” z kodowaniem, którego sqlite nie rozumie. Zauważ, że nie będziesz potrzebować sqlite3 na swoim serwerze, jeśli chcesz mieć klon swojej bazy danych mysql do lokalnego rozwoju.
benzkji
1
Niestety u mnie nie działało. Oprócz wspomnianych poniżej problemów z instrukcjami „PRIMARY KEY”, zgłoszono wiele innych błędów związanych z instrukcjami „INSERT” i brakującymi tabelami („obiektami”).
github.com/dumblob/mysql2sqlite jest teraz oficjalną wersją. 2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
Li-aung Yip
1
dzięki za headsup ilyaigpetrov i @ Li-aungYip, zaktualizowałem link
georgiecasey
7
Odpowiedź użytkownika @ user2111698 edytowana przez @quassy działa zgodnie z obietnicą. Ponieważ robię to często, umieszczam ich instrukcje w skrypcie 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
Jeśli sformatujesz kod w celu wyeliminowania przewijania, ułatwisz innym czytanie.
zhon
Chętnie; nie widzę szybko jak
George Fisher
1
Jeśli usuniesz komentarze, skończysz z przewijaniem w pionie (dodaj do tekstu odpowiedzi wszelkie komentarze, które uważasz za ważne). Przewijanie w pionie można obsłużyć za pomocą odwrotnego ukośnika nowej linii.
zhon
jeśli twój plik sql jest większy niż 1 GB, najpierw podziel go. w przeciwnym razie skrypt Perla wyświetli błąd pętli podstawień.
nurp
3
mysql2sqlite.sh wspomniany w górnym poście nie radzi sobie dobrze z liniami PRIMARY KEY, nie zapisuje końca, )aby uzupełnić instrukcję CREATE.
To właśnie zrobiłem. Uruchomiłem zrzut mysql jako:
Dzięki za to, było to pomocne, ponieważ pierwotne pytanie nie określało, czy schemat tworzenia musi zostać uwzględniony. Prostsze, gdy schemat został już skonfigurowany
kjones
0
Osobiście podoba mi się proste użycie mysqldump, ale potrzebne są pewne poprawki (w zależności od sztuki z Uniksem i tego, co chcesz zrobić).
Dawny. tylko dla jednego stołu (prods) z PK:
$ 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'
CREATETABLE"prods" (
"id"varchar(30) NOTNULLDEFAULT'',
"ts"int(11) NOTNULLDEFAULT'0',
"val"doubleDEFAULTNULL,
PRIMARY KEY ("id","ts")
);
Istnieje fantastyczne, lekkie narzędzie o nazwie Przeglądarka baz danych SQLite, które umożliwia tworzenie i edytowanie baz danych sqlite. Użyłem go do tworzenia baz danych dla aplikacji na Androida. Możesz uruchomić dla niego instrukcje SQL, aby załadować dane, więc jeśli eksportujesz dane z bazy danych mySQL, możesz po prostu zaimportować je za pomocą tego narzędzia. Oto link: http://sqlitebrowser.sourceforge.net/
Pomaga ci robić dokładnie to, co musisz. Właściwie robię to teraz dosłownie. Wyeksportuj swój MySQL za pomocą mysqldump lub phpMyAdmin, a następnie użyj powyższego narzędzia, aby zaimportować go do bazy danych sqlite. Poprosił o „eksport bazy danych MySQL do bazy danych SQLite”, a powyższe narzędzie będzie drugim krokiem do zrobienia dokładnie tego, czego potrzebujesz. Odrzucanie uzasadnionej pomocy jest po prostu złe. Jestem tutaj nowy i moja odpowiedź nie tylko dotyczyła pytania, ale także tego, czego używam teraz w prawdziwej sytuacji. Nie rezygnuj tak szybko z głosowania bez powodu i zniechęcaj ludzi do udziału.
Aaron Ratner
2
Pominięto rzeczywisty drugi (i najważniejszy) krok, konwertując wszystkie specyficzne dla MySQL części zrzutu MySQL na składnię specyficzną dla SQLite lub standardową.
CL.
4
Późno, ale to narzędzie nie działa w przypadku tego problemu. Nie obsługuje składni specyficznej dla MySQL (tylko składnia SQLite). Będziesz musiał dość mocno edytować plik zrzutu, aby został pomyślnie zaimportowany.
Sverri M. Olsen
5
@AaronRatner Nie, rozwiązanie nie działa. Pytanie dotyczy wprost konwersji bazy danych MySQL, a zalecane narzędzie nie obsługuje składni MySQL. Nie musisz brać tego do siebie - z tego, co mówisz, domyślam się, że to Ty musisz się „zrelaksować” :-) Jeśli ktoś mówi, że Twoje rozwiązanie nie jest dla niego pomocne, po prostu stwierdza prosty fakt. Twoja odpowiedź, że jest to „wyjątkowo trudne, ponieważ rozwiązanie jest pomocne”, jest absurdalna. Wiem, że mi to nie pomaga, bo tak nie jest :-) Pozdrawiam!
BartoszKP
-17
wyeksportuj dane z
mysqldump database > database.sql
i zaimportuj dane z
sqlite3 database < database.sql
możesz potrzebować opcji -u (użytkownik) i -p (hasło)
Czy to faktycznie zadziała z różnicami i funkcjami dostępnymi w mysql, a nie w sqlite?
rzetterberg
5
To nie zadziała. Indeksy, opisy tabel, sekwencje ucieczki danych binarnych, mechanizmy blokujące, prawdopodobnie inne rzeczy, są różne w MySQL i SQLite.
Odpowiedzi:
Na Githubie jest fantastyczny skrypt powłoki Linuksa, który konwertuje Mysql do pliku Sqlite3. Potrzebujesz zarówno mysqldump, jak i sqlite3 zainstalowanych na serwerze. Działa świetnie.
źródło
2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
Odpowiedź użytkownika @ user2111698 edytowana przez @quassy działa zgodnie z obietnicą. Ponieważ robię to często, umieszczam ich instrukcje w skrypcie 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
Streszczenie ze szczegółowymi komentarzami można znaleźć pod adresem https://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d
źródło
mysql2sqlite.sh wspomniany w górnym poście nie radzi sobie dobrze z liniami PRIMARY KEY, nie zapisuje końca,
)
aby uzupełnić instrukcję CREATE.To właśnie zrobiłem. Uruchomiłem zrzut mysql jako:
mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h<host> -u<user> -p<passwd> <database name> > localdb.txt
Następnie użyłem grep, aby usunąć PRIMARY KEY i KEY:
Następnie użyłem edytora, aby naprawić plik. Po usunięciu kluczy otrzymujesz instrukcję CREATE, która wygląda następująco:
CREATE ... ..., )
Ten koniec
,
musi zostać usunięty. W vi to wyrażenie pasuje do nich, $ \ n)Następnie musisz zmienić wszystko
\'
na''
Następnie możesz wykonać import:
I to wszystko. Nie znalazłem ani jednego programu, który działałby dla mnie. Mam nadzieję, że to komuś pomoże.
źródło
Strukturę tabeli utworzyłem ręcznie w bazie danych sqlite.
Następnie przesłałem dane za pomocą następującego polecenia:
mysqldump -u root {database} {table} --no-create-info --skip-extended-insert --complete-insert --skip-add-locks --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db
Musiałem użyć seda, aby naprawić różne kodowanie wierzchołków w dwóch bazach danych
źródło
Osobiście podoba mi się proste użycie mysqldump, ale potrzebne są pewne poprawki (w zależności od sztuki z Uniksem i tego, co chcesz zrobić).
Dawny. tylko dla jednego stołu (prods) z PK:
$ 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") );
Dla bardziej złożonych rzeczy, prawdopodobnie lepiej napisać wrapper, albo wtedy użyj wspomnianego już fantastycznego skryptu powłoki Linux awk na Gist .
źródło
Istnieje fantastyczne, lekkie narzędzie o nazwie Przeglądarka baz danych SQLite, które umożliwia tworzenie i edytowanie baz danych sqlite. Użyłem go do tworzenia baz danych dla aplikacji na Androida. Możesz uruchomić dla niego instrukcje SQL, aby załadować dane, więc jeśli eksportujesz dane z bazy danych mySQL, możesz po prostu zaimportować je za pomocą tego narzędzia. Oto link: http://sqlitebrowser.sourceforge.net/
źródło
wyeksportuj dane z
i zaimportuj dane z
możesz potrzebować opcji -u (użytkownik) i -p (hasło)
źródło