Exportar una base de datos MySQL a la base de datos SQLite

Ayúdenme a exportar una base de datos MySQL en una base de datos SQLite.

Hay una fantástica secuencia de comandos de shell de Linux en Github que convierte Mysql en un archivo Sqlite3. Necesita instalar mysqldump y sqlite3 en su servidor. Funciona genial.

La respuesta de @ user2111698 editada por @quassy funciona como se prometió. Como hago esto con frecuencia, pongo sus instrucciones en un script de 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 

Se puede encontrar una esencia con comentarios detallados en https://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d

mysql2sqlite.sh mencionado en la publicación superior no se adapta bien a las líneas PRIMARY KEY, no escribe el final ) para completar la instrucción CREATE.

Esto es lo que hice. Ejecuté el volcado de mysql como:

 mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h -u -p  > localdb.txt 

Luego usé grep para eliminar PRIMARY KEY y KEY:

 cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1 

Luego usé un editor para arreglar el archivo. Cuando se eliminan las claves, se termina con una statement CREATE que se ve así:

 CREATE ... ..., ) 

Ese final , tiene que ser eliminado. En vi, esta expresión coincide con ellos,, $ \ n)

Entonces necesitas cambiar todo \' a ''

Entonces puedes hacer la importación:

 sqlite3 local.sqlite3 < localdb.txt.1 

Y eso es. No he encontrado un solo progtwig que funcionó para mí. Espero que esto ayude a alguien.

He creado manualmente la estructura de la tabla en la base de datos sqlite.

Luego de cargar los datos con el siguiente comando:

 mysqldump -u root {database} {table} --no-create-info --skip-extended-insert --complete-insert --skip-add-locks --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db 

Tuve que usar sed para arreglar una encoding apice diferente en las dos bases de datos

Personalmente, me gusta el uso simple de mysqldump, pero se necesitan algunos ajustes (dependiendo de tu arte con Unix y de lo que quieras hacer).

Ex. para una sola tabla (prods) con 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") ); 

Para cosas más complejas, probablemente sea mejor escribir un contenedor, o luego, use el ya mencionado guión de shell fantástico awk de Linux en Gist .

Existe una herramienta fantástica y ligera llamada SQLite Database Browser que le permite crear y editar bases de datos de sqlite. Lo usé para crear bases de datos para aplicaciones de Android. Puede ejecutar sentencias SQL para cargar los datos, de modo que si exporta los datos de una base de datos mySQL, puede importarlos utilizando esta herramienta. Aquí hay un enlace: http://sqlitebrowser.sourceforge.net/

exportar los datos con

  mysqldump database > database.sql 

e importar los datos con

  sqlite3 database < database.sql 

es posible que necesite opciones -u (usuario) y -p (contraseña)