MySQL trucs et astuces d’admin

 

Quelques petits trucs pour MySQL en vrac.

Changer le mot de passe root quand on l'a perdu

On se retrouve des fois avec des serveurs sur lesquels on a pas les mot de passe des services. A partir du moment ou vous avez un accès root sur la machine vous pouvez faire ce que vous voulez. Notement ici changer le mot de passe root de MySQL.

ATTENTION :

  1. il faut arrêter le serveur MySQL et donc arrêter les applications qui l'utilisent
  2. si des applications utilisent le compte root de MySQL pour accéder à une base il faudra modifier les paramètres de l'application (NB : c'est le moment d'en profiter pour changer l'utilisateur et ne pas utiliser root)

Première chose, on arrête le serveur MySQL

# /etc/init.d/mysql stop

 

Ensuite on redémarre le serveur en esquivant la phase d'authentification et en désactivant le réseau

# mysqld --skip-grant-tables --skip-networking --console --socket=/tmp/maintenance.sock & 

 

On peut maintenant se connecter à MySQL en tapant simplement

# mysql --socket=/tmp/maintenance.sock
mysql> flush privileges ;

Le flush privileges indique au serveur de forcer la vérification des utilisateurs, hôtes et mots de passe le temps de la maintenance.

 

On change le mot de passe

mysql> UPDATE mysql.user SET password=PASSWORD('nouveaumotdepasse') 
WHERE user="root";
mysql> flush privileges ;

 

Tuer le processus et redémarrer proprement le serveur mysql.

 

mysqldump "File '*.MYD' not found (Errcode: 24) when using LOCK TABLES

Un joli problème qui bloque le dump de certaines bases. Je l'ai rencontré notement sur une base Dokeos.

En utilisant la commande perror (que je viens de découvrir), on peut avoir une explication rapide des codes d'erreur du système et de MySQL :

# perror 24
OS error code  24:  Too many open files

Il existe deux possibilités pour fixer ce problème, soit augmenter la variable open_files_limit de MySQL si l'erreur se produit lors du dump et lors d'opérations standards de MySQL ; soit utiliser l'option --single-transactions de mysqldump :

# mysqldump -u root -p --single-transaction database > dump_database.sql

 

ERROR 1045 (28000): Access denied for user ‘debian-sys-maint’@’localhost‘ (using password: YES)

L'utilisateur debian-sys-maint est nécessaire pour les opérations de démarrage et arrêt du serveur MySQL sous Debian. Pour corriger ce problème il faut changer le mot de passe de cet utilisateur.

Le mot de passe doit être référencé dans le fichier /etc/mysql/debian.cnf :

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = ******************
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user     = debian-sys-maint
password = *******************
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Si vous avez encore un accès avec un utilisateur root, connectez vous et faites ceci en utilisant le mot de passe du fichier :

# grant all privileges on *.* to 'debian-sys-maint'@'localhost' identified by 'passe' with grant option;

Puis redémarrer MySQL

 

Restaurer une base de données à partir du backup du répertoire /var/lib/mysql

 

Habituellement j'utilises automysqlbackup pour faire un dump sql toutes les nuits des bases des serveurs. Mais dans certains cas il peut y avoir un bug et le dump ne se fait pas.

L'objectif est donc de restaurer l'état d'une base de données à partir d'un backup du répertoire /var/lib/mysql.

Etape 1 récupérer les fichiers du backup suivant le logiciel de backup, il faut récupérer : ibdata1 ib_logfile0, ib_logfile1 et le répertoire de la base de données contenant toutes les tables.

Ensuite, il faut avoir un serveur mysql sans bases avec la même version de mysql, déployer par exemple une machine virtuelle dans virtualbox ou en cloud pour la récupération.

Arrêter mysql et synchroniser les répertoires récupérés précédement.

Redémarrer mysql et se connecter et la base est disponible, reste plus quà la dumper et vous avez votre base récupérée.

Ouf 🙂 reste plus qu'à traiter le dump et arrêter la vm provisoire.