Owncloud : convertir la base de SQLite à MySQL

Lors de l'installation d'une instance OwnCloud, j'ai pris les options par défaut, avec une base SQLite3.

Ceci est visible dans le fichier de configuration :

 '52186ab50eee7',
  'passwordsalt' => 'ae24c0a26cb22899d0dd54285fee51',
  'datadirectory' => '/var/www/owncloud/data',
  'dbtype' => 'sqlite3',
  'version' => '5.0.17',
  'installed' => true,
  'maxZipInputSize' => 209715200,
  'allowZipDownload' => true,
);

Hors, j'ai sur le serveur plusieurs bases MySQL, qui sont sauvegardées régulièrement, et au final je préférerais donc avoir toutes mes données dans du MySQL (ou MariaDB en l'occurence).

Il est possible de convertir la base SQLite3 en MySQL, puis modifier le fichier de configuration pour faire pointer sur la "bonne" base.

Ceci se fait en plusieurs étapes :

  • Installation de sqlite3
  • Dump du contenu de la base sqlite3
  • Conversion du dump au format MySQL
  • Création d'une base MySQL
  • Import du contenu
  • Modification du fichier de configuration

Installation et dump

L'installation se fait de la manière suivante (sur debian) :

apt-get install sqlite3

On se positionne ensuite dans le répertoire /var/www/owncloud/data, dans lequel on trouve un fichier owncloud.db,et on lance la commande :

sqlite3 owncloud.db .dump > dump.mycloud.sql

Conversion

Le format du fichier dump est différent entre les bases sqlite3 et MySQL. Il est donc nécessaire de le convertir. On peut trouver un script python qui effectue cette conversion, via la séquence suivante :

wget http://www.redmine.org/attachments/download/6239/sqlite3-to-mysql.py
chmod a+x sqlite3-to-mysql.py
cat dump.mycloud.sql | python sqlite3-to-mysql.py > owncloud.sql

A ce niveau, le fichier owncloud.sql contient des instructions compatibles avec MySQL.

Création de la base MySQL et import des données

On va créer une base MySQL, avec les commandes :

mysql -u root --password=ROOTPASS
create database DB;
grant all on DB.* to 'USER'@'localhost' identified by 'PASS'
exit

mysql -u USER --password=PASS DB < owncloud.sql

Changement de la configuration OwnCloud

Il reste à modifier le fichier de configuration pour lui indiquer les nouveaux paramètres. Pour des raisons de sûreté, on fait d'abord une sauvegarde de la configuration avec sqlite3 :

sudo cp config.php config.php.sqlite3

Reste à indiquer les nouveaux paramètres :

 '52186ab50eee7',
  'passwordsalt' => 'ae24c0a26cb22899d0dd54285fee51',
  'datadirectory' => '/data/www/owncloud/data',
  'dbtype' => 'mysql',
  'dbname' => 'DB',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'USER',
  'dbpassword' => 'PASS',
  'installed' => true,
  'maxZipInputSize' => 209715200,
  'allowZipDownload' => true,
);

On profite maintenant d'une base régulièrement sauvegardée, et de performances nettement améliorées !

Référence : http://fabianpeter.de/cloud/owncloud-migrating-from-sqlite-to-mysql/

Addendum : lors d'un autre essai, j'ai également du modifier des clauses CLOB (sqlite) en LONGTEXT (mysql).

Catégorie