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 24/10/2017, 21:29] – [SQL] 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]]. | ||
+ | * [[: | ||
+ | * [[.:? | ||
+ | |||
+ | ---- | ||
+ | |||
+ | // |