web-dev-qa-db-ja.com

MySqlのフラッシュ/クリーンib_logfile0 ib_logfile1

テーブルを.sqlファイルにダンプせずにib_logfile0とib_logfile1をフラッシュし、削除してから再挿入する方法はありますか?誰かが顧客メモのテーブルにいくつかのプレーンテキストのクレジットカード番号を入力しました。それは私のPCIスキャンで出てきて、私はそれらをテーブルから削除しましたが、それらはまだログファイルに存在しています:(

6
Sam

2つの方法があります

  1. MySQLを正常に停止します。エラーログを確認し、正常にシャットダウンされたことを確認してください。

    Ib_logfile0とib_logfile1をdatadirから移動します(ロールバックする必要がある場合に備えて保存します)

MySQLを起動します。 InnoDBはREDOログファイルがないことに気づき、空のログファイルを作成します。

  1. InnoDBがib_logfile *で書き込みをローテーションするまで、いくつかのInnoDBテーブルにいくつかのジャンクレコードを書き込みます。
6
akuzminsky

InnoDBを次のようにクリーンアップできます。

  • mysqldにシグナルを送り、シャットダウン時にInnoDBがログからすべてをフラッシュするようにします。
  • mysqldのシャットダウン
  • ログを削除する
  • mysqldを起動する

回復するものがないため、クラッシュ回復は行われません。

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

二重書き込みバッファーからクレンジングされた残留データページが必要な場合は、以前の投稿を参照してください ibdata1をゼロ/ヌルなどで埋めるか、テーブルのテーブルスペースを変更してください

試してみる !!!

7
RolandoMySQLDBA