Le serveur de base de données est un outil indépendant d'un serveur Web.
Son rôle est de permettre le stockage, l'exploitation et la sécurisation de données structurées en bases de données (un nom pour un domaine de gestion) au sein desquelles seront visibles les tables et occurrences.
Le serveur MySql est un outil adapté à une gestion de bases de données relationnelles, permettant d’assurer de la redondance de serveur, de l’exécution de procédures stockées ou de déclencheurs.
PHPMyAdmin est une surcouche graphique permettant d'administrer la base de données MySQL par des pages Web (en PHP).
On procèdera d'abord à l'installation d'Apache et PHP conformément à la procédure ici.
On pourra aussi utiliser phpmyadmin pour administrer depuis un point unique plusieurs bases de données : voir ici.
Il ne s'agit pas ici de faire un cours sur le langage SQL mais de présenter les principales commandes d'utilisation en dehors de l'interface graphique PhpMyAdmin.
Après l'installation du service, on intervient dans MySql par la console en ligne de commande.
La commande mysql tente une connexion avec le compte root sans mot de passe. Elle devrait normalement déboucher sur un échec.
Connexion avec demande du mot de passe
mysql -u <nomUtil> [-p] [<nom_base_de_donnees>] /* Permet la connexion sous un nom d'utilisateur, avec demande du mot de passe. On peut aussi directement utiliser une base de données.*/
Attention : avec cet syntaxe, on peut retrouver le mot de passe dans l'historique des commandes
Connexion en fournissant le mot de passe
mysql -u <nomUtil> [-p<motPasse>] [<nom_base_de_donnees>] /* Permet la connexion sous un nom d'utilisateur, avec fourniture du mot de passe. On peut aussi directement utiliser une base de données.*/
Connexion à une machine distante
mysql -u <nomUtil> [-p<motPasse>] -h <nom_ou_adresse_serveur_distant> [<nom_base_de_donnees>]
Remarque : Pour des raisons de sécurité, le compte root de MySql n'est pas autorisé à établir des connexions à la base depuis d'autres machines que localhost.
On devra donc procéder comme suit sur le SGBD pour permettre une connexion distante avec un autre compte :
CREATE USER <nomutil> IDENTIFIED BY '<motPasse>' ;
GRANT usage ON *.* TO '<nomutil>'@'%';
Exemple
mysql -u uGSB -pbazGSB;
Pour utiliser une base particulière, on a recours à la commande use
USE <nom_base_de_donnees>;
Les comptes de MySql sont stockés dans la base mysql créée lors de l'installation. Pour modifier le mot de passe et l'exiger à chaque connexion, on sélectionnera cette base et on modifiera le contenu de la table user :
SET PASSWORD FOR 'Utilisateur'@'localhost' = PASSWORD("MotDePasse"); FLUSH privileges; ALTER USER 'Utilisateur'@'localhost' IDENTIFIED BY 'MotDePasse'; FLUSH privileges;
Pour connaître/créer les objets d'un serveur MySQL, on a recours aux commandes suivantes :
Commande | Explication |
---|---|
SHOW DATABASES | Affiche la liste des bases de données |
CREATE DATABASE nomBase | Crée un conteneur de base de données (il n'y a pas de tables) |
SHOW TABLES | Liste les tables contenues dans une base de données |
DESC nom_table | Présente la structure de la table nom_table |
CREATE TABLE nom_table | Crée une table (il faudra aussi décrire ses champs et leurs propriétés, ainsi que les contraintes) |
DROP TABLE nom_table | Détruit la table (structure et contenu) |
ALTER TABLE nom_table | Modifie la structure de la table (type d'un champ, ajout de colonne, ajout de contrainte d'intégrité, etc). |
Les clauses SQL de base pour la création des comptes utilisateur et la gestion des droits sont les suivantes :
Clause | Explication | Exemple |
---|---|---|
CREATE USER | Crée un compte utilisateur | CREATE USER compta IDENTIFIED BY 'mpcompta' |
GRANT | Attribue des privilèges à un compte | GRANT USAGE ON bddComptes.* TO compta@'nom_machine' /* donne des droits d'utilisation sur toutes les tables de la base de données bddComptes au compte compta depuis la machine nom_machine */ |
REVOKE | Retire des privilèges à un compte | REVOKE SELECT ON bdGest.employes FROM compta /* retire le droit de lire (select) la table employes de la base bdGest au compte compta */ |
SHOW GRANTS | Voir les droits d'utilisateur | SHOW GRANTS FOR <USER> |
Par défaut, l'installation de MySql n'autorise les connexions que depuis localhost ou 127.0.0.1.
Pour permettre une connexion depuis une autre machine (un serveur Web, par exemple) :
nano /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address=<ip_d_ecoute> #par défaut, la valeur est limitée à 127.0.0.1 ou localhost #la valeur 0.0.0.0 autorise la connexion depuis toutes les IP du serveur MySQL/MariaDB
On redémarrera alors le service Mysql :
systemctl restart mysql
//ou
service mysql restart
La sauvegarde et la restauration des bases de données passent par la commande mysqldump (utilisée par l'interface PhpMyAdmin .
On trouvera la syntaxe complète ici.
Sauvegarde des bases
mysqldump [-u <compte> [-p<motPasse>]] --all-databases > fichierSortie.sql /* Attention : le mot de passe est collé au "-p" */
mysqldump [-u <compte> [-p<motPasse>]] --database <base1> [<base2>] [<base3>] [...] > fichierSortie.sql
mysqldump [-u <compte> [-p<motPasse>]] <base> > fichierSortie.sql
mysqldump [-u <compte> [-p<motPasse>]] <base> [<table1>] [<table2>] [-w "<condition where>"] > fichierSortie.sql
Restauration
La restauration consiste à faire exécuter un script SQL au serveur MySql.
mysql [-u <compte> [-p<motPasse>]] [-h <serveurDistant>] [<baseExistante>] < <fichierBackup.sql> /* On peut exécuter le script sur une base existante ou faire la création de la base dans le script */
La migration d'une base de données consiste à prendre un contenu (structure et données) et à le transférer dans un environnement différent : par exemple une base existant sous Acces que l'on souhaite transférer vers un environnement Serveur améliorant les performances et les possibilités (procédures stockées ou accès parallèles).
On peut le faire de plusieurs façons. En voici quelques unes.
Remarque : Le code SQL proposé est à adapter aux possibilités de syntaxe de l'environnement.
Deux bases en parallèle, recopie à l'identique : les deux bases doivent disposer d'un environnement graphique sous Windows permettant l'utilisation d'une source de données ODBC (Open Database Connectivity).
CREATE TABLE <maNvlleBase>.<maTable> AS SELECT * FROM <monAncienneBase>.<maTable> /* les tables source et destination seront exactement identiques (Structures / Données) */
ALTER TABLE <nomTable> ADD CONSTRAINT <typeContrainte> <DetailContrainte>
Deux bases en parallèles, structures différentes, insertion de données : L'environnement de l'ancienne base doit disposer d'un environnement permettant la connexion ODBC ou équivalente, il doit exister un pilote ODBC pour accéder à l'ancien SGBD.
INSERT INTO <maNvlleBase>.<maTable> (<liste_des_champs>) AS SELECT <liste_des_champs> FROM <monAncienneBase>.<maTable>
INSERT INTO (<liste_champs>) VALUES (<liste_valeurs>)
→ le script peut être généré par des fonctions d'export du SGBD, ou par une programmation dans un langage (VBA, PHP, autre)
→ Access ou MySQL ont des fonctions permettant de générer automatiquement ce script (en SQL, en XML ou d'autres formats)
Des outils existent pour faire des conversions/migrations entre différents environnements.