Converti MySQL in SQlite [chiuso]


Risposte:


78

C'è uno script mysql2sqlite.sh su GitHub

Come descritto nell'intestazione, lo script può essere utilizzato in questo modo:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

alternative


8
Funziona come un fascino! Ecco un po 'di documentazione: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar

Lo script estrae gli argomenti dalla riga di comando e li passa a mysqldump, così puoi scoprire come configurare le porte personalizzate, ecc. Con man mysqloman mysqldump
Devin Howard

2
Vale la pena notare che questo script è stato sostituito da un successore mantenuto qui: github.com/dumblob/mysql2sqlite
drzax

Ancora meglio giocare con caratteri non ASCII: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun Junwen

52

Ecco un elenco di convertitori . ( snapshot su archive.today )


Un metodo alternativo che funzionerebbe anche su Windows ma che viene raramente menzionato è: utilizzare una classe ORM che astrae le differenze specifiche del database per te. es. li ottieni in PHP ( RedBean ), Python (livello ORM di Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) ecc.

cioè potresti fare questo:

  1. Carica i dati dal database di origine utilizzando la classe ORM.
  2. Archivia i dati in memoria o serializza su disco.
  3. Memorizza i dati nel database di destinazione utilizzando la classe ORM.

43

Sequel (Ruby ORM) ha uno strumento a riga di comando per gestire i database, devi aver installato ruby, quindi:

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

1
Non dimenticare gem install mysqlegem install sqlite3
Nick

1
e gem install pgse vuoi convertire da o in un db postgres, il sequel dovrebbe avere adattatori per i principali db
Macario

2
sostituire mysqlcon mysql2se si utilizzamysql2
Carlosin

1
Nota: avrai bisogno del ruby-devpacchetto per creare questi pacchetti gem nativi.
Panda

1
Ho dovuto usare "gem install sequel mysql2 sqlite3" e poi "sequel mysql2: // user: password @ host / database -C sqlite: //db.sqlite" PERFETTO
unom

17

Non tutti gli schemi DB possono essere convertiti. MySQL è più complesso e ricco di funzionalità di SQLite. Tuttavia, se il tuo schema è abbastanza semplice, puoi scaricarlo in un file SQL e provare a importarlo / caricarlo in un DB SQLite.


Dopo aver scaricato il tuo database MySQL in un file, puoi utilizzare questo script per convertirlo in SQLite github.com/dumblob/mysql2sqlite (come menzionato nella risposta di @David_LeBauer).
Paul Rougieux

7

Ho affrontato lo stesso problema circa 2 giorni fa quando ho dovuto convertire un database MySQL da 20 GB + in SQLite. Non è stato affatto un compito facile e ho finito per scrivere questo pacchetto Python che fa il lavoro.

Il vantaggio di essere scritto in Python è che è multipiattaforma (a differenza di uno script shell / bash) e può essere facilmente installato utilizzando pip install(anche su Windows). Utilizza generatori e blocchi dei dati elaborati ed è quindi molto efficiente in termini di memoria.

Mi sono anche impegnato a tradurre correttamente la maggior parte dei tipi di dati da MySQL a SQLite .

Lo strumento è anche accuratamente testato e funziona su Python 2.7 e 3.5+ .

È invocabile tramite riga di comando ma può anche essere usato come una classe Python standard che puoi includere in un'orchestrazione Python più ampia.

Ecco come lo usi:

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
Hey @techouse, sembra fantastico! C'è un modo in cui potrebbe funzionare con un .sqlfile di dump o richiede la connessione a un database MySQL installato?
vortek

Hey! Ummm, no, questo richiede un database MySQL funzionante. Se hai un dump senza un server effettivo, la soluzione migliore è cambiare il file manualmente se sai cosa stai facendo.
Klemen Tušar

@arkadianriver ti suggerisco di usare sempre ambienti virtuali con Python 😎
Klemen Tušar


4

Il modo più semplice per convertire MySql DB in Sqlite:

1) Genera il file dump sql per il tuo database MySql.

2) Carica il file sul convertitore online RebaseData qui

3) Apparirà un pulsante di download sulla pagina per scaricare il database in formato Sqlite


4

Ho trovato la soluzione perfetta

Innanzitutto, hai bisogno di questo script (inseriscilo in un file chiamato '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

Quindi, scarica una copia del tuo database:

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

E ora, esegui la conversione:

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

E se tutto va bene, ora dovresti avere un dumpfile.db che può essere utilizzato tramite 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

3

Ci sono diversi modi per farlo. Ho anche avuto questo problema e ho cercato molto e poi ho ottenuto un modo semplice per convertire MySQL in SQLite.

Segui questi passi:

  1. Per prima cosa è necessario installare SQLite DB Browser (molto piccolo e veloce per visualizzare tabelle e dati)

  2. Apri il tuo file MySQL in Blocco note o sarebbe fantastico se lo aprissi in Notepad ++

  3. Rimuovi le prime righe extra che contengono informazioni o query e salvalo.

  4. Apri SQLite DB Browser, Crea database, quindi Tabelle e gli stessi tipi presenti nel database MySQL.

  5. Nella barra dei menu del browser SQLite DB selezionare File-> quindi Importa dati MySQL File che hai salvato.

Si convertirà facilmente in SQLite dopo la finestra di dialogo di avviso.

In caso di errore, rimuovere più righe aggiuntive se il file MySQL ha.

Puoi anche installare il software di conversione da MySQL a SQLite su base di prova, ma le informazioni che fornisco per la conversione sono a vita.


Funzionava bene se i tuoi dati non hanno caratteri come l'apostrofo. Ad esempio "Questo è il libro di Peter" in sql dumb sarà "Questo è il libro di Peter". Questo farà sì che DB Browser generi un errore, per dati di grandi dimensioni è difficile da rimuovere. Ma se importi i dati da phpAdmin come CSV in DB Browser, l'importazione avrà successo. Spero che questo aiuto
Seunope

1

La mia soluzione a questo problema con un Mac era quella di

  1. Installa Ruby e il seguito simile alla risposta di Macario. Ho seguito questo collegamento per aiutare a configurare Ruby, mysql e sqlite3 Ruby on Rails setup setup per Mac OSX
  2. Installa il sequel

    $ gem install sequel

    Se ancora necessario

    % gem install mysql sqlite3

    quindi ha utilizzato quanto segue in base al documento Sequel bin_sequel.rdoc (vedere Copia database)

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

Un utente Windows potrebbe installare Ruby e Sequel per una soluzione Windows.


Come posso copiare solo una tabella dal database non l'intero database mysql?
Atul Vaibhav

Per un singolo tavolo in passato l'ho fatto, ma potrebbe esserci un modo migliore. Esporta la tabella come csv con i nomi delle colonne nella prima opzione di riga spuntati. Quindi, utilizzando DB Browser per SQLite, importa la tabella nel mio database sqlite esistente utilizzando l'opzione di importazione tabella da csv. Probabilmente dovrai quindi entrare e modificare i campi nel tipo richiesto poiché credo che tutti i campi saranno impostati su TESTO. Nel progetto a cui stavo lavorando, abbiamo sviluppato un processo in cui abbiamo effettuato una chiamata api per restituire tutti i dati in una tabella e quindi inserito / sostituito i dati nel database delle app.
Concedi fortuna l'

Sembra funzionare. Tuttavia, non riesco a trovare dove si trova il file di output. Mi potete aiutare?
Pontios

1

Ho provato diversi metodi su questo thread, ma niente ha funzionato per me. Quindi ecco una nuova soluzione, che ho trovato anche molto semplice:

  1. Installa RazorSQL . Funziona per Mac, Windows e Linux.
  2. In RazorSQL connettiti al tuo database, ad esempio su localhost. La conversione non funziona con i file di dump sql.
  3. Fare clic con il tasto destro sul database -> Conversione database -> selezionare SQLite. Questo salverà un file txt con tutti isqlite query necessarie per creare questo database.
  4. Installa un gestore di database SQLite, come DB Browser per SQLite . Funziona su qualsiasi sistema operativo.
  5. Crea un database vuoto, vai alla scheda Esegui SQL e incolla il contenuto del passaggio 3.

Questo è tutto, ora hai il tuo database SQLite.


RazorSQL sembra creare solo un file * .sql "comune" con definizioni di tabelle e intro di inserimento dati, ma niente di particolarmente specifico per SQLite. Non ha esportato le visualizzazioni, il che è un grande svantaggio. Il client mysqldump fornito con MySql esporta anche le visualizzazioni, ma produce anche molte cose condizionali, ecc. Che SQLite non digerirà.
Dalilander

0

Se hai esperienza scrivi semplici script di Perl \ Python \ etc e converti MySQL in SQLite. Leggi i dati da Mysql e scrivili su SQLite.


0

Mi piace SQLite2009 Pro Enterprise Manager suggerito da Jfly. Però:

  • Il tipo di dati MySQL INT non viene convertito nel tipo di dati SQlite INTEGER (funziona con DBeaver)

  • Non importa i vincoli di chiave esterna da MySQL (non sono riuscito a trovare alcuno strumento che supporti il ​​trasferimento dei vincoli di chiave esterna da MySQL a SQlite.)


0

Dalla lista di strumenti di conversione ho trovato Kexi . È uno strumento dell'interfaccia utente per importare da vari server DB (incluso MySQL) in SQLite. Quando si importa un database (diciamo da MySQL) lo memorizza in formato Kexi. Il formato Kexi è il formato SQLite "nativo". Quindi copia semplicemente il file kexi e ottieni i tuoi dati in formato sqlite


0

Se ti è stato fornito un file di database e non hai installato il server corretto (SQLite o MySQL), prova questo strumento: https://dbconvert.com/sqlite/mysql/ La versione di prova consente di convertire i primi 50 record di ogni tabella , il resto dei dati è filigranato. Questo è un programma Windows e può eseguire il dump in un server di database in esecuzione o può eseguire il dump dell'output in un file .sql

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.