Configuration de la base de données

ownCloud nécessite une base de données pour stocker les données administratives. Les moteurs de bases de données suivants sont actuellement gérés :

MySQL ou MariaDB sont les moteurs de bases de données recommandés.

Prérequis

Choisir d’utiliser MySQL / MariaDB, PostgreSQL ou Oracle (ownCloud Édition Entreprise seulement) nécessite d’installer et de configurer d’abord la base de données. (Utilisateurs Oracle, consulter Configuration de la base de données Oracle.)

Note

Les étapes nécessaires à la configuration d’une base de données tierce ne sont pas abordées dans ce document. Veuillez vous référer à la documentation de votre base de données pour les instructions.

MySQL / MariaDB storage engine

Depuis ownCloud 7, seul InnoDB est supporté comme moteur de stockage. Il existe des hébergements partagés qui ne gèrent pas InnoDB mais seulement MyISAM. Exécuter ownCloud sur de tels environnements n’est pas supporté.

MySQL / MariaDB avec activation des journaux binaires

ownCloud utilise actuellement une transaction d’isolation TRANSACTION_READ_COMMITTED pour éviter des pertes de données pour des scénarios de forte charge (par exemple, en utilisant le client de synchronisation avec beaucoup de clients/utilisateurs et beaucoup d’opération en parallèle). Ceci nécessite que les journaux binaires soient correctement configurés ou désactivés en utilisant MySQL ou MariaDB. Votre système est affecté si vous observez ce qui suit dans le fichier journal pendant l’installation ou la mise à jour d’ownCloud :

An unhandled exception has been thrown: exception ‘PDOException’ with message ‘SQLSTATE[HY000]: General error: 1665 Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.’

Il existe deux solutions. La première est de désactiver les journaux binaires. Les journaux binaires enregistrent toutes les modifications dans votre base de données et le temps que prend chacune d’elle. Le but des journaux binaires est de permettre la réplication et de gérer les opérations de sauvegarde.

La seconde est de modifier la déclaration « BINLOG_FORMAT » dans le fichier de configuration ou dans le script de démarrage de votre base de données avec « BINLOG_FORMAT = MIXED ». Consulter Aperçu des journaux binaires et Les journaux binaires pour des informations détaillées.

Moteur de stockage MySQL / MariaDB niveau d’isolation de transaction « READ COMMITED »

Comme vu plus haut, ownCloud utilise le niveau d’isolation de transaction TRANSACTION_READ_COMMITTED. Certaines configurations de base de données forcent l’utilisation de niveaux d’isolation de transaction différents. Pour éviter les pertes de données dans les cas de forte charge (par ex. en utilisant un client de synchronisation avec beaucoup d’utilisateurs et d’opérations en parallèle), vous devez configurer le niveau d’isolation de transaction de manière appropriée. Veuillez consulter MySQL manual pour des informations détaillées.

Paramètres

Pour paramétrer la base de données pour ownCloud, veuillez suivre les instructions dans Assistant d’installation. Vous ne devriez pas avoir besoin de modifier les valeurs correspondantes dans le fichier config/config.php. Cependant, dans certains cas (par exemple si vous voulez connecter votre instance ownCloud à une base de données créée lors d’une installation précédente d’ownCloud), certaines modifications pourraient être nécessaires.

Configuration d’une base de données MySQL ou MariaDB

Si vous décidez d’utiliser une base de données MySQL ou MariaDB, assurez-vous :

  • d’avoir installer et activer l’extension PHP pdo_mysql ;
  • que mysql.default_socket pointe vers le bon socket (si la base de données est exécutée sur le même serveur qu’ownCloud).

Note

MariaDB est rétro-compatible avec MySQL. Toutes les instructions sont valables pour les deux. Vous n’avez pas besoin de remplacer mysql par quoi que ce soit.

La configuration de PHP dans le fichier /etc/php5/conf.d/mysql.ini doit ressembler à ceci :

# configuration for PHP MySQL module
extension=pdo_mysql.so

[mysql]
mysql.allow_local_infile=On
mysql.allow_persistent=On
mysql.cache_size=2000
mysql.max_persistent=-1
mysql.max_links=-1
mysql.default_port=
mysql.default_socket=/var/lib/mysql/mysql.sock  # Debian squeeze: /var/run/mysqld/mysqld.sock
mysql.default_host=
mysql.default_user=
mysql.default_password=
mysql.connect_timeout=60
mysql.trace_mode=Off

Vous devez maintenant créer l’utilisateur de la base de données et la base de données elle-même en utilisant l’interface de ligne de commande de MySQL. Les tables de la base de données seront créées lors de votre première connexion à ownCloud.

Pour démarrer l’interface en ligne de commande de MySQL, utilisez:

mysql -uroot -p

Il apparaît alors une invite mysql> ou MariaDB [root]>. Saisissez maintenant les lignes suivantes et confirmez en appuyant sur la touche « Entrée » :

CREATE DATABASE IF NOT EXISTS owncloud;
GRANT ALL PRIVILEGES ON owncloud.* TO 'utilisateur'@'localhost' IDENTIFIED BY 'mot_de_passe';

Vous pouvez maintenant quitter l’interface en saisissant:

quit

Une instance d’ownCloud configurée avec MySQL doit contenir le nom d’hôte sur lequel s’exécute la base de données, un nom d’utilisateur valide et un mot de passe pour y accéder ainsi que le nom de la base de données. Le fichier config/config.php créé par Assistant d’installation devrait par conséquent contenir des entrées similaires à ce qui suit :

<?php

  "dbtype"        => "mysql",
  "dbname"        => "owncloud",
  "dbuser"        => "utilisateur",
  "dbpassword"    => "mot_de_passe",
  "dbhost"        => "localhost",
  "dbtableprefix" => "oc_",

Base de données PostgreSQL

Si vous décidez d’installer une base de données PostgreSQL, assurez-vous d’avoir installer et activer l’extension PostgreSQL dans PHP. La configuration PHP dans le fichier /etc/php5/conf.d/pgsql.ini devrait ressembler à ceci :

# configuration for PHP PostgreSQL module
extension=pdo_pgsql.so
extension=pgsql.so

[PostgresSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0

La configuration par défaut pour PostgreSQL (au moins sur Ubuntu 14.04) est d’utiliser la méthode d’authentification par pair. Vérifier le fichier /etc/postgresql/9.3/main/pg_hba.conf pour voir quelle méthode d’authentification est utilisée pour votre instance. Pour démarrer l’interface de ligne de commande de PostgreSQL, saisissez ce qui suit:

sudo -u postgres psql -d template1

Une invite template1=# apparaît alors. Saisissez maintenant les lignes suivantes et confirmez en appuyant sur la touche entrée :

CREATE USER utilisateur CREATEDB;
CREATE DATABASE owncloud OWNER utilisateur;

Vous pouvez quitter l’interface en saisissant:

\q

Une instance ownCloud configurée avec PostgreSQL doit contenir le chemin d’accès au socket sur lequel la base de données est exécutée, le nom d’hôte, l’utilisateur système utilisé par le processus PHP et un mot de passe vide pour y accéder et le nom de la base de données. Le fichier config/config.php créé par Assistant d’installation doit par conséquent contenir des entrées similaires à ce qui suit :

<?php

  "dbtype"        => "pgsql",
  "dbname"        => "owncloud",
  "dbuser"        => "utilisateur",
  "dbpassword"    => "",
  "dbhost"        => "/var/run/postgresql",
  "dbtableprefix" => "oc_",

Note

L’hôte pointe en fait vers le socket qui est utilisé pour se connecter à la base de données. Utiliser « localhost » ici ne fonctionnera pas si postgreSQL est configuré pour utiliser l’authentification par pair. Veuillez noter également qu’aucun mot de passe n’est indiqué, car cette méthode d’authentification n’utilise pas de mot de passe.

Si vous utilisez une autre méthode d’authentification, vous aurez besoin de suivre les étapes suivantes pour configurer la base de données. Vous devez créer un utilisateur de base de données et la base de données elle-même en utilisant l’interface de ligne de commande de PostgreSQL. Les tables de la base de données seront créées lors de votre première connexion à ownCloud.

Pour démarrer l’interface de commande de PostgreSQL, utilisez:

psql -hlocalhost -Upostgres

Une invite postgres=# apparaît alors. Saisissez maintenant les lignes suivantes et confirmez en appuyant sur la touche « Entrée » :

CREATE USER utilisateur WITH PASSWORD 'mot_de_passe';
CREATE DATABASE owncloud TEMPLATE template0 ENCODING 'UNICODE';
ALTER DATABASE owncloud OWNER TO utilisateur;
GRANT ALL PRIVILEGES ON DATABASE owncloud TO utilisateur;

Vous pouvez quitter l’interface de ligne de commande en saisissant:

\q

Une instance d’ownCloud configurée avec PostgreSQL doit contenir le nom d’hôte sur lequel la base de données est exécutée, un nom d’utilisateur valide et un mot de passe pour y accéder et le nom de la base de données. Le fichier config/config.php créé par Assistant d’installation doit contenir des entrées similaires à ce qui suit :

<?php

  "dbtype"        => "pgsql",
  "dbname"        => "owncloud",
  "dbuser"        => "utilisateur",
  "dbpassword"    => "mot_de_passe",
  "dbhost"        => "localhost",
  "dbtableprefix" => "oc_",

Dépannage

Comment passer outre l’erreur générale : « 2006 MySQL server has gone away »

La requête de base de données prend trop de temps et par conséquent, le serveur MySQL dépasse le délai de temporisation (time out). Il est aussi possible que le serveur rejette un paquet qui est trop gros. Veuillez consulter le manuel de votre base de données pour savoir comment augmenter la valeur des deux options de configuration wait_timeout et/ou max_allowed_packet.

Certains hébergeurs nautorisent pas l’accès à ces options de configuration. Dans ce cas, ownCloud propose une option de configuration dbdriveroptions dans votre fichier config/config.php où vous pouvez passer ces options au pilote de base de données. Veuillez vous référer à Paramètres de Config.php pour un exemple.

Comment savoir si le serveur MySQL/PostgreSQL est joignable ?

Pour vérifier la connectivité réseau du serveur, utilisez la commande « ping » avec le nom d’hôte du serveur (bdd.serveur.com dans cet exemple):

ping bdd.serveur.dom
PING bdd.serveur.dom (ip-address) 56(84) bytes of data.
64 bytes from votre-serveur.local.lan (192.168.1.10): icmp_req=1 ttl=64 time=3.64 ms
64 bytes from votre-serveur.local.lan (192.168.1.10): icmp_req=2 ttl=64 time=0.055 ms
64 bytes from votre-serveur.local.lan (192.168.1.10): icmp_req=3 ttl=64 time=0.062 ms

Pour une vérification plus détaillée, comme l’accès à la base de données elle-même, voir la question suivante.

Comment savoir si l’utilisateur créé peut accéder à la base de données ?

Le moyen le plus simple de tester si une base de données peut être jointe est de démarrer l’interface de ligne de commande :

MySQL :

En supposant que le serveur de base de données est installé sur le système à partir duquel vous exécutez la commande:

mysql -uUTILISATEUR -p

Pour accéder à une installation MySQL sur une machine différente, ajoutez l’option « -h » suivie du nom d’hôte:

mysql -uUTILISATEUR -p -h NOM_HÔTE
mysql> SHOW VARIABLES LIKE "version";
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| version       | 5.1.67 |
+---------------+--------+
1 row in set (0.00 sec)
mysql> quit

PostgreSQL :

En supposant que le serveur de base de données est installé sur le système à partir duquel vous exécutez la commande:

psql -Uutilisateur -downcloud

Pour accéder à une installation PostgreSQL sur une machine différente, ajoutez l’option « -h » suivie du nom d’hôte:

psql -Uutilisateur -downcloud -h NOM_HÔTE
postgres=# SELECT version();
PostgreSQL 8.4.12 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.3 20080704 (prerelease), 32-bit
(1 row)
postgres=# \q

Commandes SQL utiles

Afficher les utilisateurs de bases de données:

MySQL      : SELECT User,Host FROM mysql.user;
PostgreSQL : SELECT * FROM pg_user;

Afficher les bases de données disponibles:

MySQL      : SHOW DATABASES;
PostgreSQL : \l

Afficher les tables d’ownCloud dans la base de données:

MySQL      : USE owncloud; SHOW TABLES;
PostgreSQL : \c owncloud; \d

Quitter la base de données:

MySQL      : quit
PostgreSQL : \q
Toute la documentation est sous licence Creative Commons Attribution 3.0 Unported license — Traduction : Cédric Corazza.