Restaurar Base de datos Sqlite en Owncloud y migrar a MySQL

Si tenemos configurado SQLite como motor de base de datos en Owncloud, es posible que se corrompa y nos deje de funcionar la aplicación.

En este caso obtendremos un error de este tipo cuando intentemos acceder a nuestro entorno de trabajo:

Restaurar Base de datos Sqlite en Owncloud y migrar a MySQL

Owncloud tiene su propio fichero log donde se almacenan las posibles causas de este error. El fichero data/owncloud.log contiene el registro de las posibles incidencias de OwnCloud.

En el caso que estamos revisando, si nos aparece una incidencia de este tipo, puede indicarnos que la base de datos de SQLite está corrompida:

{"reqId":"30ee45262b7ceb825d8652f364eecff2","remoteAddr":"5","app":"index","message":"Exception: {\"Message\":\"An exception occurred while executing 'SELECT \\\"configvalue\\\", \\\"appid\\\" FROM \\\"oc_appconfig\\\" WHERE \\\"configkey\\\" = ?' with params [\\\"enabled\\\"]:\\n\\nSQLSTATE[HY000]: General error: 26 file is encrypted or is not a database\",\"Code\":0,\"Trace\":\"#0 \\\/home\\\/owncloud\\\/public_html\\\/3rdparty\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/DBALException.php(116): Doctrine\\\\DBAL\\\\Driver\\\\AbstractSQLiteDriver->convertException('An exception oc...', Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOException))\\n#1 \\\/home\\\/owncloud\\\/public_html\\\/3rdparty\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(836): Doctrine\\\\DBAL\\\\DBALException::driverExceptionDuringQuery(Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOSqlite\\\\Driver), Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOException), 'SELECT \\\"configv...', Array)\\n#2 \\\/home\\\/owncloud\\\/public_html\\\/lib\\\/private\\\/db\\\/connection.php(113): Doctrine\\\\DBAL\\\\Connection->executeQuery('SELECT \\\"configv...', Array, Array, NULL)\\n#3 \\\/home\\\/owncloud\\\/public_html\\\/lib\\\/private\\\/appconfig.php(259): OC\\\\DB\\\\Connection->executeQuery('SELECT `configv...', Array)\\n#4 \\\/home\\\/owncloud\\\/public_html\\\/lib\\\/private\\\/app.php(219): OC\\\\AppConfig->getValues(false, 'enabled')\\n#5 \\\/home\\\/owncloud\\\/public_html\\\/lib\\\/private\\\/app.php(71): OC_App::getEnabledApps()\\n#6 \\\/home\\\/owncloud\\\/public_html\\\/lib\\\/base.php(551): OC_App::loadApps(Array)\\n#7 \\\/home\\\/owncloud\\\/public_html\\\/lib\\\/base.php(1039): OC::init()\\n#8 \\\/home\\\/owncloud\\\/public_html\\\/index.php(34): require_once('\\\/home\\\/owncloud\\\/...')\\n#9 {main}\",\"File\":\"\\\/home\\\/owncloud\\\/public_html\\\/3rdparty\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/AbstractSQLiteDriver.php\",\"Line\":85}","level":4,"time":"2018-06-29T08:05:06+00:00","method":"GET","url":"\/index.php"}
{"reqId":"adbb47bb1b8803afbe2d4947d5f32de3","remoteAddr":"","app":"cron","message":"An exception occurred while executing 'SELECT \"configvalue\", \"appid\" FROM \"oc_appconfig\" WHERE \"configkey\" = ?' with params [\"enabled\"]:\n\nSQLSTATE[HY000]: General error: 26 file is encrypted or is not a database","level":4,"time":"2018-06-29T08:15:01+00:00","method":"--","url":"--"}

El error concreto que nos da la pista es:

General error: 26 file is encrypted or is not a database

Cómo recuperar una base de datos SQLite

Para recuperar la base de datos SQLite realizaremos estos pasos:

1.- Descargar e instalar la herramienta DB Browser for SQLite

Accedemos a la web https://sqlitebrowser.org/ y nos descargamos la versión del software que se adapte al sistema operativo que tenemos en nuestro ordenador.

2.- Descargar el fichero de base de datos a nuestro ordenador

Nos conectamos por FTP a nuestro servidor de Owncloud y descargamos de la carpeta data el fichero owncloud.db

3.- Importar fichero owncloud.db a DB Browser

Abrimos la aplicación DB Browser. Para importar ir a Archivo / Abrir base de datos y seleccionamos el fichero recién descargado

Si todo ha ido bien, veremos la relación de tablas de la base de datos de Owncloud.

4.- Exportar base de datos a SQL

Una vez importada la base de datos, la exportaremos a través de Archivo / Exportar / Base de datos a archivo SQL. Nos pedirá que pongamos un nombre al fichero SQL.

5.- Subir por FTP el fichero SQL a nuestro servidor

Nos conectamos por FTP a nuestro servidor de Owncloud y subimos el fichero SQL generado a la carpeta data.

6.- Importar fichero SQL a base de datos SQLite

Nos conectamos por SSH, nos dirigimos al directorio donde hemos subido nuestro fichero SQL (carpeta data) y ejecutamos este comando (suponemos que el fichero SQL generado se llama owncloud.db.sql)

sqlite3 owncloud.restore.db < owncloud.db.sql

Ahora haremos una copia de seguridad del fichero SQLite antiguo y sobreescrimos el nuevo por el antiguo

cp owncloud.db owncloud.db.bak
mv owncloud.restore.db owncloud.db

Migrar de SQLite a Mysql

SQLite está recomendado para entornos pequeños de Owncloud. Para entornos en producción es recomendado MySQL.

Para migrar de SQLite a Mysql, haremos estos pasos:

1.- Crear base de datos y usuario MySQL donde alojaremos nuestra base de datos de Owncloud

2.- Convertir SQLite a MySQL con la herramienta propia que viene con Owncloud.

  • Accedemos por SSH al espacio donde está alojado Owncloud (con el usuario bajo el cual se ejecuta la aplicación)
  • Nos dirigimos al directorio raíz de Owncloud
  • Ejecutamos este comando.
php occ db:convert-type --all-apps mysql USUARIO_MYSQL_OWNCLOUD IP_SERVIDOR_MYSQL BBDD_MYSQL_OWNCLOUD

Ejemplo:

php occ db:convert-type --all-apps mysql owncloud_user 127.0.0.1 owncloud_db

En este ejemplo, el usuario MySQL que hemos creado es owncloud_user, el servidor de base de datos es el propio servidor y la base de datos es owncloud_db.

Cuando lancemos el comando nos pedirá la contraseña del usuario MySQL indicado.

La propia herramienta se encarga de configurar Owncloud para utilizar MySQL como motor de base de datos y utilizar las credenciales indicadas.

Si te ha quedado alguna duda, háznosla saber a través de los comentarios y trataremos de solucionarla 🙂

Comparte este tutorial:

No hay comentarios en este tutorial

Sé el primero en enviar un comentario: