Referers se cumulant sur la journée en cours
Le symptôme
La page affichant les liens entrant du jour garde les referers de la veille et les cumule.
Le symptôme est apparu après passage de Debian 5 à Debian 6.
Version de MySQL 5.1.49-3
Recherche de la cause
Le code concerné : http://core.spip.org/projects/spip/repository/entry/branches/spip-2.1/ec rire/genie/popularites.php#L73
` sql_alter("TABLE spip_referers DROP visites_veille,
CHANGE visites_jour
visites_veille INT(10) UNSIGNED NOT NULL DEFAULT '0',
ADD visites_jour INT(10)
UNSIGNED NOT NULL DEFAULT '0'"); `
Le SQL exécuté :
ALTER TABLE spip_referers DROP visites_veille, CHANGE visites_jour visites_veille INT(10) UNSIGNED NOT NULL DEFAULT '0', ADD visites_jour INT(10) UNSIGNED NOT NULL DEFAULT '0'
J’ai testé sur le serveur via PHPMyAdmin : pas d’erreur apparente :
Votre requête SQL a été exécutée avec succès ( Traitement en 0.0256 sec. )
ALTER TABLE spip_referers DROP visites_veille, CHANGE visites_jour visites_veille INT( 10 ) UNSIGNED NOT NULL DEFAULT '0', ADD visites_jour INT( 10 ) UNSIGNED NOT NULL DEFAULT '0'
Sauf que l’action n’est pas faite (table inchangée).
Je l’ai fait en 3 requêtes successives :
`ALTER TABLE spip_referers DROP visites_veille ;
ALTER TABLE spip_referers CHANGE visites_jour visites_veille INT(10) UNSIGNED NOT NULL DEFAULT '0' ;
ALTER TABLE spip_referers ADD visites_jour INT(10) UNSIGNED NOT NULL DEFAULT '0' ;`
Et là, l’action est faite.
C'est un bug de MySQL !!!!
Le bug est connu chez MySQL : http://bugs.mysql.com/bug.php?id=61493 Avec : [13 Jun 2011 5:24] Shane Bester a workaround is to use "old_alter_table=1" in my.cnf
[21 Jun 2011 19:00] Paul DuBois Noted in 5.1.59, 5.5.15, 5.6.3 changelogs.
ALTER TABLE {MODIFY|CHANGE} ... FIRST did nothing except rename columns if the old and new versions of the table had exactly the same structure with respect to column data types. As a result, the mapping of column name to column data was incorrect. The same thing happened for ALTER TABLE DROP COLUMN, ADD COLUMN statements intended to produce a new version of table with exactly the same structure as the old version.
CHANGESET - http://lists.mysql.com/commits/139515
Résolution
old_alter_table=1 dans le my.cnf
a résolu le bug