Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL mysqdumpで、Error 1412: Table definition has changed

mysqldumpする際にこんなエラーを食らったことはありませんか?

現在、 MySQL5.7のデータベースをMySQL 8.0に絶賛リストア中なのですが、mysqldumpが終わりそうなところでこのエラーがコンソールに出てきて疲弊してきました(汗)

mysqldump: Error 1412: Table definition has changed, please retry transaction when dumping table table1 at row: 0

原因は単純。。。読み取り一貫性が保証されていないから・・

ALTER TABLE では、そのステートメントで元のテーブルの一時コピーが作成され、元のテーブルは一時コピーが構築されるときに削除されるため、一貫性読み取りが機能しません。トランザクション内で一貫性読み取りを再発行しても、新しいテーブル内の行はトランザクションのスナップショット取得されたときには存在していなかったため、表示できません。MySQL 5.6.6 の時点では、この場合に、トランザクションから「Table definition has changed, please retry transaction」という ER_TABLE_DEF_CHANGED エラーが返されます。

ALTER TABLEなんで、自分の中で発行したことないなと感じつつ、よくよく考えてみたらTRUNCATE TABLEってのもそれに該当するのか!というのを思い出して、つまるところ、関連のバッチ処理を全て停止した上で実施したら、無事にバックアップが取れました。長い戦いでした。

f:id:hit10231023:20180309104332j:plain