MySQL

Table of contents

  1. MySQL
    1. Pense-bête
      1. Changer le mot de passe de l'administrateur
      2. Attribuer des droits à un utilisateur
      3. Relancer une réplication en sautant une (ou plusieurs) requête(s) bloquante(s)
    2. Astuces
      1. Un logger de requêtes SQL du pauvre
      2. Calculer la taille des bases de données d'une instance
      3. Calculer la taille des tables d'une base de données
      4. Récupérer les résultats d'une requête proprement depuis un shell

Pense-bête

Changer le mot de passe de l'administrateur

$ mysqladmin -u root -p<le mot de passe actuel> password '<le nouveau mot de passe>'
Il faut que le service MySQL soit lancé.

Attribuer des droits à un utilisateur

mysql> GRANT <liste de droits> ON <base>.<table> TO <utilisateur> [IDENTIFIED BY '<mot de passe>'];

Relancer une réplication en sautant une (ou plusieurs) requête(s) bloquante(s)

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Remplacer 1 par un nombre N sautera les N prochaines requêtes SQL du master

Astuces

Un logger de requêtes SQL du pauvre

# tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
  if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) {
    if (defined $q) { print "$q\n"; }
    $q=$_;
  } else {
    $_ =~ s/^[ \t]+//; $q.=" $_";
  }
}'

Calculer la taille des bases de données d'une instance

mysql> SELECT table_schema "Database", sum( data_length + index_length) / 1024 / 1024  "Size in MB" FROM information_schema.TABLES GROUP BY table_schema;
Il est possible de restreindre le calcul à une base spécifique en ajoutant la clause WHERE table_schema = "ma_base" avant la clause GROUP BY.

Calculer la taille des tables d'une base de données

mysql> SELECT table_name AS "Tables", round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB" FROM information_schema. TABLES WHERE table_schema = "ma_base";
Il est possible de restreindre le calcul à une table spécifique en ajoutant la clause AND table_name = "ma_table" à la fin de la requête.

Récupérer les résultats d'une requête proprement depuis un shell

Les options suivantes vous permettent de récupérer les lignes de résultats d'une requête SQL en vue de les réutiliser dans un script ou de les piper à un autre programme :

$ mysql une_base -N -r -s -e 'SELECT * FROM une_table...'