Catégorie : MySQL

[Bash] Script pour dumper des bases MySQL

#!/bin/bash
#
# MySQL_DB_Dump
#
# Auteur      : Johan
# Contact     : johan@slashroot.fr
# Date        : 13/07/2011
# Version     : 1.0
# Description : Dump une base donnee MySQL
# Commentaire : Le fichier de dump peut etre envoye par email
# Requis      : Besoin de mutt si l'option -m est selectionnee
#

#
# Usage
#
usage(){
    echo ""
    echo "Utilisation : mysql_db_dump -s server_name -u mysql_user -p file/password -b database1,database2... -d save_folder [-m adresse@domain.com]"
    echo ""
    echo "OPTIONS :"
    echo "   -h     Affiche l'aide"
    echo "   -u     Utilisateur MySQL a utilise pour le dump"
    echo "   -s     Serveur contenant la base de données"
    echo "   -p     Type d'authentification a utiliser (prompt du password ou fichier ~/.my.cnf)"
    echo "   -b     Specifie la ou les bases a dumper"
    echo "   -d     Dossier a utiliser pour stocker les dumps"
    echo "   -m     Envoi le fichier de dump par email"
    echo ""
    echo "EXEMPLE :"
    echo "   - Dump des bases db1 et db2 avec une authentification par fichier et l'envoi des fichiers par email"
    echo "          mysql_db_dump -s localhost -u bob  -p file -b db1,db2 -m dba@slashroot.fr"
    echo ""
}
 (suite…)

[Bash] Récupérer la taille des bases MySQL

#!/bin/bash
#
# MySQL_DB_Sizes
#
# Auteur      : Johan 
# Contact     : johan@slashroot.fr
# Date        : 13/07/2011
# Version     : 1.0
# Description : Recupère la taille de chaque base de données et envoi les résultats par email
# Commentaire : L'utilisateur doit avoir acces en lecture a toutes les bases dont on souhaite connaitre la taille

# Reminder for a MySQL read only user
# CREATE USER 'ro-user'@'localhost' IDENTIFIED BY 'MySQL_Ro_User_Password';
# GRANT SELECT ON database1.* TO 'ro-user'@'localhost';
# GRANT SELECT ON database2.* TO 'ro-user'@'localhost';
# ...

#
# Usage
#
usage(){
    echo ""
    echo "Utilisation : mysql_db_sizes -s server_name -u mysql_user -p file/password [-b database1,database2...] [-m adresse@domain.com]"
    echo ""
    echo "OPTIONS :"
    echo "   -h     Affiche l'aide"
    echo "   -u     Utilisateur MySQL a utilise pour la requete SQL"
    echo "   -s     Serveur contenant la base de données"
    echo "   -p     Type d'authentification a utiliser (prompt du password ou fichier ~/.my.cnf)"
    echo "   -b     Specifie les bases a afficher (par defaut toutes celles accessibles"
    echo "   -m     Envoi le resultat par email au lieu de l'afficher dans le terminal"
    echo ""
    echo "EXEMPLES :"
    echo "   1 - Affichage de la taille de toutes les bases avec une authentification par mot de passe"
    echo "          mysql_db_sizes -s localhost-u bob  -p password"
    echo "   2 - Envoi de la taille des bases db1 et db2 par email avec une authentification par fichier"
    echo "          mysql_db_sizes -s localhost -u bob -p file -b db1,db2 -m bob@admin.fr"
    echo ""
}
 (suite…)

[Perl] Connexion et requête MySQL

Marche à suivre pour se connecter à une base MySQL, y effectuer une requête de type SELECT et récupérer le(s) résultat(s).

use DBI();

$database="nom_base";
$hostname="hostname";
$login = "login";
$mdp = "password";
$dsn = "DBI:mysql:database=$database;host=$hostname";
$dbh = DBI->connect($dsn, $login, $mdp) or die "Echec connexion";

$requete = "REQUETE SQL";

$sth = $dbh->prepare($requete);
$sth->execute();

while(my @row = $sth->fetchrow_array)
{
		$var1=$row['0'];
		$var2=$row['1'];
}

$sth -> finish;
$dbh -> disconnect;

[MySQL] Activer les logs

Ajouter au fichier de conf de MySQL (/etc/mysql/my.cnf sur Debian) :

log=/var/log/mysql/mysql.log

Puis après un petit redemarrage de MySQL le fichier contiendra toutes les opérations effectuées sur la base (cela peut s’avérer pratique pour récupérer des requêtes SQL créées par des interfaces web ou autres formulaires par exemple)

[MySQL] Taille des bases

Taille de toutes les bases en Mo:

SELECT table_schema As "Base", round(sum(data_length+index_length)/1024/1024,4) AS "Taille (Mo)"
FROM information_schema.tables
GROUP BY table_schema;

Taille de chaque table d’une base :

SELECT table_name AS "Tables", round(((data_length + index_length) / 1024 / 1024), 2) AS "Taille (Mo)"
FROM information_schema.tables
WHERE table_schema =  'base';