2010-08-10 8 views
-1

J'utilise un script Perl pour vider le contenu d'une base de données MySQL. Le module Perl que j'utilise est DBI de CPAN. Est-il possible de dire si l'état de la base de données a changé depuis la dernière sauvegarde afin que je n'aie pas besoin de rejeter le db?Déterminer l'état de MySQL avec le module DBI de Perl

+0

Est-ce que MySQL offre une telle fonctionnalité? –

Répondre

1

Si toutes vos tables utilisent le moteur InnoDB, je suppose que vous pouvez vérifier innodb_buffer_pool_write_requests:

SHOW STATUS LIKE 'innodb_buffer_pool_write_requests'; 

S'il y a eu une écriture à une table InnoDB depuis la dernière fois que vous vérifié, cette valeur aura augmenté.

Il peut y avoir des faux positifs. Une vérification rapide montre que cette valeur augmente pendant et après:

START TRANSACTION; INSERT INTO [...]; ROLLBACK; 

Mais je crois que si les écritures ont eu lieu, cette valeur doit changer. Vérifiez-le avant le début de la sauvegarde précédente et après que la sauvegarde en cours se termine et si sa valeur reste la même et toutes vos tables sont InnoDB, les dumps doivent être identiques.

Cela dit ...

Si vous devez vider toute une base de données MySQL et vous êtes à toutes les parties concernées au sujet de la cohérence, vous voudrez certainement générer cette décharge avec mysqldump:

mysqldump databasename 

ou , si SHOW TABLE STATUS montre que toutes vos tables utilisent le moteur InnoDB,

mysqldump --single-transaction databasename 

qui a le même effet mais Proba Verrouillez vos tables pendant une période beaucoup plus courte.

Essayer d'écrire son propre script pour obtenir une sauvegarde cohérente est presque certainement une mauvaise idée pour beaucoup de raisons. (Il sera difficile de savoir quand vous avez réussi, cela signifie que les bugs sont probables, les bugs avec la cohérence peuvent avoir des effets subtilement destructeurs qui sont les pires, votre script sera plus lent et utilisera probablement plus de RAM.)

By Par défaut, mysqldump émet sa sortie en SQL standard. Si vous souhaitez manipuler les données vous-même, vous pouvez obtenir une sortie délimitée par des tabulations en ajoutant --tab=filename.

0

Si la journalisation binaire est activée sur votre serveur, vous devriez pouvoir comparer la sortie de SHOW BINARY LOGS à une exécution précédente pour voir si quelque chose a changé.

+0

Que représente "SHOW BINARY LOGS"? – syker

+0

@syker: Combien de données ont été écrites dans quels fichiers journaux; Si ce n'est pas le cas, votre base de données devrait rester inchangée. – ysth

0

Ou, faites-le vous-même. Créer une "table de journal" dans votre base de données et insérez le nom de la table et un horodatage à chaque fois que vous faites le vidage de données. Devrait être quelques lignes de code DBI je pense.

HTH

Questions connexes