01 Jan 0001, 00:00

Share

Création du conteneur

docker-compose.yml avec

image: mariadb
container_name: "my-db-container"

Variables d’environnement

environment:
  MARIADB_ROOT_PASSWORD=blabla1
  MARIADB_USER=myuser
  MARIADB_PASSWORD=blabla2
  MARIADB_DATABASE=my-database

Vont respectivement définir le mot de passe root, créer un user avec un password, et créer une base de données.
Le user créé pourra se connecter depuis n’importe quel hôte, et aura les droits complets sur la base créée.

J’ai l’impression qu’elles ne sont utilisées que si aucune base de données (volume) n’existe déjà. Par la suite, elles n’ont aucun effet.

Configuration

Les fichiers de configuration, à l’intérieur du conteneur, donc dans
/etc/mysql/
/etc/mysql/my.cnf est un lien vers /etc/alternatives/my.cnf qui est un lien vers /etc/mysql/mariadb.cnf.

On peut lister les options en SQL :
SHOW VARIABLES;
Si on connaît le nom de l’option que l’on cherche on peut faire
SHOW VARIABLES LIKE 'my_config_option';
On peut aussi utiliser le wildcard % :
SHOW VARIABLES LIKE '%option%';

Résolution des noms

Par défaut, la résolution des noms est désactivée dans la configuration MariaDB du conteneur Docker, via la directive skip-name-resolve présente dans le fichier /etc/mysql/mariadb.conf.d/05-skipcache.cnf.

La raison à ceci semble être que le résolveur DNS d’un conteneur est défini uniquement au moment de sa création, et s’il change, le conteneur ne recevra pas les nouvelles informations et n’aura plus de DNS disponible, ce qui ralentira considérablement les requêtes DNS.
Ceci empêche toutefois d’utiliser une syntaxe de type user@conteneur.network pour autoriser les connexions à la base.

Pour changer ce comportement, on peut monter un fichier vide à l’emplacement du fichier de conf :

    volumes:
    - ./config/empty.cnf:/etc/mysql/mariadb.conf.d/05-skipcache.cnf

Connexion à l’interface SQL du conteneur

docker exec -it docker-db mariadb --user root -pblabla1

On arrive sur un shell type
MariaDB [(selected-database)]
Aucune base n’étant initialement sélectionnée, on a
MariaDB [(none)]

On peut directement fournir la commande à exécuter avec
-e 'COMMAND;'

Voir la version

Sur le shell SQL :
SELECT VERSION() ;

Caractères spéciaux

Éviter les points ou tirets. underscore OK.
Si besoin quand même, échapper avec backtick `

Gestion des bases de données

voir les différents bases :
SHOW DATABASES;

Créer une base :
CREATE DATABASE my_database;

Choisir une base pour l’usage courant :
USE my_database;

Supprimer une DB et toutes les tables dedans :
DROP DATABASE my_database;

Gestion des users

Créer un user et restreindre l’accès depuis un domaine :
CREATE USER 'myuser'@'authorizeddomain' IDENTIFIED BY 'my-password'

Si on ne spécifie pas de “authorizeddomain”, alors ce sera %, ce qui semble signifier “tous”.

Lister les users et le(s) domaines qui autorisent leur accès :
SELECT user,host FROM mysql.user;
Ceci va lire le contenu de la table “user” de la base “mysql” (base créée automatiquement au déploiement de MariaDB).

Supprimer un user, ou un accès :
DROP USER 'myuser'@'authorizeddomain';
Si on ne spécifie pas de “@authorizeddomain”, il va supprimer ‘user’@’%’

Voir les permissions d’un utilisateur :
SHOW GRANTS for myuser;

Ajouter des droits complets à un utilisateur :
GRANT ALL ON my_database.* TO 'my-user'@'authorizeddomain';
Les apostrophes semblent poser problème sur le nom de la base de données.
Bien ajouter le .* car les privilèges s’appliquent aux tables.

Gestion des tables

Voir les tables d’une base :
SHOW TABLES; # si DB déjà selectionnée
SHOW TABLES FROM my-database; # si pas encore sélectionnée