Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| utilisateurs:bcag2:sql [Le 14/11/2017, 21:56] – [SQL] ajout note interfaces graphiques bcag2 | utilisateurs:bcag2:sql [Le 10/02/2021, 14:07] (Version actuelle) – [Autres opérations] bcag2 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | {{tag> | ||
| + | ---- | ||
| + | |||
| + | ====== SQL ====== | ||
| + | |||
| + | Le langage informatique [[wpfr> | ||
| + | |||
| + | Le but de cette page n'est pas d' | ||
| + | |||
| + | <note tip>Les manipulations suivantes sont en ligne de commande. \\ | ||
| + | Pour un usage occasionnel, | ||
| + | ===== Utilisation ===== | ||
| + | |||
| + | ==== Lancer la console SQL ou le gestionnaire graphique ==== | ||
| + | |||
| + | Vous arriverez alors sur un prompt du type : | ||
| + | |||
| + | mysql> | ||
| + | ou | ||
| + | MariaDB [(none)]> | ||
| + | |||
| + | Vous pouvez alors taper vos requêtes MySQL. N' | ||
| + | |||
| + | < | ||
| + | mysql> select * from | ||
| + | -> | ||
| + | </ | ||
| + | |||
| + | Ce passage vous indique que la requête n'est pas terminée. Vous pouvez entrer vos requêtes de cette façon sur plusieurs lignes et enfin la clore avec le « **;** ». | ||
| + | |||
| + | ==== Sélectionner la base de données à utiliser ==== | ||
| + | |||
| + | Soit directement lorsque vous lancez le client MySQL en [[: | ||
| + | |||
| + | mysql -u root -D votre_base | ||
| + | |||
| + | Soit une fois connecté à MySQL en tapant la [[: | ||
| + | |||
| + | mysql> use votre_base | ||
| + | |||
| + | |||
| + | ==== Configuration en UTF-8 ==== | ||
| + | Il suffit d' | ||
| + | < | ||
| + | character-set-server=utf8 | ||
| + | skip-character-set-client-handshake | ||
| + | </ | ||
| + | |||
| + | puis de relancer le serveur mysql : | ||
| + | |||
| + | sudo service mysql restart | ||
| + | |||
| + | Vous pouvez vérifier le résultat une fois loggé dans mysql grâce à la commande suivante : | ||
| + | |||
| + | <code SQL> | ||
| + | SHOW VARIABLES LIKE ' | ||
| + | </ | ||
| + | |||
| + | Résultat : | ||
| + | |||
| + | < | ||
| + | mysqld> SHOW VARIABLES LIKE ' | ||
| + | +--------------------------+----------------------------+ | ||
| + | | Variable_name | ||
| + | +--------------------------+----------------------------+ | ||
| + | | character_set_client | ||
| + | | character_set_connection | utf8 | ||
| + | | character_set_database | ||
| + | | character_set_filesystem | binary | ||
| + | | character_set_results | ||
| + | | character_set_server | ||
| + | | character_set_system | ||
| + | | character_sets_dir | ||
| + | +--------------------------+----------------------------+ | ||
| + | 8 rows in set (0.00 sec) | ||
| + | </ | ||
| + | |||
| + | ===== Quelques requêtes SQL ===== | ||
| + | |||
| + | Toutes ces commandes sont à entrer dans le prompt de MySQL une fois connecté au serveur. (Voir comment [[# | ||
| + | |||
| + | |||
| + | ==== Base de donnée ==== | ||
| + | |||
| + | === Utiliser une base de données existante === | ||
| + | |||
| + | <code SQL> | ||
| + | use nom_de_la_base; | ||
| + | </ | ||
| + | |||
| + | === Créer une base de données === | ||
| + | |||
| + | <code SQL> | ||
| + | create database nom_de_la_base; | ||
| + | </ | ||
| + | |||
| + | === Liste des bases de données === | ||
| + | |||
| + | <code SQL> | ||
| + | show databases ; | ||
| + | </ | ||
| + | |||
| + | === Supprimer une base de données === | ||
| + | |||
| + | <code SQL> | ||
| + | drop database nom_de_la_base; | ||
| + | </ | ||
| + | |||
| + | === Importer une base de données située dans le répertoire courant (base de donnée exportée en .sql) === | ||
| + | |||
| + | <code SQL> | ||
| + | source fichier.sql; | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Tables ==== | ||
| + | |||
| + | === Liste des tables de la base de données active === | ||
| + | <code SQL> | ||
| + | SHOW tables; | ||
| + | </ | ||
| + | |||
| + | === Structure d'une table === | ||
| + | <code SQL> | ||
| + | DESCRIBE nom_table; | ||
| + | </ | ||
| + | |||
| + | === Renommer une table === | ||
| + | <code SQL> | ||
| + | ALTER TABLE nom_table RENAME AS nouveau_nom; | ||
| + | </ | ||
| + | |||
| + | === Vider une table === | ||
| + | <code SQL> | ||
| + | TRUNCATE nom_table; | ||
| + | </ | ||
| + | |||
| + | Pour la syntaxe des requêtes SQL, reportez-vous à la [[http:// | ||
| + | |||
| + | |||
| + | ==== Utilisateurs ==== | ||
| + | |||
| + | === Lister les utilisateurs === | ||
| + | < | ||
| + | |||
| + | === Créer un utilisateur === | ||
| + | |||
| + | <code SQL> | ||
| + | CREATE USER ' | ||
| + | # ou directement avec le mot de passe avec : | ||
| + | CREATE USER ' | ||
| + | </ | ||
| + | |||
| + | === Définir un mot de passe === | ||
| + | |||
| + | <code SQL> | ||
| + | set password for ' | ||
| + | </ | ||
| + | |||
| + | === Supprimer un utilisateur === | ||
| + | |||
| + | <code SQL> | ||
| + | drop user ' | ||
| + | </ | ||
| + | |||
| + | ==== Privilèges ==== | ||
| + | |||
| + | === Donner tous les droits sur une base de données à un utilisateur précis === | ||
| + | |||
| + | <code SQL> | ||
| + | grant all on nom_base.* to ' | ||
| + | </ | ||
| + | |||
| + | === Supprimer les droits sur une base de données à un utilisateur précis === | ||
| + | |||
| + | <code SQL> | ||
| + | revoke all privileges on nom_base.* from ' | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Autres opérations ===== | ||
| + | |||
| + | Qt avec Mysql: | ||
| + | |||
| + | Consulter la page [[https:// | ||
| + | |||
| + | Installer la librairie pour mysql afin de l' | ||
| + | |||
| + | < | ||
| + | |||
| + | ==== Sauvegarde et importation ==== | ||
| + | |||
| + | Pour **exporter** la base de donnée « maBase », utilisez la commande : | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Ceci fera l' | ||
| + | |||
| + | Pour exporter une table (par exemple // | ||
| + | | ||
| + | <code bash> | ||
| + | |||
| + | Ainsi nous aurons une exportation seulement de la table // | ||
| + | |||
| + | Pour **importer** une base de données ou une sauvegarde sur « maBase », utilisez la commande : | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Puis tapez votre mot de passe. | ||
| + | |||
| + | ou si le dump est compressé :\\ | ||
| + | <code bash> | ||
| + | |||
| + | |||
| + | <note tip> | ||
| + | Si vous souhaitez mettre en place une solution de sauvegarde automatique de bases de données à intervalle régulier (quotidien/ | ||
| + | </ | ||
| + | |||
| + | ==== Restauration à partir du dump du datadir ==== | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | Si vous n'avez pas pu faire un backup pour une raison quelconque (par exemple, vous récupérez un disque dur dont le système est mort), on peut sauvegarder le répertoire « / | ||
| + | |||
| + | Pour restaurer vos bases une par une, suivez la procédure ci-dessous (après avoir d' | ||
| + | |||
| + | Créer une base de données du même nom que celle que vous voulez restaurer : | ||
| + | |||
| + | echo " | ||
| + | |||
| + | Copier les fichiers du dump de la base de données (les *.FRM, *.MYD, *.MYI, *.opt), dans le dossier que MySQL a créé pour votre base de données : | ||
| + | |||
| + | cd ~/ | ||
| + | sudo cp * / | ||
| + | |||
| + | Changer les droits sur les fichiers copiés : | ||
| + | |||
| + | sudo chmod -R ug+rw / | ||
| + | sudo chown -R mysql:mysql / | ||
| + | |||
| + | Voilà, votre base doit correctement fonctionner à présent. | ||
| + | |||
| + | ==== Compacter l' | ||
| + | |||
| + | Mysql stocke ses fichiers dans le dossier / | ||
| + | |||
| + | Pistes pour comprendre et corriger ce problème : | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * Exporter toutes les bases de données, arrêter mysql, supprimer le fichier, démarrer sql et importer toutes les bases. | ||
| + | |||
| + | |||
| + | ==== Déplacer ses bases de données MySQL ==== | ||
| + | |||
| + | <note warning> | ||
| + | L' | ||
| + | Toutefois, il peut exister plusieurs fichiers '' | ||
| + | < | ||
| + | $ mysqld --verbose --help | head -n13 | tail -n2 | ||
| + | Default options are read from the following files in the given order: | ||
| + | /etc/my.cnf / | ||
| + | </ | ||
| + | Éventuellement ce fichier contient des directives **!includedir**. Il faut alors chercher dans ces répertoires le fichier qui contient **datadir**. | ||
| + | |||
| + | Dans la suite, nous allons déplacer les données dans **/ | ||
| + | |||
| + | Tout d' | ||
| + | < | ||
| + | [[: | ||
| + | < | ||
| + | datadir = /home/mysql | ||
| + | </ | ||
| + | On suppose que l' | ||
| + | On déplace les données : | ||
| + | < | ||
| + | |||
| + | Malheureusement cela ne suffit pas. | ||
| + | Le premier problème vient du fichier''/ | ||
| + | < | ||
| + | $ head / | ||
| + | sanity () { | ||
| + | if [ ! -r / | ||
| + | echo "MySQL configuration not found at / | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | if [ ! -d / | ||
| + | echo "MySQL data dir not found at / | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | if [ ! -d / | ||
| + | echo "MySQL system database not found. Please run mysql_install_db tool." | ||
| + | exit 1 | ||
| + | fi | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Il faut donc créer le répertoire **/ | ||
| + | < | ||
| + | $ sudo chown -R mysql:mysql / | ||
| + | $ sudo chmod -R 700 / | ||
| + | |||
| + | Il faut maintenant configurer [[: | ||
| + | < | ||
| + | $ tail / | ||
| + | # Site-specific additions and overrides. See local/ | ||
| + | #include < | ||
| + | </ | ||
| + | [[: | ||
| + | < | ||
| + | # Allow data dir access | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | Rechargez : | ||
| + | < | ||
| + | Redémarrez le service : | ||
| + | < | ||
| + | Vérifiez le changement : | ||
| + | < | ||
| + | $ mysql -u root -p -e ' | ||
| + | Enter password: | ||
| + | +--------------+ | ||
| + | | @@datadir | ||
| + | +--------------+ | ||
| + | | / | ||
| + | +--------------+ | ||
| + | </ | ||
| + | |||
| + | ==== Transférer une base de données entre deux serveurs via SSH ==== | ||
| + | |||
| + | === Préambule === | ||
| + | |||
| + | Dans le cadre d'une infra sans serveur spécifique de base de données, et que l'on souhaite partager une base commune. | ||
| + | |||
| + | === Mise en place === | ||
| + | |||
| + | Dans un premier temps il faut remplir deux conditions : | ||
| + | * que l' | ||
| + | * que l' | ||
| + | |||
| + | Pour une reconnaissance utilisateur d'un serveur à un autre : [[ssh# | ||
| + | |||
| + | Pour que MySql reconnaisse l' | ||
| + | |||
| + | < | ||
| + | [mysql] | ||
| + | user=nom_utilisateur | ||
| + | password=mot_de_passe_utilisateur | ||
| + | |||
| + | [mysqldump] | ||
| + | user=nom_utilisateur | ||
| + | password=mot_de_passe_utilisateur | ||
| + | </ | ||
| + | Protéger le : | ||
| + | |||
| + | chmod 600 ~/.my.cnf | ||
| + | | ||
| + | Transférer depuis le serveur **A** vers le **B** : | ||
| + | |||
| + | mysqldump nom_bdd_serveur_A | ssh utilisateur_serveur_B@ip_serveur_B mysql nom_bbd_serveur_B | ||
| + | | ||
| + | Exemple de commande en tache [[cron|CRON]] : | ||
| + | |||
| + | 10 0 * * * mysqldump nom_bdd_serveur_A | ssh utilisateur_serveur_B@ip_serveur_B mysql nom_bbd_serveur_B >/ | ||
| + | ===== Administrer MySQL via une une interface Web ===== | ||
| + | |||
| + | Il est possible d’administrer un serveur MySQL via une interface Web avec [[: | ||
| + | |||
| + | ===== Liens ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * La page dédiée aux [[: | ||
| + | * [[: | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * La page des [[:SGBD]]. | ||
| + | * [[: | ||
| + | * [[.:? | ||
| + | |||
| + | ---- | ||
| + | |||
| + | // | ||
