【事象】
MySQLのスキーマ(データベース)をリストアする際に、以下の様な事を行っていた。
(DB_BACKUP_FILEは、mysqldumpしたバックアップファイルをgzipで固めただけのファイル)
zcat ${DB_BACKUP_FILE} | mysql -u ${DB_USER} -p${DB_PASS} ${DB_SCHEMA}
しかし、クリアしていたと思っていたテーブルやビューが残っていた。
【原因】
バックアップファイルにはスキーマをdropする構文が入っていなかった。
そのため、バックアップファイルに存在するテーブルは置換されているが、存在しないテーブルやビューはそのまま残っていたため。
【対応方法】
1.バックアップファイルを作成し直して、drop databaseされる様にする。
2.リストアする前に事前にデータベースやビューを削除する。
(削除例)
----- テーブル削除 mysql -u ${DB_USER} -p${DB_PASS} ${DB_SCHEMA} -N -e 'show tables' | while read dtable; do mysql -u ${DB_USER} -p${DB_PASS} ${DB_SCHEMA} -N -e "drop table ${dtable}"; done ----- ビュー削除 mysql -u ${DB_USER} -p${DB_PASS} ${DB_SCHEMA} -N -e 'show tables' | while read dview; do mysql -u ${DB_USER} -p${DB_PASS} ${DB_SCHEMA} -N -e "drop view ${dview}"; done
・無精しているので、エラー出しながら削除する方式
必要であれば、きちんとエラーハンドリングすること
・プロシージャなど他のオブジェクトも必要であれば対応する必要有
(SQLでやる方法)
mebee.info
【参考リンク】
tm.root-n.com