Proszę o pomoc w eksportowaniu bazy danych MySQL do bazy danych SQLite.
Proszę o pomoc w eksportowaniu bazy danych MySQL do bazy danych 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.
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
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:
cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1
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:
sqlite3 local.sqlite3 < localdb.txt.1
I to wszystko. Nie znalazłem ani jednego programu, który działałby dla mnie. Mam nadzieję, że to komuś pomoże.
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
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 .
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/
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)