Konwertuj MySQL na SQlite [zamknięte]

120

Czy można dokonać konwersji z MySQL na SQLite za pomocą bezpłatnego narzędzia w systemie Windows?

mullek
źródło
Zobacz także stackoverflow.com/questions/18671/…
David d C e Freitas

Odpowiedzi:

78

W serwisie GitHub znajduje się skrypt mysql2sqlite.sh

Jak opisano w nagłówku, skrypt może być używany w następujący sposób:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

alternatywy

David LeBauer
źródło
8
Działa jak urok! Oto trochę dokumentacji: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar
Skrypt po prostu pobiera argumenty z wiersza poleceń i przekazuje je do mysqldump, dzięki czemu możesz dowiedzieć się o konfigurowaniu niestandardowych portów itp. Za pomocą man mysqllubman mysqldump
Devin Howard
2
Warto zauważyć, że ten skrypt został zastąpiony przez następcę utrzymywanego tutaj: github.com/dumblob/mysql2sqlite
drzax
Jeszcze lepiej jest grać ze znakami spoza ASCII: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun Junwen,
52

Tutaj jest lista konwerterów . ( migawka w archive.today )


Alternatywną metodą, która działałaby nawet w systemie Windows, ale rzadko jest wspominana, jest: użyj klasy ORM, która wyodrębnia określone różnice w bazie danych. np. dostajesz je w PHP ( RedBean ), Pythonie (warstwa ORM Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) itp.

czyli możesz to zrobić:

  1. Załaduj dane ze źródłowej bazy danych przy użyciu klasy ORM.
  2. Przechowuj dane w pamięci lub serializuj na dysk.
  3. Przechowuj dane w docelowej bazie danych za pomocą klasy ORM.
David d C e Freitas
źródło
43

Sequel (Ruby ORM) ma narzędzie wiersza poleceń do obsługi baz danych, musisz mieć zainstalowany Ruby, a następnie:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite
Macario
źródło
1
Nie zapomnij gem install mysqligem install sqlite3
Nick
1
a gem install pgjeśli chcesz konwertować z lub do postgres db, sequel powinien mieć adaptery dla głównych baz danych
Macario
2
wymienić mysqlze mysql2jeśli używaszmysql2
Carlosin
1
Uwaga: ruby-devpakiet będzie potrzebny do zbudowania tych natywnych pakietów klejnotów.
Panda,
1
Musiałem użyć „gem install sequel mysql2 sqlite3”, a następnie „sequel mysql2: // użytkownik: hasło @ host / database -C sqlite: //db.sqlite” PERFECT
unom
17

Nie każdy schemat bazy danych można przekonwertować. MySQL jest bardziej złożony i bogaty w funkcje niż SQLite. Jeśli jednak Twój schemat jest wystarczająco prosty, możesz zrzucić go do pliku SQL i spróbować zaimportować / załadować do bazy danych SQLite.

Assaf Lavie
źródło
Po zrzuceniu bazy danych MySQL do pliku, możesz użyć tego skryptu, aby przekonwertować ją na SQLite github.com/dumblob/mysql2sqlite (jak wspomniano w odpowiedzi @David_LeBauer).
Paul Rougieux
7

Miałem ten sam problem około 2 dni temu, kiedy musiałem przekonwertować bazę danych MySQL 20 GB + na SQLite. Nie było to łatwe zadanie i ostatecznie napisałem ten pakiet Pythona, który spełnia swoje zadanie.

Zaletą pisania w Pythonie jest to, że jest wieloplatformowy (w przeciwieństwie do skryptu powłoki / bash) i można go łatwo zainstalować za pomocą pip install(nawet w systemie Windows). Wykorzystuje generatory i fragmenty przetwarzanych danych, dzięki czemu jest bardzo wydajny pod względem pamięci.

Włożyłem też trochę wysiłku w poprawne przetłumaczenie większości typów danych z MySQL na SQLite .

Narzędzie jest również dokładnie przetestowane i działa na Pythonie 2.7 i 3.5+ .

Można ją wywołać za pomocą wiersza poleceń, ale można jej również użyć jako standardowej klasy Pythona, którą można dołączyć do większej aranżacji Pythona.

Oto jak go używasz:

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.
Klemen Tušar
źródło
1
Hej @techouse, wygląda świetnie! Czy jest jakiś sposób, aby działał z .sqlplikiem zrzutu, czy też wymaga połączenia z zainstalowaną bazą danych MySQL?
vortek
Hej! Ummm, nie wymaga to działającej bazy danych MySQL. Jeśli masz zrzut bez rzeczywistego serwera, najlepiej jest zmienić plik ręcznie, jeśli wiesz, co robisz.
Klemen Tušar
@arkadianriver Sugeruję, abyś zawsze korzystał ze środowisk wirtualnych z Pythonem 😎
Klemen Tušar
4

Najprostszy sposób na konwersję MySql DB do Sqlite:

1) Wygeneruj plik zrzutu sql dla swojej bazy danych MySql.

2) Prześlij plik do konwertera online RebaseData tutaj

3) Na stronie pojawi się przycisk pobierania umożliwiający pobranie bazy danych w formacie Sqlite

Sandeep Yohans
źródło
4

Znalazłem idealne rozwiązanie

Najpierw potrzebujesz tego skryptu (umieść go w pliku o nazwie „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

Następnie zrzuć kopię swojej bazy danych:

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

A teraz uruchom konwersję:

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

A jeśli wszystko pójdzie dobrze, powinieneś mieć teraz plik dumpfile.db, z którego można korzystać przez sqlite3.

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
Paulo Luan
źródło
3

Można to zrobić na różne sposoby. Miałem też ten problem i dużo szukałem, a potem dostałem prosty sposób na konwersję MySQL do SQLite.

Wykonaj następujące kroki:

  1. Najpierw musisz zainstalować przeglądarkę SQLite DB (bardzo mała i szybka do przeglądania tabel i danych)

  2. Otwórz swój plik MySQL w Notatniku lub byłoby wspaniale, gdybyś otworzył w Notepad ++

  3. Usuń pierwsze dodatkowe wiersze zawierające informacje lub zapytania i zapisz je.

  4. Otwórz przeglądarkę SQLite DB, utwórz bazę danych, a następnie tabele i takie same typy, jak w bazie danych MySQL.

  5. W pasku menu przeglądarki SQLite DB wybierz Plik-> następnie Importuj dane Plik MySQL, który zapisałeś.

Po ostrzeżeniu z łatwością przekształci się w SQLite.

Jeśli błąd, usuń więcej dodatkowych linii, jeśli twój plik MySQL ma.

Możesz także zainstalować oprogramowanie MySQL do SQLite Converter na zasadzie próbnej, ale informacje, które podaję do konwersji, to czas życia.

Uzair Qaiser
źródło
To działało dobrze, jeśli twoje dane nie mają charakteru takiego jak apostrof. Na przykład „To jest książka Piotra” w sql głupi będzie „To jest książka Piotra”. Spowoduje to zgłoszenie błędu przeglądarki DB, ponieważ duże dane są trudne do usunięcia. Ale jeśli zaimportujesz dane z phpAdmina jako CSV do przeglądarki DB, ten import się powiedzie. Mam nadzieję, że to pomoże
Seunope
1

Moim rozwiązaniem tego problemu na komputerze Mac było

  1. Zainstaluj Rubiego i kontynuację podobną do odpowiedzi Macario. Skorzystałem z tego linku, aby pomóc w konfiguracji Ruby, mysql i sqlite3 Konfiguracja programowania Ruby on Rails dla Mac OSX
  2. Zainstaluj sequel

    $ gem install sequel

    Jeśli nadal jest to wymagane

    % gem install mysql sqlite3

    następnie użył następującego na podstawie dokumentu Sequel bin_sequel.rdoc (patrz Kopiowanie bazy danych)

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

Użytkownik systemu Windows może zainstalować Ruby i Sequel jako rozwiązanie dla systemu Windows.

Przyznaj szczęście
źródło
Jak mogę skopiować tylko jedną tabelę z bazy danych, a nie całą bazę danych mysql?
Atul Vaibhav
Zrobiłem to w przeszłości dla pojedynczego stołu, ale może być lepszy sposób. Wyeksportuj tabelę jako plik CSV z zaznaczoną opcją nazw kolumn w pierwszym wierszu. Następnie za pomocą przeglądarki DB Browser for SQLite zaimportuj tabelę do mojej istniejącej bazy danych sqlite, używając opcji importu tabeli z csv. Będziesz wtedy prawdopodobnie musiał wejść i zmienić pola na wymagany typ, ponieważ uważam, że wszystkie pola zostaną ustawione na TEKST. W projekcie, nad którym pracowałem, opracowaliśmy proces, w którym wykonaliśmy wywołanie API w celu zwrócenia wszystkich danych w tabeli, a następnie wstawiliśmy / zastąpiliśmy dane w bazie danych aplikacji.
Grant Luck
Wygląda na to że działa. Mimo to nie mogę znaleźć miejsca, w którym znajduje się plik wyjściowy. Możesz mi pomóc?
Pontios
1

Wypróbowałem kilka metod w tym wątku, ale nic nie działało. Oto nowe rozwiązanie, które również okazało się bardzo proste:

  1. Zainstaluj RazorSQL . Działa na Mac, Windows i Linux.
  2. W RazorSQL połącz się z bazą danych, na przykład na hoście lokalnym. Konwersja nie działa z plikami zrzutu sql.
  3. Kliknij prawym przyciskiem myszy swoją bazę danych -> Konwersja bazy danych -> wybierz SQLite. Spowoduje to zapisanie pliku txt ze wszystkimi sqlitezapytaniami niezbędnymi do utworzenia tej bazy danych.
  4. Zainstaluj menedżera bazy danych SQLite, na przykład przeglądarkę DB dla SQLite . Działa na każdym systemie operacyjnym.
  5. Utwórz pustą bazę danych, przejdź do zakładki Wykonaj SQL i wklej treść z kroku 3.

To wszystko, teraz masz swoją bazę danych SQLite.

Vali Munteanu
źródło
Wydaje się, że RazorSQL po prostu buduje „wspólny” plik * .sql z definicjami tabel i wstawianiem danych, ale nie ma nic szczególnego do SQLite. Nie eksportował widoków, co jest dużym minusem. Klient mysqldump, który jest dostarczany z MySql, również eksportuje widoki, ale produkuje również wiele warunkowych rzeczy itp., Których SQLite nie przetrawi.
dalilander
0

Jeśli masz doświadczenie, pisz proste skrypty przez Perl \ Python \ etc i konwertuj MySQL na SQLite. Odczytaj dane z MySQL i zapisz je w SQLite.

Eugene
źródło
0

Podoba mi się SQLite2009 Pro Enterprise Manager sugerowany przez Jfly. Jednak:

  • Typ danych MySQL INT nie jest konwertowany na typ danych SQlite INTEGER (działa z DBeaver)

  • Nie importuje ograniczeń klucza obcego z MySQL (nie mogłem znaleźć żadnego narzędzia, które obsługuje transfer ograniczeń klucza obcego z MySQL do SQlite).

Stefan
źródło
0

Z listy narzędzi konwertujących znalazłem Kexi . Jest to narzędzie interfejsu użytkownika do importowania z różnych serwerów DB (w tym MySQL) do SQLite. Podczas importowania jakiejś bazy danych (powiedzmy z MySQL) przechowuje ją w formacie Kexi. Format Kexi jest „rodzimym” formatem SQLite. Po prostu skopiuj plik kexi i przechowuj dane w formacie sqlite

Tushar Goswami
źródło
0

Jeśli otrzymałeś plik bazy danych i nie zainstalowałeś prawidłowego serwera (SQLite lub MySQL), wypróbuj to narzędzie: https://dbconvert.com/sqlite/mysql/ Wersja próbna umożliwia konwersję pierwszych 50 rekordów każdej tabeli pozostałe dane są oznaczone znakiem wodnym. Jest to program systemu Windows, który może wykonać zrzut do działającego serwera bazy danych lub zrzucić dane wyjściowe do pliku .sql

kurdtpage
źródło