Delirios de un Informático

Cómo convertir una base de datos MySQL a SQLite

Hace tiempo hablé de SQLFairy, una serie de scripts que permiten convertir bases de datos entre sí, realizando las modificaciones oportunas a los dumps. De lo que no hablé es de cómo convertir una base de datos MySQL a SQLite sin dolor, ya que muchos scripts que circulan por la red no funcionan o están obsoletos. El proceso es sencillo:

sqlt -f DBI --dsn dbi:mysql:mydb --db-user root --db-pass ******** -t SQLite > schema.sql
mysqldump -u root -p --compatible=ansi --skip-opt mydb | grep "INSERT" > data.sql
cat schema.sql | sqlite3 mydb.db && cat data.sql | sqlite3 mydb.db

Lo único a tener en cuenta es revisar el volcado de datos en busca de comillas simples () escapadas, ya que SQLite parece no aceptarlas bien. Basta sustituirlas por alguna cadena de caracteres aleatoria que luego se re-sustituye con una consulta UPDATE.

Este script automatiza el proceso:

#!/bin/bash
sqlt -f DBI --dsn dbi:mysql:$1 --db-user $2 --db-pass $3 -t SQLite > schema.sql
mysqldump -u$2 -p$3 --compatible=ansi --skip-opt $1 | grep "INSERT" > data.sql
iconv -f ISO-8859-1 -t UTF-8 data.sql > data-iso.sql
perl -pe "s/\\\'/''/g" data-iso.sql > data.sql
cat schema.sql | sqlite3 "$1.db" && cat data.sql | sqlite3 "$1.db"
rm -f schema.sql data.sql data-iso.sql

Debe ejecutarse del siguiente modo: ./mysql2sqlite.sh database user password.

2 comentarios en “Cómo convertir una base de datos MySQL a SQLite”

joan dice:

No me reconoce el comando “sqlt”
Y no lo encuentro en mi Debian ¿¿??

raro, raro.

admin dice:

Debes instalar antes SQL:Translator tal como explico en el primer link del post.