Mysql

De Linuxmemo.

(Différences entre les versions)
(Obtenir des informations sur l'encodage)
(default)
 
(9 versions intermédiaires masquées)
Ligne 1 : Ligne 1 :
[[Catégorie:Logiciel]]
[[Catégorie:Logiciel]]
-
 
+
Voir [[Mytop]]
== Les commandes Client du démon "sqld" ==
== Les commandes Client du démon "sqld" ==
Ligne 21 : Ligne 21 :
* display database, table, and column information
* display database, table, and column information
  mysqlshow
  mysqlshow
 +
 +
=== default ===
 +
 +
create database mabase;
 +
GRANT ALL PRIVILEGES ON mabase.* TO 'user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
 +
FLUSH PRIVILEGES;
 +
-----
 +
create database mabase;
 +
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
 +
GRANT ALL ON mabase.* TO 'jeffrey'@'localhost';
 +
FLUSH PRIVILEGES;
== Encodage ==
== Encodage ==
Ligne 56 : Ligne 67 :
* pour une base de données:
* pour une base de données:
  CREATE DATABASE base_de_donnees [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement
  CREATE DATABASE base_de_donnees [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement
 +
ou bien
  ALTER DATABASE base_de_donnees CHARACTER SET jeu_de_caracteres COLLATE interclassement
  ALTER DATABASE base_de_donnees CHARACTER SET jeu_de_caracteres COLLATE interclassement
* pour une table :
* pour une table :
  CREATE TABLE table [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement
  CREATE TABLE table [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement
 +
ou bien
  ALTER TABLE table CHARACTER SET jeu_de_caracteres COLLATE interclassement
  ALTER TABLE table CHARACTER SET jeu_de_caracteres COLLATE interclassement
Ligne 68 : Ligne 81 :
  )
  )
  [...]
  [...]
-
 
+
ou bien
  ALTER TABLE table CHANGE colonne colonne type CHARACTER SET jeu_de_caracteres COLLATE interclassement
  ALTER TABLE table CHANGE colonne colonne type CHARACTER SET jeu_de_caracteres COLLATE interclassement
Ligne 94 : Ligne 107 :
  ou en une seul fois
  ou en une seul fois
  SET NAMES jeu_de_caracteres
  SET NAMES jeu_de_caracteres
 +
 +
==Recettes==
 +
*changer le mot de passe root
 +
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
 +
 +
*un grep sur SHOW TABLES;
 +
SHOW TABLES LIKE '%quelquechose%';
 +
 +
*Boucle LOOP
 +
 +
DELIMITER $$ 
 +
CREATE PROCEDURE ABC()
 +
  BEGIN
 +
      DECLARE a INT Default 0 ;
 +
      simple_loop: LOOP
 +
        SET a=a+1;
 +
        select a;
 +
        IF a=5 THEN
 +
            LEAVE simple_loop;
 +
        END IF;
 +
  END LOOP simple_loop;
 +
END $$
 +
 +
*connaître la taille des bases
 +
SELECT table_schema, round(sum(data_length+index_length)/1024/1024,4) AS "Size (MB)"
 +
FROM information_schema.tables
 +
GROUP BY table_schema;
 +
 +
*connaître la taille des tables d'une base
 +
SELECT table_name AS "Tables", round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
 +
FROM information_schema.TABLES WHERE table_schema = "$DB_NAME";
 +
 +
==Requêtes en temps réel==
 +
mysql> SHOW VARIABLES LIKE "general_log%";
 +
mysql> SET GLOBAL general_log = 'ON';

Version actuelle en date du 16 avril 2024 à 12:39

Voir Mytop

Sommaire

[modifier] Les commandes Client du démon "sqld"

  • Connexion au shell
mysql -uuser -p
  • Utile dans le shell:
ego       (\G) Send command to mysql server, display result vertically.
clear     (\c) Clear the current input statement.
help contents
help commande_sql
  • Verification des droits:
mysqlacces user base -U root -P
  • Dump des bases et/ou tables:
mysqldump [options] db_name [tables]
  • display database, table, and column information
mysqlshow

[modifier] default

create database mabase;
GRANT ALL PRIVILEGES ON mabase.* TO 'user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-----
create database mabase;
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON mabase.* TO 'jeffrey'@'localhost';
FLUSH PRIVILEGES;

[modifier] Encodage

[modifier] Obtenir des informations sur l'encodage

SHOW VARIABLES LIKE 'char%';

Pour afficher la liste de tous les jeux de caractères supportés par votre serveur MySQL:

SHOW CHARACTER SET

Pour afficher la liste des interclassements:

SHOW COLLATION

Toutes les collations ont un nom qui commence par le jeu de caractère auquel elles sont liées, et se terminent par l'une de ces trois abréviations :

  • _bin comme binary : les caractères sont dans l'ordre de leurs numéros de code (ce qui donne d'abord toutes les majuscules, puis toutes les minuscules, puis les lettres accentuées, en vrac).
  • _cs comme case sensitive : les caractères sont triés selon le ou les langages de référence, mais de manière sensible à la casse.
  • _ci comme case insensitive : idem, mais en ignorant la casse.

[modifier] Changer l'encodage par défaut d'un serveur MySQL

Modifier le fichier de configuration /etc/my.cnf en ajoutant des paramètres similaires à ceux donnés ici (utilisation de utf8 dans l'exemple).

[mysqld]
#Set the default character set
default-character-set=utf8
#Set the default collation
default-collation=utf8_general_ci

Il faudra ensuite redémarrer le serveur

# /etc/init.d/mysqld restart
mysql> SHOW VARIABLES LIKE 'character_set_system';
character_set_system utf8

[modifier] Changer l'encodage pour une base de données, pour une table, et pour une colonne d'une table

  • pour une base de données:
CREATE DATABASE base_de_donnees [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement
ou bien
ALTER DATABASE base_de_donnees CHARACTER SET jeu_de_caracteres COLLATE interclassement
  • pour une table :
CREATE TABLE table [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement
ou bien
ALTER TABLE table CHARACTER SET jeu_de_caracteres COLLATE interclassement
  • pour une colonne :
CREATE TABLE table (
colonne [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement
[...]
)
[...]
ou bien
ALTER TABLE table CHANGE colonne colonne type CHARACTER SET jeu_de_caracteres COLLATE interclassement
  • convertir toutes les colonnes de la table à un jeu de caractères précis:
ALTER TABLE table CONVERT TO CHARACTER SET jeu_de_caracteres COLLATE interclassement

[modifier] Comment rétablir la cohérence de mes données

  • La documentation MySQL indique une astuce pour rétablir la situation : convertir la colonne en type binaire (BLOB, par exemple), puis la reconvertir en type texte en pécifiant le jeu de caractères voulu :
ALTER TABLE table CHANGE colonne colonne type_binaire;
ALTER TABLE table CHANGE colonne colonne type_texte CHARACTER SET jeu_de_caracteres;

[modifier] Jeux de caractères et interclassements de connexion

Quatre variables MySQL :

  • character_set_client indique au serveur l'encodage que le client utilise, c'est-à-dire dans quel jeu de caractères sont transmises les données du client vers le serveur.
  • character_set_connection indique dans quel jeu de caractères le serveur va convertir les données avant de les traiter. Sauf rares exceptions, on indiquera la même valeur que pour character_set_client, afin d'éviter les conversions intermédiaires qui ne servent pas à grand-chose dans la plupart des cas.
  • collation_connection indique quel interclassement sera utilisé dans la comparaison de chaînes littérales, c'est-à-dire par exemple "machin" = "chose". Cette variable n'a aucun effet sur les comparaisons impliquant des colonnes, car celles-ci ont leur propre interclassement.
  • character_set_results indique au serveur dans quel jeu de caractères celui-ci doit transmettre les résultats. Généralement, on indiquera le même encodage que pour character_set_client.
SET variable = valeur
SET character_set_client = jeu_de_caracteres;
SET character_set_results = jeu_de_caracteres;
SET character_set_connection = jeu_de_caracteres;
ou en une seul fois
SET NAMES jeu_de_caracteres

[modifier] Recettes

  • changer le mot de passe root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  • un grep sur SHOW TABLES;
SHOW TABLES LIKE '%quelquechose%';
  • Boucle LOOP
DELIMITER $$  
CREATE PROCEDURE ABC()
  BEGIN
     DECLARE a INT Default 0 ;
     simple_loop: LOOP
        SET a=a+1;
        select a;
        IF a=5 THEN
           LEAVE simple_loop;
        END IF;
  END LOOP simple_loop;
END $$
  • connaître la taille des bases
SELECT table_schema, round(sum(data_length+index_length)/1024/1024,4) AS "Size (MB)"
FROM information_schema.tables 
GROUP BY table_schema;
  • connaître la taille des tables d'une base
SELECT table_name AS "Tables", round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB" 
FROM information_schema.TABLES WHERE table_schema = "$DB_NAME";

[modifier] Requêtes en temps réel

mysql> SHOW VARIABLES LIKE "general_log%";
mysql> SET GLOBAL general_log = 'ON';
Outils personnels