technique:mysql

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
technique:mysql [2018/04/08 22:28] – [Sauvegardes] francoisatechnique:mysql [2024/02/13 17:05] – [Restauration MySql] guillaumev
Ligne 7: Ligne 7:
 <code> <code>
 mysql ‐u nomutilisateur ‐p mysql ‐u nomutilisateur ‐p
 +
 </code> </code>
  
Ligne 13: Ligne 14:
 <code> <code>
 SHOW DATABASES; SHOW DATABASES;
 +
 </code> </code>
  
Ligne 19: Ligne 21:
 <code> <code>
 USE nomdelabdd; USE nomdelabdd;
 +
 </code> </code>
  
Ligne 25: Ligne 28:
 <code> <code>
 SHOW TABLES; SHOW TABLES;
 +
 </code> </code>
  
Ligne 31: Ligne 35:
 <code> <code>
 DESCRIBE nomdelatable; DESCRIBE nomdelatable;
 +
 </code> </code>
  
-=== Manipulation d'une base de données MySQL ===+Supprimer une table 
 + 
 +<code> 
 +DROP TABLE nomdelatable; 
 + 
 +</code> 
 + 
 +===== Manipulation d'une base de données MySQL =====
  
 Création de la base de données : Création de la base de données :
Ligne 39: Ligne 51:
 <code> <code>
 CREATE DATABASE nomdelabdd; CREATE DATABASE nomdelabdd;
 +
 </code> </code>
  
Ligne 45: Ligne 58:
 <code> <code>
 DROP DATABASE nomdelabdd; DROP DATABASE nomdelabdd;
 +
 </code> </code>
  
-=== Manipulation des tables d'une base de données MySQL ===+===== Gestion des users ===== 
 + 
 +Création d'un utilisateur 
 + 
 +<code> 
 +create USER 'nomuser'@'localhost' IDENTIFIED BY 'motdepassesecret'; 
 + 
 +</code> 
 + 
 +Attribution des privilèges complets sur une base : 
 + 
 +<code> 
 +GRANT ALL PRIVILEGES ON nombase.* TO 'nomuser'@'localhost'; 
 +flush privileges; 
 + 
 +</code> 
 + 
 +Attribution des privilèges en consultation : 
 + 
 +<code> 
 +GRANT SELECT ON nombase.* TO 'nomuser'@'localhost'; 
 +flush privileges; 
 + 
 +</code> 
 + 
 +Suppression d'un user : 
 + 
 +<code> 
 +DROP USER 'nomuser@localhost'; 
 + 
 +</code> 
 + 
 +===== Manipulation des tables d'une base de données MySQL =====
  
 Création d'une table : Création d'une table :
  
 <code> <code>
-CREATE TABLE nomdelatable ( nomcolonne1 INT , nomcolonne2 FLOAT , nomcolonne3 VARCHAR ( 50 ), nomcolonne3 CHAR ( 50 ) ); +CREATE TABLE nomdelatable ( nomcolonne1 INT , nomcolonne2 FLOAT , nomcolonne3 VARCHAR ( 50 ), nomcolonne3 CHAR ( 50 ) ); 
 </code> </code>
  
Ligne 58: Ligne 105:
  
 <code> <code>
-DROP TABLE nomdelatable ; +DROP TABLE nomdelatable ; 
 </code> </code>
  
-== Modification d'une table ==+==== Modification d'une table ====
  
 Ajouter une colonne à une table : Ajouter une colonne à une table :
  
 <code> <code>
-ALTER TABLE nomdelatable ADD nomdecolonne INT ;  +ALTER TABLE nomdelatable ADD nomdecolonne INT ; 
-ALTER TABLE nomdelatable ADD nomdecolonne1 VARCHAR ( 50 ); +ALTER TABLE nomdelatable ADD nomdecolonne1 VARCHAR ( 50 ); 
 </code> </code>
  
 <code> <code>
-ALTER TABLE nomdelatable ADD COLUMN nomdelacolonne INT ; +ALTER TABLE nomdelatable ADD COLUMN nomdelacolonne INT ; 
 </code> </code>
  
Ligne 77: Ligne 127:
  
 <code> <code>
-ALTER TABLE nomdelatable DROP COLUMN nomdecolonne1 ; +ALTER TABLE nomdelatable DROP COLUMN nomdecolonne1 ; 
 </code> </code>
  
Ligne 83: Ligne 134:
  
 <code> <code>
-ALTER TABLE nomdelatable RENAME AS lenouveaunomdelatable +ALTER TABLE nomdelatable RENAME AS lenouveaunomdelatable 
 </code> </code>
  
 <code> <code>
-ALTER TABLE nomancientable RENAME TO nomnouveautable ; +ALTER TABLE nomancientable RENAME TO nomnouveautable ; 
 </code> </code>
  
 <code> <code>
-RENAME TABLE nomancientable TO nomnouveautable ; +RENAME TABLE nomancientable TO nomnouveautable ; 
 </code> </code>
  
Ligne 97: Ligne 151:
  
 <code> <code>
-ALTER TABLE nomdelatable CHANGE nomdelacolonne nouveaunomdelacolonne INT ; +ALTER TABLE nomdelatable CHANGE nomdelacolonne nouveaunomdelacolonne INT ; 
 </code> </code>
  
Ligne 103: Ligne 158:
  
 <code> <code>
-ALTER TABLE nomdelatable ADD PRIMARY KEY ( nomcolonne ); +ALTER TABLE nomdelatable ADD PRIMARY KEY ( nomcolonne ); 
 </code> </code>
  
 <code> <code>
-ALTER TABLE nomdelatable ADD CONSTRAINT pk_nomdelacontrainte PRIMARY KEY ( nomcolonne ); +ALTER TABLE nomdelatable ADD CONSTRAINT pk_nomdelacontrainte PRIMARY KEY ( nomcolonne ); 
 </code> </code>
  
Ligne 113: Ligne 170:
  
 <code> <code>
-ALTER TABLE nomdelatable DROP PRIMARY KEY ; +ALTER TABLE nomdelatable DROP PRIMARY KEY ; 
 </code> </code>
  
Ligne 119: Ligne 177:
  
 <code> <code>
-ALTER TABLE nomdelatable ADD CONSTRAINT fk_nomdelacontrainte FOREIGN KEY ( nomcolonne ) REFERENCES tabledereference ( nomcolonne ); +ALTER TABLE nomdelatable ADD CONSTRAINT fk_nomdelacontrainte FOREIGN KEY ( nomcolonne ) REFERENCES tabledereference ( nomcolonne ); 
 </code> </code>
  
Ligne 125: Ligne 184:
  
 <code> <code>
-ALTER TABLE nomdelatable DROP CONSTRAINT fk_nomdelacontrainte ; +ALTER TABLE nomdelatable DROP CONSTRAINT fk_nomdelacontrainte ; 
 </code> </code>
  
-=== Requêtes SQL de base ===+==== Requêtes SQL de base ====
  
 Afficher / sélectionner des enregistrements d'une table SQL : Afficher / sélectionner des enregistrements d'une table SQL :
  
 <code> <code>
-SELECT nomcolonne FROM nomtable ; +SELECT nomcolonne FROM nomtable ; 
 </code> </code>
  
Ligne 139: Ligne 200:
  
 <code> <code>
-SELECT DISTINCT nomcolonne FROM nomtable ; +SELECT DISTINCT nomcolonne FROM nomtable ; 
 </code> </code>
  
Ligne 145: Ligne 207:
  
 <code> <code>
-SELECT nomcolonne FROM nomtable WHERE nomcolonne = '1' ;  +SELECT nomcolonne FROM nomtable WHERE nomcolonne = '1'
-SELECT nomcolonne FROM nomtable WHERE nomcolonne LIKE '%.com'+SELECT nomcolonne FROM nomtable WHERE nomcolonne LIKE '%.com' ; 
 </code> </code>
  
Ligne 152: Ligne 215:
  
 <code> <code>
-SELECT colonne1 , colonne2 , colonne3  FROM table1 INNER JOIN table2 ON table1 . colonne1 = table2 . colonne3 WHERE colonne1 = 'cequejecherche' +SELECT colonne1 , colonne2 , colonne3  FROM table1 INNER JOIN table2 ON table1 . colonne1 = table2 . colonne3 WHERE colonne1 = 'cequejecherche' 
 </code> </code>
  
Ligne 158: Ligne 222:
  
 <code> <code>
-UPDATE nomtable SET nomcolonne1 = 'mavaleur' , nomcolonne2 = 'mavaleur2' +UPDATE nomtable SET nomcolonne1 = 'mavaleur' , nomcolonne2 = 'mavaleur2' 
 </code> </code>
  
Ligne 164: Ligne 229:
  
 <code> <code>
-UPDATE nomtable SET nomcolonne1 = 'mavaleur' , nomcolonne2 = 'mavaleur2' WHERE nomcolonne3 = '0' +UPDATE nomtable SET nomcolonne1 = 'mavaleur' , nomcolonne2 = 'mavaleur2' WHERE nomcolonne3 = '0' 
 </code> </code>
  
Ligne 170: Ligne 236:
  
 <code> <code>
-INSERT INTO nomtable ( colonne1 , colonne2 , colonne3 ) VALUES ( valeu1 , valeur2 , valeur3 ); +INSERT INTO nomtable ( colonne1 , colonne2 , colonne3 ) VALUES ( valeu1 , valeur2 , valeur3 ); 
 </code> </code>
  
Ligne 176: Ligne 243:
  
 <code> <code>
-DELETE FROM nomtable WHERE nomcolonne = 'lavaleur' +DELETE FROM nomtable WHERE nomcolonne = 'lavaleur' 
 + 
 +</code> 
 + 
 +Trouver la valeur Maximal d'une colonne et ne garder que celle ligne : 
 + 
 +<code> 
 +SELECT MAX(macolonne) FROM YourTable 
 </code> </code>
  
Ligne 183: Ligne 258:
 Pour sauvegarder toutes les bases de données on utilise la commande suivante : Pour sauvegarder toutes les bases de données on utilise la commande suivante :
  
-<code>mysqldump --user=mon_user --password=mon_password --all-databases > fichier_destination.sql</code>+<code> 
 +mysqldump --user=mon_user --password=mon_password --all-databases> fichier_destination.sql 
 + 
 +</code>
  
 Pour sauvegarder une base de données précise : Pour sauvegarder une base de données précise :
  
-<code>mysqldump --user=mon_user --password=mon_password --databases nom_de_la_base > fichier_destination.sql</code>+<code> 
 +mysqldump --user=mon_user --password=mon_password --databases nom_de_la_base> fichier_destination.sql 
 + 
 +</code>
  
 Pour sauvegarder plusieurs bases de données : Pour sauvegarder plusieurs bases de données :
  
-<code>mysqldump --user=mon_user --password=mon_password --databases nom_de_la_base_1 nom_de_la_base_2 > fichier_destination.sql</code>+<code> 
 +mysqldump --user=mon_user --password=mon_password --databases nom_de_la_base_1 nom_de_la_base_2> fichier_destination.sql 
 + 
 +</code>
  
 Pour sauvegarder une table précise : Pour sauvegarder une table précise :
  
-<code>mysqldump --user=mon_user --password=mon_password --databases nom_de_la_base --tables nom_de_la_table > fichier_destination.sql</code>+<code> 
 +mysqldump --user=mon_user --password=mon_password --databases nom_de_la_base --tables nom_de_la_table> fichier_destination.sql 
 + 
 +</code>
  
 Pour sauvegarder plusieurs tables : Pour sauvegarder plusieurs tables :
  
-<code>mysqldump --user=mon_user --password=mon_password --databases nom_de_la_base --tables nom_de_la_table_1 nom_de_la_table_2 > fichier_destination.sql</code>+<code> 
 +mysqldump --user=mon_user --password=mon_password --databases nom_de_la_base --tables nom_de_la_table_1 nom_de_la_table_2> fichier_destination.sql
  
-Pour tous ces types de sauvegarde mysql les fichiers générés sont en .sql. Cela dit on peut mettre l’extension que l’on veut comme .txt par exemple. Ca n’a pas d’importance. +</code> 
-Les fichiers sont lisibles en clair et contiennent toutes les commandes SQL pour pouvoir faire une restauration mysql.+ 
 +Pour tous ces types de sauvegarde mysql les fichiers générés sont en .sql. Cela dit on peut mettre l’extension que l’on veut comme .txt par exemple. Ca n’a pas d’importance. Les fichiers sont lisibles en clair et contiennent toutes les commandes SQL pour pouvoir faire une restauration mysql.
  
 Cela dit les fichiers .sql sont volumineux. Pour gagner de la place, on va les compresser à la volée lors de la sauvegarde. Cela dit les fichiers .sql sont volumineux. Pour gagner de la place, on va les compresser à la volée lors de la sauvegarde.
  
 ==== Compresser la sauvegarde mysql ==== ==== Compresser la sauvegarde mysql ====
- 
  
 Pour compresser les données, nous allons utiliser gunzip après avoir invoqué mysqldump. Pour compresser les données, nous allons utiliser gunzip après avoir invoqué mysqldump.
Ligne 213: Ligne 301:
 Cela donnera des commandes du type : Cela donnera des commandes du type :
  
-<code>mysqldump <commandes> | gzip > fichier_destination.sql.gz</code>+<code> 
 +mysqldump <commandes> | gzip> fichier_destination.sql.gz 
 + 
 +</code>
  
 Exemple avec la commande de sauvegarde complète : Exemple avec la commande de sauvegarde complète :
 +<code>
  
-<code>mysqldump --user=mon_user --password=mon_password --all-databases | gzip > fichier_destination.sql.gz</code>+mysqldump --user=mon_user --password=mon_password --all-databases | gzip> fichier_destination.sql.gz 
 + 
 +</code>
  
 A noter qu’avec cette méthode, la commande de sauvegarde mysql produit un seul fichier compressé. le fichier source n’existe plus. A noter qu’avec cette méthode, la commande de sauvegarde mysql produit un seul fichier compressé. le fichier source n’existe plus.
-==== Restauration MySql ==== 
  
 +===== Restauration MySql =====
  
-Pour la restauration mysql on n’utilise plus la commande mysqldump. On utilise la commande mysql. +Pour la restauration mysql on n’utilise plus la commande mysqldump. On utilise la commande mysql. La commande mysql va aller lire un fichier puis le restaurer en fonction de son contenu et de ses instructions.
-La commande mysql va aller lire un fichier puis le restaurer en fonction de son contenu et de ses instructions.+
  
 La restauration mysql peut se faire pour toutes les bases de données ou pour un base de données précise. La restauration mysql peut se faire pour toutes les bases de données ou pour un base de données précise.
Ligne 230: Ligne 323:
 Exemple sans distinction de base de données : Exemple sans distinction de base de données :
  
-<code>mysql --user=mon_user --password=mon_password < fichier_source.sql</code>+<code> 
 +mysql --user=mon_user --password=mon_password <fichier_source.sql 
 + 
 +</code>
  
 Autre exemple pour restaurer dans une base de données précise : Autre exemple pour restaurer dans une base de données précise :
  
-<code>mysql --user=mon_user --password=mon_password nom_de_la_base < fichier_source.sql</code>+<code> 
 +mysql --user=mon_user --password=mon_password nom_de_la_base <fichier_source.sql 
 + 
 +</code> 
 +===== Restauration d'une DB dans un docker ===== 
 + 
 +Si notre base de données tourne dans un docker, il suffit d'appeler docker exec (ou docker compose exec) avec le paramètre -T pour pouvoir restaurer un dump : 
 + 
 +<code> 
 +docker compose exec -T [nom du docker dans le compose] mysql limesurvey --user=password --password=password <dump.sql 
 + 
 +docker  exec -T [nom complet du docker] mysql limesurvey --user=password --password=password <dump.sql 
 + 
 +</code> 
 + 
 + 
 +===== Backup complet SQL des bases ===== 
 + 
 +Pour toutes les bases : 
 + 
 +<code> 
 +mysqldump --user=root --password=XXX --all-databases> alldatabases-`date +%Y%m%d-%H%M`.sql 
 + 
 +</code> 
 + 
 +Script complet de backup à adapter : 
 + 
 +<code> 
 +#!/usr/bin/env bash 
 + 
 +SQL_USER="root" 
 +SQL_PASS="XXX" 
 +SQL_HOST="localhost" 
 + 
 +FILE_PREFIX="backup_db" 
 + 
 +FILE_DATE=`date +%Y-%m-%d-%H-%M-%S` 
 +TARGET_FILE_PATH="/root/Backups/" 
 +mkdir -p "$TARGET_FILE_PATH" 
 + 
 +DATABASES=$(mysql -h $SQL_HOST -u $SQL_USER --password=$SQL_PASS -e "SHOW DATABASES;" | tr -d " | " | grep -v -e Database -e _schema -e mysql) 
 + 
 +for DB_NAME in "$DATABASES"; do 
 +        mysqldump -h $SQL_HOST -u $SQL_USER --password=$SQL_PASS --single-transaction --skip-lock-tables "$DB_NAME"> "$TARGET_FILE_PATH""$FILE_PREFI$ 
 +        gzip "$TARGET_FILE_PATH""$FILE_PREFIX"."$DB_NAME"."$FILE_DATE".sql 
 +done 
 + 
 +</code> 
  
  • technique/mysql.txt
  • Dernière modification : 2024/04/02 15:07
  • de 127.0.0.1