Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
utilisateurs:bcag2:sql [Le 24/10/2017, 19:30] bcag2 créée |
utilisateurs:bcag2:sql [Le 11/09/2022, 13:12] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>Xenial Trusty sgbd sql serveur réseau}} | + | {{tag>Brouillon Xenial Trusty sgbd sql serveur réseau}} |
---- | ---- | ||
Ligne 7: | Ligne 7: | ||
Le langage informatique [[wpfr>Structured_Query_Language|Structured Query Language, SQL en abrégé]] est utilisé pas les SQBD les plus courants. | Le langage informatique [[wpfr>Structured_Query_Language|Structured Query Language, SQL en abrégé]] est utilisé pas les SQBD les plus courants. | ||
- | Le but de cette page n'est pas d'être une référence en la matière car il n'y a pas de particularité sous Ubuntu et les ressources ne manquent pas sur ce langage. Il s'agit juste de mettre en commun les quelques requêtes de base en les dissociant des pages qui peuvent s'y référer, telle que mysql, mariadb, postgresql… | + | Le but de cette page n'est pas d'être une référence en la matière car il n'y a pas de particularité sous Ubuntu et les ressources ne manquent pas sur ce langage. Il s'agit juste de mettre en commun les quelques requêtes de base en les dissociant des pages qui peuvent s'y référer, telle que [[:mysql]], [[:mariadb]], [[:postgresql]]… |
+ | <note tip>Les manipulations suivantes sont en ligne de commande. \\ | ||
+ | Pour un usage occasionnel, il est bien plus confortable de recourir à une interface graphique telle que\\ [[:phpmyadmin]] (mysql et mariadb), [[:postgresql#clients_graphiques| pgadmin3 ou phppgadmin]] pour postgresql… </note> | ||
===== Utilisation ===== | ===== Utilisation ===== | ||
Ligne 16: | Ligne 18: | ||
mysql> | mysql> | ||
+ | ou | ||
+ | MariaDB [(none)]> | ||
Vous pouvez alors taper vos requêtes MySQL. N'oubliez pas le point-virgule à la fin de la requête. Si vous l'oubliez le prompt passe à la ligne. | Vous pouvez alors taper vos requêtes MySQL. N'oubliez pas le point-virgule à la fin de la requête. Si vous l'oubliez le prompt passe à la ligne. | ||
Ligne 24: | Ligne 28: | ||
</code> | </code> | ||
- | 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 clôturer avec le « **;** ». | + | 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 ==== | ==== Sélectionner la base de données à utiliser ==== | ||
Ligne 35: | Ligne 39: | ||
mysql> use votre_base | mysql> use votre_base | ||
- | |||
- | ==== Ajouter ou changer le mot de passe de root ==== | ||
- | |||
- | <note important> | ||
- | Depuis mysql 5.7 le champ PASSWORD de la description de la base de donnée a été changé en authentication_string. | ||
- | À partir de cette version, il faut donc remplacer le mot **password** dans les instructions ci-dessous par **authentication_string**. | ||
- | </note> | ||
- | |||
- | Pour changer le mot de passe de l'utilisateur root (qui n'est pas le même que l'utilisateur root du système) : | ||
- | |||
- | Si vous êtes déjà connecté dans mysql : | ||
- | |||
- | SET password FOR "root"@"localhost" = password('Nouveau_mot_de_passe'); | ||
- | |||
- | Sinon depuis un terminal : | ||
- | |||
- | sudo mysqladmin -u root password Nouveau_mot_de_passe -p Ancien_mot_de_passe | ||
- | |||
- | Vous pourrez avoir besoin de mettre votre mot de passe entre guillemet si celui ci comporte des caractères spéciaux. | ||
- | |||
- | Lorsque l'utilisateur root ne possède aucun mot de passe, utiliser cette commande : | ||
- | |||
- | sudo mysqladmin -u root password Nouveau_mot_de_passe -p "" | ||
- | | ||
- | ==== Redéfinir de force le mot de passe de root ==== | ||
- | Deux possibilités s'offrent à vous. Une méthode simple : <code>sudo service mysql reset-password</code> ou bien : <code>sudo dpkg-reconfigure mysql-server-5.7</code> | ||
- | |||
- | Une méthode plus compliquée, si vous avez perdu votre mot de passe root pour MySQL, suivez ces quelques étapes : | ||
- | * On stoppe le serveur MySQL : <code>sudo service mysql stop</code> | ||
- | * On se connecte au serveur sans tenir compte des privilèges utilisateurs : <code>sudo /usr/bin/mysqld_safe --skip-grant-tables & | ||
- | mysql -h localhost</code> | ||
- | * Nous allons utiliser la table contenant les paramètres de MySQL : <code SQL> | ||
- | use mysql | ||
- | </code> | ||
- | * On met en place le nouveau mot de passe : <code SQL> | ||
- | UPDATE mysql.user | ||
- | SET authentication_string=PASSWORD('NouveauMdP') WHERE user='root' AND host='localhost';</code><code SQL>FLUSH PRIVILEGES;</code> | ||
- | (Placez le nom de la table `user` entre quotes (AltGr + 7) et remplacez ''<votre_mot_de_passe>'' par le mot de passe de votre choix) | ||
- | * On quitte le prompt de MySQL : <code>quit</code> | ||
- | * On stoppe totalement mysqld & mysqld_safe : <code>sudo mysqladmin shutdown</code> | ||
- | * On redémarre le serveur MySQL en utilisation normale : <code>sudo service mysql start</code> | ||
- | |||
- | ==== Utiliser un autre numéro de port ==== | ||
- | |||
- | Pour activer la connexion à MySQL via le port 3306, activez l’accès distant en commentant la ligne suivante dans le fichier **/etc/mysql/mysql.conf.d/mysqld.cnf** ou [**/etc/mysql/mysql.conf.d/mysqld.cnf** avec la version 16 d'Ubuntu] (en ajoutant ''#'' au début de la ligne) : | ||
- | |||
- | skip-networking | ||
- | | ||
- | ou | ||
- | | ||
- | bind-address = 127.0.0.1 | ||
- | |||
- | Ensuite, si vous voulez changer de port, il suffit de modifier la ligne suivante du bloc [mysqld] pour y mettre le port voulu | ||
- | |||
- | port = 3306 | ||
- | | ||
- | FIXME | ||
- | |||
- | ==== Connexions entrantes ==== | ||
- | |||
- | Par défaut, MySQL n'écoute que les connexions venant de //localhost// (127.0.0.1), c'est-à-dire du système sur lequel il est installé. | ||
- | |||
- | Pour pouvoir accéder à MySQL depuis un autre ordinateur, [[:tutoriel:comment_editer_un_fichier|ajoutez la ligne suivante au fichier]] **/etc/mysql/mysql.conf.d/mysqld.cnf** dans la section « ''[mysqld]'' » : | ||
- | |||
- | <file> | ||
- | bind-address = x.x.x.x | ||
- | </file> | ||
- | |||
- | où x.x.x.x est l'adresse ip de l'interface sur laquelle MySQL doit écouter. Cela permet de n'écouter que sur une ip privée si vous avez plusieurs interfaces réseaux. | ||
- | |||
- | Pour forcer mysql à écouter sur toutes les interfaces réseau, il suffit de commenter la ligne "bind-address = 127.0.0.1" (ou écrire bind-address = 0.0.0.0) Cela peut être dangereux si votre serveur est connecté à Internet directement. | ||
- | |||
- | Redémarrez le service après avoir modifié le fichier de configuration : | ||
- | <code>sudo /etc/init.d/mysql restart</code> | ||
- | |||
- | |||
- | |||
- | Pour créer un utilisateur mysql qui est autorisé à se connecter à distance : | ||
- | |||
- | se connecter sur mysql en root : | ||
- | |||
- | <code>mysql -u root -p</code> | ||
- | |||
- | une fois connecté : | ||
- | <code>grant all privileges on *.* to 'remote_user'@'123.123.123.123' identified by 'user_password';</code> | ||
- | |||
- | le ***.*** représente l'accès à l'ensemble des bases de données, si vous voulez autoriser l'accès de l'utilisateur à une seule base de données, remplacez ***.*** par le nom de la base de données. | ||
- | |||
- | le **remote_user** est le nom de l'utilisateur qui sera créé. | ||
- | |||
- | le **123.123.123.123** représente l'ip à partir de laquelle nous pourrons nous connecter à distance. | ||
- | |||
- | Pour autoriser l'accès venant de toutes machines (limité par l'authentification), remplacer l'ip par le symbole **'%'**. | ||
- | |||
- | Pour attribuer un mot de passe à l'utilisateur, changer **user_password** par le nouveau mot de passe.. | ||
- | |||
- | Pour rendre ces privilèges effectifs : | ||
- | <code>flush privileges;</code> | ||
Ligne 159: | Ligne 65: | ||
| Variable_name | Value | | | Variable_name | Value | | ||
+--------------------------+----------------------------+ | +--------------------------+----------------------------+ | ||
- | | character_set_client | utf8 | | + | | character_set_client | utf8 | |
- | | character_set_connection | utf8 | | + | | character_set_connection | utf8 | |
- | | character_set_database | utf8 | | + | | character_set_database | utf8 | |
- | | character_set_filesystem | binary | | + | | character_set_filesystem | binary | |
- | | character_set_results | utf8 | | + | | character_set_results | utf8 | |
- | | character_set_server | utf8 | | + | | character_set_server | utf8 | |
- | | character_set_system | utf8 | | + | | character_set_system | utf8 | |
- | | character_sets_dir | /usr/share/mysqld/charsets/ | | + | | character_sets_dir | /usr/share/mysqld/charsets/ | |
+--------------------------+----------------------------+ | +--------------------------+----------------------------+ | ||
8 rows in set (0.00 sec) | 8 rows in set (0.00 sec) | ||
Ligne 212: | Ligne 118: | ||
=== Liste des tables de la base de données active === | === Liste des tables de la base de données active === | ||
- | |||
<code SQL> | <code SQL> | ||
- | show tables; | + | SHOW tables; |
</code> | </code> | ||
=== Structure d'une table === | === Structure d'une table === | ||
- | |||
<code SQL> | <code SQL> | ||
- | describe nom_table; | + | DESCRIBE nom_table; |
</code> | </code> | ||
=== Renommer une table === | === Renommer une table === | ||
+ | <code SQL> | ||
+ | ALTER TABLE nom_table RENAME AS nouveau_nom; | ||
+ | </code> | ||
+ | === Vider une table === | ||
<code SQL> | <code SQL> | ||
- | alter table nom_table rename as nouveau_nom; | + | TRUNCATE nom_table; |
</code> | </code> | ||
Ligne 233: | Ligne 141: | ||
==== Utilisateurs ==== | ==== Utilisateurs ==== | ||
+ | |||
+ | === Lister les utilisateurs === | ||
+ | <code>SELECT User FROM mysql.user;</code> | ||
=== Créer un utilisateur === | === Créer un utilisateur === | ||
<code SQL> | <code SQL> | ||
- | create user "nom_utilisateur"@"localhost"; | + | CREATE USER 'nom_utilisateur'@'localhost'; |
+ | # ou directement avec le mot de passe avec : | ||
+ | CREATE USER 'nom_utilisateur'@'localhost' IDENTIFIED BY 'mon-mot-de-passe'; | ||
</code> | </code> | ||
Ligne 243: | Ligne 156: | ||
<code SQL> | <code SQL> | ||
- | set password for "nom_utilisateur"@"localhost" = password('mot_de_passe'); | + | set password for 'nom_utilisateur'@'localhost' = password('mot_de_passe'); |
</code> | </code> | ||
Ligne 249: | Ligne 162: | ||
<code SQL> | <code SQL> | ||
- | drop user "nom_utilisateur"@"localhost"; | + | drop user 'nom_utilisateur'@'localhost'; |
</code> | </code> | ||
- | |||
- | === Lister les utilisateurs === | ||
- | |||
- | <code SQL> | ||
- | select user from mysql.user; | ||
- | </code> | ||
- | |||
==== Privilèges ==== | ==== Privilèges ==== | ||
Ligne 264: | Ligne 170: | ||
<code SQL> | <code SQL> | ||
- | grant all on nom_base.* to "nom_utilisateur"@"localhost"; | + | grant all on nom_base.* to 'nom_utilisateur'@localhost; |
</code> | </code> | ||
Ligne 270: | Ligne 176: | ||
<code SQL> | <code SQL> | ||
- | revoke all privileges on nom_base.* from "nom_utilisateur"@"localhost"; | + | revoke all privileges on nom_base.* from 'nom_utilisateur'@localhost; |
</code> | </code> | ||
Ligne 276: | Ligne 182: | ||
===== Autres opérations ===== | ===== Autres opérations ===== | ||
- | Qt4 avec Mysql: | + | Qt avec Mysql: |
+ | |||
+ | Consulter la page [[https://doc.qt.io/qt-5/sql-driver.html|drivers SQL pour Qt5]] | ||
Installer la librairie pour mysql afin de l'utiliser sous QT : | Installer la librairie pour mysql afin de l'utiliser sous QT : | ||
<code>sudo apt-get install libqt4-sql-mysql</code> | <code>sudo apt-get install libqt4-sql-mysql</code> | ||
- | |||
- | |||
==== Sauvegarde et importation ==== | ==== Sauvegarde et importation ==== | ||
Ligne 288: | Ligne 194: | ||
Pour **exporter** la base de donnée « maBase », utilisez la commande : | Pour **exporter** la base de donnée « maBase », utilisez la commande : | ||
- | mysqldump -u root -p maBase > maBase_backup.sql | + | <code bash>mysqldump -u root -p maBase > maBase_backup.sql</code> |
Ceci fera l'export dans un fichier « maBase_backup.sql ». | Ceci fera l'export dans un fichier « maBase_backup.sql ». | ||
Ligne 294: | Ligne 200: | ||
Pour exporter une table (par exemple //ma_table// )appartenant à une base des données (par exemple //maBase//) : | Pour exporter une table (par exemple //ma_table// )appartenant à une base des données (par exemple //maBase//) : | ||
| | ||
- | mysqldump -u root -p maBase ma_table > ma_table.sql | + | <code bash>mysqldump -u root -p maBase ma_table > ma_table.sql</code> |
Ainsi nous aurons une exportation seulement de la table //ma_table// sans toucher à d'autres tables de la base des données | Ainsi nous aurons une exportation seulement de la table //ma_table// sans toucher à d'autres tables de la base des données | ||
Ligne 300: | Ligne 206: | ||
Pour **importer** une base de données ou une sauvegarde sur « maBase », utilisez la commande : | Pour **importer** une base de données ou une sauvegarde sur « maBase », utilisez la commande : | ||
- | mysql -u root -p maBase < maBase_backup.sql | + | <code bash>mysql -u root -p maBase < maBase_backup.sql</code> |
+ | |||
Puis tapez votre mot de passe. | Puis tapez votre mot de passe. | ||
- | <note tip> | + | ou si le dump est compressé :\\ |
- | Si vous souhaitez mettre en place une solution de sauvegarde automatique de bases de données à intervalle régulier, rendez-vous sur le tutoriel traitant de la [[:tutoriel:sauvegarder_automatiquement_ses_bases_de_donnees|sauvegarde automatique de bases de données via cron]]. | + | <code bash>gunzip < mabase2donnees.sql.gz | mysql -u [uname] -p[pass] [dbname]</code> |
- | </note> | + | |
- | D'autres commandes telles que la suppression des tables, de la base, l'ajout des données dans la base des données, etc. peuvent être trouvées sur le [[http://dev.mysql.com/doc/refman/5.0/fr/sql-syntax.html|site de documentation de MySQL]]. | ||
+ | <note tip> | ||
+ | Si vous souhaitez mettre en place une solution de sauvegarde automatique de bases de données à intervalle régulier (quotidien/hebdomadaire/mensuel), rendez-vous sur la page [[:automysqlbackup]]. | ||
+ | </note> | ||
==== Restauration à partir du dump du datadir ==== | ==== Restauration à partir du dump du datadir ==== | ||
Ligne 339: | Ligne 246: | ||
Mysql stocke ses fichiers dans le dossier /var/lib/mysql. Il arrive avec le temps et l'utilisation que le fichier ibdata1 occupe un espace disque très important qui ne sera pas récupéré même en supprimant toutes les bases. | Mysql stocke ses fichiers dans le dossier /var/lib/mysql. Il arrive avec le temps et l'utilisation que le fichier ibdata1 occupe un espace disque très important qui ne sera pas récupéré même en supprimant toutes les bases. | ||
- | Pistes pour comprendre et corriger ce problème : | + | Pistes pour comprendre et corriger ce problème : |
* [[http://bytes.com/groups/mysql/495219-mysql-ibdata1-compact-space|Supprimer les tables InnoDB pour récupérer l'espace]] | * [[http://bytes.com/groups/mysql/495219-mysql-ibdata1-compact-space|Supprimer les tables InnoDB pour récupérer l'espace]] | ||
* [[http://bugs.mysql.com/bug.php?id=1287|"Bogue" associé]] | * [[http://bugs.mysql.com/bug.php?id=1287|"Bogue" associé]] |