2010-03-02 7 views
1

Un problème vraiment étrange (pour moi) se produit ces derniers temps. Dans une application qui accepte les données soumises par l'utilisateur, les événements suivants se produisent au hasard:Les lignes de table MySQL DB disparaissent

Les lignes de la table de base de données où sont stockées les données soumises par l'utilisateur sont disappearing.

S'il vous plaît noter qu'il n'y a PAS SUPPRIMER, DROP, TRUNCATE ou autre instruction SQL émise sur la table de base de données, sauf de l'instruction INSERT.

Serait-ce un bug de Mysql? A fait des recherches sur mysql.com (forums, bugs, etc) et trouvé 2 cas similaires mais sans obtenir une réponse solide (juste des suggestions).

Quelques informations pourraient vous être utiles: Storage Engine: InnoDB données utilisateur soumis assainis et vérifiées pour les tentatives d'injection SQL

Toute suggestion, information.

salutations,

+0

Vous obtiendrez probablement de meilleures réponses sur servrfault; J'ai voté pour déplacer la question là-bas. –

+0

ok merci pour l'astuce – Andreas

+0

Probablement aussi la peine de dire ce que dit 'CHECK TABLE' (voir ma réponse mise à jour). –

Répondre

1

Une table sur laquelle vous ne jamais insert (et probablement select) et ne jamais update ou delete devrait être vraiment stable. Êtes-vous absolument certain que vous protégez complètement contre les attaques ? Parce que ceux-ci pourraient (bien sûr) supprimer des lignes et si tel est le cas.

Vous n'avez pas mentionné le moteur de table que vous utilisez (il y en a plusieurs), mais cela vaut la peine d'utiliser les outils de diagnostic disponibles sur la table en question. Par exemple, sur une table MyISAM, exécutez myisamchk. Ou plus générique (cela fonctionne pour plusieurs types de tables), utilisez l'instruction CHECK TABLE.

Avez-vous eu des problèmes avec le stockage sous-jacent? Cela peut valoir la peine d'être vérifié.

+0

vous avez raison, j'ai oublié de mentionner quelques détails ... Moteur de stockage: InnoDB Données soumises par l'utilisateur désinfecté et vérifié pour les tentatives d'injection SQL – Andreas

2

est ici 3 possibilités:

  1. Les données ne sont arrivés à la base de données en premier lieu. Quelque chose est arrivé ailleurs donc les données ont disparu. Peut-être problèmes de réseau intermitten, serveur surchargé, bug de l'application.

  2. Une transaction de base de données n'a pas été validée et a été annulée. Peut-être un bogue dans votre code d'application, peut-être quelques données invalides, une exception de concurrence est survenue, etc.

  3. Un bug dans mysql.

Je regarderais 1. et 2. d'abord.

+0

fera - merci – Andreas

+0

Très, très bons points 1 et 2. Je pense qu'il y a probablement quatre ou cinq autres éléments de balle entre les numéros 2 et 3. :-) –

0

Un cas de plus pour combler ce qui précède. Il pourrait également y avoir le cas des parties d'application côté client et côté serveur. Les modifications initiées par le client peuvent être traitées côté serveur avec des logiques de code supplémentaires. Par exemple, dans notre cas, le panneau d'administration local a mis à jour une information de commande avec pay_date = NULL et php-website a traité cette table pour nettoyer les commandes en retard de cette table.Comme les logiques PHP ont été développées par un autre programmeur, il semblait étrange que la mise à jour des commandes entraîne la disparition des enregistrements après un certain temps.

La même chose se réfère aux opérations crones, en travaillant sur la base de données mysql dans un calendrier.

0

L'activation de binlog et la surveillance périodique des requêtes DELETE peuvent aider à identifier le coupable.

Questions connexes