web-dev-qa-db-fra.com

Vider / nettoyer MySql ib_logfile0 ib_logfile1

Existe-t-il un moyen de vider ib_logfile0 et ib_logfile1 sans vider les tables dans un fichier .sql, supprimer, puis réinsérer? Quelqu'un a entré quelques numéros de carte de crédit en texte brut dans le tableau des notes du client. Il est apparu dans mon analyse PCI et je les ai supprimés de la table mais ils existent toujours dans les fichiers journaux :(

6
Sam

Il y a deux façons

  1. Arrêtez MySQL gracieusement. Vérifiez le journal des erreurs et assurez-vous qu'il s'agissait d'un arrêt normal.

    Déplacez ib_logfile0 et ib_logfile1 hors du datadir (enregistrez-les juste au cas où vous auriez besoin de revenir en arrière)

Démarrez MySQL. InnoDB remarquera qu'il n'y a pas de fichiers journaux REDO et en créera des vides.

  1. Écrivez dans une table InnoDB des enregistrements indésirables jusqu'à ce qu'InnoDB effectue une rotation des écritures dans ib_logfile *.
6
akuzminsky

Vous pouvez demander à InnoDB de nettoyer les choses comme suit:

  • signaler à mysqld que InnoDB vide tout dans les journaux à l'arrêt
  • arrêt mysqld
  • supprimer les journaux
  • démarrer mysqld

Aucune récupération après incident ne se produira car il n'y aura rien à récupérer.

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS} -h127.0.0.1 -P3306 --protocol=tcp"
SQL="SET GLOBAL innodb_fast_shutdown = 0"
mysql ${MYSQL_CONN} -ANe"${SQL}"
mysqladmin ${MYSQL_CONN} shutdown
cd /var/lib/mysql
rm -f ib_logfile*
service mysql start

Si vous voulez que les pages de données persistantes soient nettoyées du double tampon d'écriture, veuillez consulter mon ancien article Remplissez ibdata1 avec des zéros/des nuls/etc ou modifiez l'espace disque logique d'une table

ESSAIE !!!

7
RolandoMySQLDBA