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 :(
Il y a deux façons
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.
Vous pouvez demander à InnoDB de nettoyer les choses comme suit:
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