Ayúdame a exportar una base de datos MySQL a una base de datos SQLite.
Ayúdame a exportar una base de datos MySQL a una base de datos SQLite.
Respuestas:
Hay un fantástico script de shell de Linux en Github que convierte Mysql en un archivo Sqlite3. Necesita mysqldump y sqlite3 instalados en su servidor. Funciona genial.
2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
La respuesta de @ user2111698 editada por @quassy funciona según lo prometido. Como hago esto con frecuencia, pongo sus instrucciones en un script 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 declaració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<host> -u<user> -p<passwd> <database name> > 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 utilicé un editor para arreglar el archivo. Cuando se eliminan las claves, termina con una declaración CREATE que se parece a:
CREATE ...
...,
)
Ese rastro ,
debe eliminarse. 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 programa que me haya funcionado. Espero que esto ayude a alguien.
Creé manualmente la estructura de la tabla en la base de datos sqlite.
Luego cargué 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 codificación de ápice diferente en las dos bases de datos
Personalmente, me gusta el uso simple de mysqldump, pero se necesitan algunos ajustes (dependiendo de su arte con Unix y lo que quiera hacer).
Ex. para una sola mesa (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, usar el fantástico script de shell awk Linux ya mencionado en Gist .
Existe una herramienta fantástica y liviana llamada SQLite Database Browser que le permite crear y editar bases de datos sqlite. Lo usé para crear bases de datos para aplicaciones de Android. Puede ejecutar declaraciones SQL en él para cargar los datos, por lo que si exporta los datos desde una base de datos mySQL, puede importarlos usando 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 las opciones -u (usuario) y -p (contraseña)