MariaDB

De knowledge
Aller à la navigation Aller à la recherche

Suite de de sombres conflits mySql est devenu MariaDB. Tout reste pourtant compatible.

Pour ce qui est de l'installation de mariadb même, l'exemple est donné pour un Raspberry PI ici.

Création d'une nouvelle base (un schéma pour être précis)

create database my_database;

Création et configuration d'un "user"

Pour accéder à une base de donnée on crée un utilisateur dans un premier temps puis on lui donne les droits necessaires.

Exemple pour créer un utilisateur qui aura TOUS les droits sur une base (celui qui peut tout casser)

CREATE USER 'admin-base1'@'192.168.1.%' IDENTIFIED BY PASSWORD '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2'
GRANT ALL PRIVILEGES ON base.* to 'admin-base1'@'192.168.1.%'

On crée d'abord un "user" qui pourra se loguer depuis le réseau local seulement avec un mot de passe dont on donne le "hash".

Ensuite un donne les droits complets sur la base (INSERT, DELETE, UPDATE... mais aussi CREATE, DROP....)

Pour générer le "hashcode" on utilise le console mariadb:

Par exemple on veut le hashcode pour le mot de passe 'toto'

SELECT PASSWORD('toto');

Qui nous donne:

+-------------------------------------------+
| PASSWORD('toto')                          |
+-------------------------------------------+
| *63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2 |
+-------------------------------------------+
1 row in set (0.001 sec)

C'est cette valeur que l'on a utilisé pour le CREATE USER.

Acces client-serveur

On considère ici que les deux machines s'appellent :

  • le serveur s'appelle : database
  • le client s'appelle : client-hosts

Côté serveur

Il faut modifier le fichier /etc/mysql/mariadb.conf.d/50-server.cnf

Recherchez la ligne bind-address et remplacez 127.0.0.1 par 0.0.0.0 pour permettre les connexions externes :

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

Et redémarrer mariadb

sudo systemctl restart mariadb

On se connecte en root à la base:

mysql -u root -p

et on crée l'utilisateur:

CREATE USER 'user'@'client-host' IDENTIFIED BY 'mot_de_passe';
GRANT ALL PRIVILEGES ON my_database.* TO 'user'@'client-host';
FLUSH PRIVILEGES;

Si on se connecte depuis le serveur :

mariadb --user utilisateur -p
Enter password:
ERROR 1698 (28000): Access denied for user 'utilisateur'@'localhost'

Logique on se fait jetter. Si on se connecte depuis le client (client-host):

mariadb --host database --user utilisateur -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 59
Server version: 10.11.11-MariaDB-0+deb12u1 Debian 12

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Ca marche ! On peut se connecter de ce serveur et seulement de ce serveur.

Sauvegardes et restauration des bases

L'outil utilisé est mariadb-backup (mariabackup) et il n'est pas installé par défaut.

Installation

Pour l'installer :

sudo apt install mariadb-backup
# Ou sur les versions anciennes (< Debian 10)
apt install mariadb-client # ce qui fait que, normalement dans ce as, il est installé avec le client.

Sauvegarde

On sauvegarde complete de toutes les base par :

sudo mariabackup --backup --target-dir=/var/mariadb/backup/ --user=root

On pourrait le faire sous un autre utilisateur en précisant le mot de passe du user utilisé.

les fichiers de sauvegarde sont dans /var.mariadb/backup avec la même structure que les fichiers d'origine. (un rsync fait la même chose!)