MySQL Workbench : lenteur de la première requête

Depuis quelques jours, j’étais confronté à un problème de lenteur de MySQL Workbench lors de l’exécution de la première requête après l’ouverture du logiciel. Comme on dit : ça ramait ! Une fois cette première requête exécutée, le logiciel fonctionnait à nouveau « parfaitement ».

Bref, ça me « gavait » profondément de devoir attendre de nombreuses secondes que cette première requête s’exécute. Après quelques recherches, j’ai enfin réussi à résoudre ce petit problème et la solution est, pour le moins, d’une simplicité enfantine.

Pour résumer, MySQL Workbench construit un historique au fur et à mesure de votre utilisation. Ainsi, toutes les requêtes saisies sont enregistrées dans un fichier. Lorsqu’on lance une première requête après démarrage du logiciel, ce dernier parcours le fichier contenant l’historique. D’où la lenteur.

Vous l’aurez compris en lisant ces quelques lignes, il suffit donc de supprimer l’historique pour retrouver un fonctionnement « normal » de l’outil dès la première requête. Pour ce faire, rien de plus simple :

  • ouvrez MySQL Workbench
  • connectez vous à une base de données
  • dans le panneau du bas « Output », sélectionnez « History Output »
MySQL Workbench afficher historique

MySQL Workbench afficher historique

  • faites un clic droit dans les panneaux des dates et cliquez sur « Delete All Logs »
MySQL Workbench suppression de l'historique

MySQL Workbench suppression de l’historique

 

Et le tour est joué. ^^ Plus de lenteur sur la première requête au démarrage.

 

Source : https://stackoverflow.com/questions/1786870/mysql-slow-on-first-query-then-fast-for-related-queries/49306659#49306659

Ma logithèque pour développer en PHP sous Windows

Suite à la lecture du billet de Nicolas Hachet intitulé « Quels outils pour développer en PHP sous Windows ?« , j’ai eu envie de faire, moi aussi, le tour de mon environnement de développement.

Illustration code source

Stack

WampServer

Je vous l’accorde, rien de bien original. À mes débuts, j’installais Apache, MySQL et PHP l’un après l’autre mais je trouvais ça fastidieux. Surtout qu’à cette époque (début des années 2000), il m’arrivait bien souvent de réinstaller Windows. Par la suite, j’ai découvert EasyPhp que j’ai utilisé pendant un certain temps. Je ne me souviens plus de la raison qui m’a poussé à tester WampServer à l’époque mais en tout cas, je ne suis jamais revenu en arrière. Apache, MySQL et PHP installés et prêts à l’emploi en moins de 10 minutes, que demander de plus ? Simple et efficace.

 

Lire la suite…

Windows Server 2012 : mise à jour d’Apache, Php et des drivers SQL Server

Depuis peu, je découvre les joies (ironie inside) de la maintenance des outils Apache, Php et MySQL sur Windows Server 2012. Si sur Linux il suffit d’une petite ligne de commande pour maintenir ces services à jour, sur Windows, ce n’est pas la même histoire. Comme vous le constaterez par vous-même, ce n’est pas bien compliqué. Ce billet est donc plus un pense-bête qu’un How-To à proprement parler.

 

Windows Server 2012 logo

 

Attention, avant toute opération de mise à jour, il convient de jeter un petit coup d’œil aux ChangeLogs des différents outils pour vérifier que leurs mises à niveau ne vont pas « casser » vos sites web.

 

Lire la suite…

SQL Server : Générer un hash MD5 en Transact-SQL identique au hash MD5 MySQL

Comme indiqué dans mon billet précédent, je travaille actuellement sur une migration de base de données de MySQL vers SQL Server. Ce billet est un mémo personnel (donc, un peu rédigé à la va-vite) mais qui sait… il pourrait vous être utile. ^^

SQL Server et MySQL ne retournent pas le même résultat lors d’un hash MD5 :

Différence entre hash MD5 SQL Server et MySQL
SQL Server MySQL
 HASHBYTES('MD5', 'Test')   MD5('Test') 
 0x0CBC6611F5540BD0809A388DC95A615B   0cbc6611f5540bd0809a388dc95a615b 

 

Comme vous pouvez le constater, les résultats ne sont pas tout à fait identiques. Si vous souhaitez obtenir un hash MD5 en Transact-SQL rigoureusement identique à un hash MySQL, la commande à saisir est :

CONVERT(NVARCHAR(32),HASHBYTES('MD5', cast('Test' as varchar)),2)

 

Pour les versions antérieures à SQL Server 2008, la fonction CONVERT() est inopérante. Préférez :

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',cast('Test' as varchar))),3,32)

 

Et le tour est joué ^^

PS : j’avoue ne pas avoir le temps de détailler la commande. Si vous souhaitez de plus amples explications, n’hésitez pas à me contacter. 🙂

Ma logithèque : les indispensables

Comme énoncé dans un de mes précédents billets, j’ai procédé il y a peu à la réinstallation de Windows sur mon Yoga. Je vous propose aujourd’hui un petit tour d’horizon des logiciels composants ma logithèque de base.

Le premier logiciel que j’installe est bien entendu LE navigateur : Firefox !

Ensuite, je passe à l’installation des divers outils composants mon environnement de développement.

Type Sous Windows Sous GNU/Linux
Environnement de développement
  Serveur local Apache (MySQL Php) WampServer LAMP
  Emulateur de Terminal Cmder Yakuake (si KDE)
  Git MySysGit git
  Git dans explorateur de fichiers TortoiseGit RabbitVCS
  Dépendances PHP composer
  IDE Netbeans
  Outil MySQL MySQL Workbench
  Client FTP Filezilla
  BDD sécurisée de mots de passe Keepass

 

Développer, c’est bien, mais il me faut également divers logiciels nécessaires aux travaux « bureautiques ».

Type Sous Windows Sous GNU/Linux
Bureautique
  Suite bureautique Microsoft Office LibreOffice
  Prise de notes OneNote
  Finances personnelles BankPerfect
  Gestion des archives 7zip
  Captures d’écran GreenShot Shutter
  Traitement d’images Gimp (+ Paint.net sous Windows)
  Lecteur audio (travail en musique ^^) Clementine

 

Tous ces outils me sont indispensables que ce soit d’un point de vue professionnel ou personnel. Bien entendu, il s’agit là d’une base. Ma logithèque s’étoffe ensuite au fur et à mesure de mes besoins mais globalement, ce sont là les logiciels que j’utilise le plus au quotidien.

MySQL : Autoriser/Forcer id=0 pour les PRIMARY KEY avec AUTO_INCREMENT

Dans le cadre de la migration des données d’une structure de base à une autre, j’ai été confronté à un petit problème. En effet, dans l’ancienne version de la BDD, certaines tables de paramètres ont un id démarrant à 0 au lieu de 1.

Exemple :

Table « civilite »
Id Valeur
0 Non communiqué
1 Féminin
2 Masculin

 

Or, lorsque je lance la requête :

INSERT INTO `civilite_new` (`civilite_new_id`, `civilite_new_label`) SELECT `civilite_id`, `civilite_label` FROM `civilite`;

 

MySQL me retourne l’erreur suivante :

Error Code: 1062. Duplicate entry '1' for key 'PRIMARY'

 

L’AUTO_INCREMENT prend la première ligne (Id = 0) et force l’Id à 1. Du coup, lors du traitement de la deuxième ligne, MySQL bloque car la valeur de l’Id de cette dernière est également 1. Partant de ce constat, deux solutions sont possibles :

  • ré-incrémenter toutes les tables en décalant les id (on aurait donc 1, 2, 3 à la place de 0, 1, 2) – Attention aux intégrités référentielles
  • forcer la valeur 0 du premier Id – pas très « propre » mais efficace

Dans mon cas, la première solution ne me convient pas car le code de l’application qui alimente cette base de données repose sur le principe de Id = 0 pour « Non communiqué ».

Donc, pour forcer la mise à 0 des premiers Id, il va donc falloir user du mode SQL NO_AUTO_VALUE_ON_ZERO :

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';

 

Ajoutez la ligne ci-dessus avant votre INSERT ou UPDATE.

Une fois vos requêtes exécutées, n’oubliez pas de désactiver le mode « NO_AUTO_VALUE_ON_ZERO » :

SET SQL_MODE=@OLD_SQL_MODE;

 

Et le tour est joué ! ^^

MySQL : Désactiver temporairement les contraintes référentielles

Actuellement, je travaille sur un script PHP de migration de données d’une structure de base de données à une autre. L’ancienne structure était composée de table au format MyISAM sans contraintes référentielles (vu que ce format ne gère pas la déclaration de FOREIGN KEY). La nouvelle structure, quant à elle, est composée de table au format InnoDB où les intégrités référentielles sont déclarées.

Le problème avec ces contraintes référentielles, c’est que mon script de migration bloque dès qu’une de ces contraintes n’est pas respectée. Je vous l’accorde, ce n’est pas un problème en soi puisque c’est justement le but lorsqu’on déclare les intégrités référentielles : vérifier la cohérence du contenu de la base de données.

Une fois que le script m’a renvoyé l’erreur, je le corrige et il me faut alors vider la table impactée afin de le relancer et vérifier que le problème est bien résolu. Si je tente un TRUNCATE ou un DELETE FROM sur ma table, MySQL me renvoie alors l’erreur suivante :

Error Code: 1701 Cannot truncate a table referenced in a foreign key constraint (...)

 

Bien. MySQL vérifie donc correctement les contraintes. Cependant, il faut bien que je vide ma table pour relancer mon script. Pour pallier à ce problème, il suffit donc de suspendre le contrôle des contraintes temporairement (le temps de la requête en fait) :

SET FOREIGN_KEY_CHECKS=0;

DELETE FROM bdd.table; -- ou autre(s) requête(s)

SET FOREIGN_KEY_CHECKS=1;

 

Et le tour est joué ! ^^

Wamp : Configurer le stockage de configuration de phpMyAdmin

Note du 27/11/2014 : J’ai apporté quelques corrections à ce billet car dans la première version, je créais l’utilisateur pma avec des droits sur toutes les bases de données. Or, d’un point de vue « sécurité », il vaut mieux que l’utilisateur pma n’est de droits que sur la table phpmyadmin.

Au quotidien, j’utilise MySQL Workbench pour l’administration de mes bases MySQL. Cependant, il est toujours utile d’avoir phpMyAdmin sous la main pour certaines opérations.

Si comme moi vous avez installé WampServer, vous avez surement remarqué ce message indiquant que vos préférences ne peuvent être enregistrées tant que vous n’avez pas configuré le « stockage de configurations phpMyAdmin ».

 

Lire la suite…

Modifier le mot de passe root de MySQL dans Wamp

Si vous installer ou réinstaller Wamp (Apache – MySQL – PHP), vous avez sans doute constaté que, par défaut, l’utilisateur « root » de PhpMyAdmin (et donc de MySQL) n’a pas de mot de passe défini.

Pour y remédier, connectez-vous à PhpMyAdmin et modifiez le mot de passe :

  • cliquez sur la rubrique « Utilisateurs » du menu supérieur
  • cliquez sur « Changer les privilèges » de l’utilisateur « root », client « localhost »
  • modifiez le mot de passe dans la rubrique « Modifier le mot de passe » puis cliquez sur le bouton « Exécuter »

 

PhpMyAdmin va alors vous afficher un message d’erreur de connexion. Pour pouvoir vous reconnecter, il vous faut alors modifier le fichier C:/wamp/apps/phpmyadminX.X.X/config.inc.php.

Ajouter le nouveau mot de passe « root » à cette ligne :

[PHP linenumbers='false']
$cfg['Servers'][$i]['password'] = 'votremotdepasse';[/PHP]

 

Pour finir, redémarrez les services.

 

Source : http://www.it-connect.fr/modifier-le-mot-de-passe-root-de-wamp%EF%BB%BF/