Convertir MySQL a SQlite [cerrado]

Respuestas:

78

Hay un script mysql2sqlite.sh en GitHub

Como se describe en el encabezado, el script se puede utilizar así:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

alternativas

David LeBauer
fuente
8
¡Funciona como un encanto! Aquí hay un poco de documentación: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar
El script simplemente extrae argumentos de la línea de comando y los pasa a mysqldump, por lo que puede obtener información sobre la configuración de puertos personalizados, etc.con man mysqloman mysqldump
Devin Howard
2
Vale la pena señalar que este script ha sido reemplazado por un sucesor que se mantiene aquí: github.com/dumblob/mysql2sqlite
drzax
Aún mejor para jugar con caracteres que no son ascii: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun Junwen
52

Aquí hay una lista de convertidores . ( instantánea en archive.today )


Un método alternativo que funcionaría incluso en Windows, pero que rara vez se menciona es: use una clase ORM que abstraiga las diferencias específicas de la base de datos. Por ejemplo, los obtienes en PHP ( RedBean ), Python (capa ORM de Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ), etc.

es decir, podrías hacer esto:

  1. Cargue datos de la base de datos de origen utilizando la clase ORM.
  2. Almacene datos en la memoria o serialícelos en el disco.
  3. Almacene los datos en la base de datos de destino utilizando la clase ORM.
David d C e Freitas
fuente
43

Sequel (Ruby ORM) tiene una herramienta de línea de comandos para manejar bases de datos, debe tener ruby ​​instalado, luego:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite
Macario
fuente
1
No te olvides gem install mysqlygem install sqlite3
Nick
1
y gem install pgsi desea convertir desde o hacia una base de datos de postgres, la secuela debe tener adaptadores para las bases de datos principales
Macario
2
reemplace mysqlcon mysql2si está usandomysql2
Carlosin
1
Nota: Necesitará el ruby-devpaquete para crear estos paquetes de gemas nativas.
Panda
1
Tuve que usar "gem install secuela mysql2 sqlite3" y luego "secuela mysql2: // usuario: contraseña @ host / base de datos -C sqlite: //db.sqlite" PERFECTO
unom
17

No todos los esquemas de base de datos se pueden convertir. MySQL es más complejo y rico en funciones que SQLite. Sin embargo, si su esquema es lo suficientemente simple, puede volcarlo en un archivo SQL e intentar importarlo / cargarlo en una base de datos SQLite.

Assaf Lavie
fuente
Después de descargar su base de datos MySQL en un archivo, puede usar este script para convertirlo a SQLite github.com/dumblob/mysql2sqlite (como se menciona en la respuesta de @David_LeBauer).
Paul Rougieux
7

Enfrenté el mismo problema hace unos 2 días cuando tuve que convertir una base de datos MySQL de más de 20 GB a SQLite. De ninguna manera fue una tarea fácil y terminé escribiendo este paquete de Python que hace el trabajo.

La ventaja de que esté escrito en Python es que es multiplataforma (a diferencia de un script de shell / bash) y todos se pueden instalar fácilmente usando pip install(incluso en Windows). Utiliza generadores y fragmentación de los datos que se procesan y, por lo tanto, es muy eficiente en la memoria.

También me esforcé en traducir correctamente la mayoría de los tipos de datos de MySQL a SQLite .

La herramienta también se prueba a fondo y funciona en Python 2.7 y 3.5+ .

Se puede invocar a través de la línea de comandos, pero también se puede usar como una clase estándar de Python que puede incluir en alguna orquestación de Python más grande.

Así es como se usa:

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
fuente
1
Hola @techouse, ¡esto se ve genial! ¿Hay alguna forma de que funcione con un .sqlarchivo de volcado o requiere conexión a una base de datos MySQL instalada?
vortek
¡Oye! Ummm, no, esto requiere una base de datos MySQL que funcione. Si tiene un volcado sin un servidor real, lo mejor que puede hacer es cambiar el archivo manualmente si sabe lo que está haciendo.
Klemen Tušar
@arkadianriver Te sugiero que siempre uses entornos virtuales con Python 😎
Klemen Tušar
4

La forma más sencilla de convertir MySql DB a Sqlite:

1) Genere un archivo de volcado sql para su base de datos MySql.

2) Sube el archivo al convertidor en línea RebaseData aquí

3) Aparecerá un botón de descarga en la página para descargar la base de datos en formato Sqlite

Sandeep Yohans
fuente
4

Encontre la solucion perfecta

Primero, necesita este script (póngalo en un archivo llamado '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

Luego, descargue una copia de su base de datos:

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

Y ahora, ejecute la conversión:

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

Y si todo va bien, ahora debería tener un dumpfile.db que se puede usar a través de 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
fuente
3

Hay maneras diferentes de hacer esto. También tuve este problema y busqué mucho y luego obtuve una forma simple de convertir MySQL a SQLite.

Sigue estos pasos:

  1. Primero necesita instalar SQLite DB Browser (muy pequeño y rápido para ver tablas y datos)

  2. Abra su archivo MySQL en el Bloc de notas o sería genial si lo abre en el Bloc de notas ++

  3. Quite las primeras líneas adicionales que contengan información o consultas y guárdelas.

  4. Abra el navegador SQLite DB, cree la base de datos, luego las tablas y los mismos tipos que en la base de datos MySQL.

  5. En la barra de menú del navegador SQLite DB, seleccione Archivo-> luego Importar archivo de datos MySQL que guardó.

Se convertirá fácilmente en SQLite After Warning Dialog.

Si hay un error, elimine más líneas adicionales si su archivo MySQL tiene.

También puede instalar MySQL to SQLite Converter Software a modo de prueba, pero la información que proporciono para la conversión es de por vida.

Uzair Qaiser
fuente
Esto funcionó bien si sus datos no tienen un carácter como apóstrofo. Por ejemplo, "Este es el libro de Peter" en sql mudo será "Este es el libro de Peter". Esto hará que DB Browser arroje un error, ya que para datos grandes es difícil de eliminar. Pero si importa los datos de phpAdmin como CSV a DB Browser, esa importación será exitosa. Espero que esto ayude
Seunope
1

Mi solución a este problema al ejecutar una Mac fue

  1. Instale Ruby y una secuela similar a la respuesta de Macario. Seguí este enlace para ayudar a configurar Ruby, mysql y sqlite3 Configuración de desarrollo de Ruby on Rails para Mac OSX
  2. Instalar secuela

    $ gem install sequel

    Si todavía es necesario

    % gem install mysql sqlite3

    luego usó lo siguiente basado en el documento de Sequel bin_sequel.rdoc (ver Copiar base de datos)

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

Un usuario de Windows podría instalar Ruby y Sequel para una solución de Windows.

Conceder suerte
fuente
¿Cómo puedo copiar solo una tabla de la base de datos, no toda la base de datos mysql?
Atul Vaibhav
Para una sola mesa en el pasado he hecho esto, pero puede haber una mejor manera. Exporte la tabla como csv con los nombres de las columnas en la opción de la primera fila marcada. Luego, usando DB Browser para SQLite, importe la tabla a mi base de datos sqlite existente usando la opción de importación de tabla desde csv. Luego, probablemente tendrá que ingresar y cambiar los campos al tipo que necesita, ya que creo que todos los campos se establecerán en TEXTO. En el proyecto en el que estaba trabajando, desarrollamos un proceso en el que hicimos una llamada a la API para devolver todos los datos en una tabla y luego insertamos / reemplazamos los datos en la base de datos de aplicaciones.
Grant Luck
Parece estar funcionando. No obstante, no puedo encontrar dónde está el archivo de salida. ¿Me puedes ayudar?
Pontios
1

Probé varios métodos en este hilo, pero nada funcionó para mí. Así que aquí hay una nueva solución, que también encontré muy simple:

  1. Instale RazorSQL . Funciona para Mac, Windows y Linux.
  2. En RazorSQL conéctese a su base de datos, en localhost por ejemplo. La conversión no funciona con archivos de volcado SQL.
  3. Haga clic derecho en su base de datos -> Conversión de base de datos -> seleccione SQLite. Esto guardará un archivo txt con todas las sqliteconsultas necesarias para crear esta base de datos.
  4. Instale un administrador de base de datos SQLite, como DB Browser para SQLite . Funciona en cualquier sistema operativo.
  5. Cree una base de datos vacía, vaya a la pestaña Ejecutar SQL y pegue el contenido del paso 3.

Eso es todo, ahora tienes tu base de datos SQLite.

Vali Munteanu
fuente
RazorSQL parece simplemente construir un archivo "común" * .sql con definiciones de tabla e inserciones de datos, pero nada particularmente específico de SQLite. No exportó Vistas, lo cual es un gran inconveniente. El cliente mysqldump que viene con MySql también exporta vistas, pero también produce muchas cosas condicionales, etc. que SQLite no asimilará.
dalilander
0

Si tiene experiencia, escriba scripts simples de Perl \ Python \ etc y convierta MySQL a SQLite. Lea datos de Mysql y escríbalos en SQLite.

Eugenio
fuente
0

Me gusta el SQLite2009 Pro Enterprise Manager sugerido por Jfly. Sin embargo:

  • El tipo de datos INT de MySQL no se convierte al tipo de datos INTEGER de SQlite (funciona con DBeaver)

  • No importa constantes de clave externa de MySQL (no pude encontrar ninguna herramienta que admita la transferencia de restricciones de clave externa de MySQL a SQlite).

Stefan
fuente
0

De la lista de herramientas de conversión encontré Kexi . Es una herramienta de interfaz de usuario para importar desde varios servidores de base de datos (incluido MySQL) a SQLite. Al importar alguna base de datos (digamos de MySQL), la almacena en formato Kexi. El formato Kexi es el formato SQLite "nativo". Así que simplemente copie el archivo kexi y tenga sus datos en formato sqlite

Tushar Goswami
fuente
0

Si se le ha dado un archivo de base de datos y no ha instalado el servidor correcto (ya sea SQLite o MySQL), pruebe esta herramienta: https://dbconvert.com/sqlite/mysql/ La versión de prueba permite convertir los primeros 50 registros de cada tabla , el resto de los datos tiene una marca de agua. Este es un programa de Windows y puede volcar en un servidor de base de datos en ejecución o puede volcar la salida en un archivo .sql

kurdtpage
fuente