Dernièrement, j'ai été amené à utiliser pour la première fois une base de données au format SQLite (voir cet article : [SQLPage] Utilisation sur un NAS Synology avec Docker et MySQL) et du coup, s'est posée la question de la gestion de ce type de base de données.
I- Particularités des bases de données SQLite :
- La base de données n'est constituée que d'un seul fichier avec l'extension .db.
- Il n'y a pas d'accès par mot de passe comme ça peut être le cas avec les bases MySQL et PostgreSQL (on verra d'ailleurs que ça pose problème pour y accéder avec Adminer...).
IMPORTANT : pour pouvoir modifier une base de données sous SQLite, il faut que le dossier contenant la base de données au format .db soit accessible en lecture/écriture !!! Sinon, la base ne sera accessible qu'en lecture. Cela s'explique par le fait que ce même dossier sert pour les fichiers temporaires.
II- Applications pour SQLite
A- SqliteBrowser
Sous Linux Mint, j'ai installé l'application SqliteBrowser : https://sqlitebrowser.org/. Elle fait le job mais on ne peut pas visualiser le diagramme (schéma graphique) de la base de données avec les relations entre les différentes tables. De plus, elle ne peut pas lire les bases se trouvant sur un serveur distant à moins de payer un abonnement...
B- DBeaver
Du coup, j'ai installé DBeaver : https://dbeaver.io/. Pour l'installation, bien qu'il existe un paquet Snap, je conseille une installation avec le paquet .deb à récupérer sur le site avec la commande wget : https://doc.ubuntu-fr.org/dbeaver.
Par contre, le schéma obtenu est incomplet car certaines clés ne sont pas reliées. De plus, le diagramme ne montre pas les champs en relation. J'ai le même problème avec cet outil https://github.com/ncruces/sqlite-schema-diagram. Il doit donc s'agir d'un problème sur ma base de données de test...
Avec DBeaver, je n'ai pas réussi à créer de champ de type TIMESTAMP : j'ai l'impression que c'est limité à 5 types... contrairement à SqliteBrowser. Donc DBeaver n'est pas tellement intéressant...
C- SchemaCrawler
Il existe aussi l'application java SchemaCrawler qui permet d'obtenir des diagrammes en ligne de commande pour différents types de bases de données : https://www.schemacrawler.com/. À voir...
D- phpLiteAdmin
Il existe aussi phpLiteAdmin qui va à l'essentiel : https://www.phpliteadmin.org/. Par contre, il est nécessaire d'éditer le fichier "/usr/lib/phpliteadmin/phpliteadmin.config.php" (qui est en fait le fichier /etc/phpliteadmin.config.php) pour modifier le mot de passe et le répertoire ($directory) contenant les bases de données SQLite.
À SAVOIR : si le dossier contenant la base SQLite n'est qu'en lecture seule, nous n'aurons pas de commande "delete" en rouge pour supprimer un enregistrement dans une table.
E- Adminer - RECOMMANDÉ
Adminer est une application web (installation sur un serveur) qui est capable de gérer les bases SQLite en ligne moyennant quelques manip (je m'y suis longtemps cassé les dents...). Elle permet aussi d'éditer le schéma ou diagramme de la base de données.
Je décris ici le réglage concernant Adminer installé dans un conteneur docker sur mon NAS Synology (voir cet article où j'en parle : [SQLPage] Utilisation sur un NAS Synology avec Docker et MySQL).
Tout d'abord dans un terminal du NAS, on va taper cette commande pour entrer dans le terminal du conteneur Adminer1 :sudo docker exec -it --user root adminer1 /bin/bash
Pour des raisons de sécurité et éviter un accès ouvert à toustes, il faut utiliser le plugin "login-password-less.php" qui impose un mot de passe global dans Adminer permettant d'accéder ensuite au dossier contenant la base de données SQLite (qui elle n'a pas de mot de passe). Source : https://www.adminer.org/en/password/
La première chose à faire est donc de créer, dans le conteneur docker de Adminer, le fichier /var/www/html/sqlite.php avec ce contenu (et en indiquant un mot de passe... en clair à la place de "MOT_DE_PASSE_SQLITE") :
<?php
function adminer_object() {
include_once "./plugins/plugin.php";
include_once "./plugins/login-password-less.php";
return new AdminerPlugin(array(
// TODO: inline the result of password_hash() so that the password is not visible in source codes
new AdminerLoginPasswordLess(password_hash("MOT_DE_PASSE_SQLITE", PASSWORD_DEFAULT)),
));
}
include "./adminer.php";
Ensuite, sur le NAS, dans l'application Docker, on va indiquer dans quel dossier Adminer travaillera avec les bases des données SQLite.
Pour agir sur une base de données se trouvant dans un autre conteneur docker, on va créer un volume permettant faire le lien avec Adminer. Par exemple pour ma base de données "sqlpage.db" utilisée dans mon dossier docker "sqlapge1" du NAS (servant au conteneur docker "sqlpage"), voici le réglage pour qu'elle soit utilisable dans Adminer :
Pour se connecter, il faudra alors dans son navigateur Internet :
- pointer vers l'adresse du serveur Adminer mais vers ce fichier sqlite.php (ou un autre nom qu'on aurait pu lui donner) avec une adresse de la forme https://Adresse_Serveur_Adminer/sqlite.php (1),
- choisir le type "SQLite 3" (2)
- renseigner le mot de passe (3) qu'on a mis dans le fichier sqlite.php au-dessus. Pas besoin de saisir de nom d'utilisateur.
- Dans le champ base de données, je renseigne le chemin "./bases_sqlite/sqlpage1.db" (4)
- Je clique sur le bouton "Authentification" (5).
Et si tout s'est bien passé, j'arrive dans l'interface de gestion de ma base de données SQLite !!!
Utilisation de Adminer directement, localement et sans serveur : il suffit de faire pointer son navigateur Internet vers le fichier .php de adminer.
Source : https://kinsta.com/fr/blog/adminer/