私はいくつかのテーブル、ビュー、ルーチンを含むデータベース(InnoDB)を持っています...
定期的にコマンドラインを使用してバックアップを行います。
mysqldump -u user -ppassword --routines db_name > backup.sql
しかし、私はワークベンチを使用してバックアップを作成することにも問題があります
ところで、バックアッププロセスは問題や警告なしに終了します...
復元後、いくつかの問題が発生し、復元プロセスはエラーなしで正常に終了しますが、一部のビューが破損しています
ビュー自体を変更することはできません。
どうすれば修正できますか?そして、なぜ私はこの問題を抱えているのですか?
MySQL Workbench 5.2.35 CE ...を使用すると、空白/空の結果が表示されます。
プレーンSQLを使用(view_nameを説明)次のエラーが発生しました:
エラーコード:1356。ビュー 'db.view_name'は無効なテーブル、列、関数、またはビューの定義者/呼び出し者がそれらを使用する権限を参照していません
しかし select * from view_name
まだ予期した結果を返します
SHOW CREATE VIEW view_name
エラーコード:1356。ビュー 'view_name'は無効なテーブルまたは列または関数を参照しています>またはビューの定義者/呼び出し者がそれらを使用する権限がありません
SELECT * FROM INFORMATION_SCHEMA.TABLES where table_schema = 'db_name' and table_name = 'view_name'
TABLE_CATALOG def
TABLE_SCHEMA db_name
TABLE_NAME view_name
TABLE_TYPE VIEW
ENGINE VERSION NULL
ROW_FORMAT NULL
TABLE_ROWS NULL
AVG_ROW_LENGTH NULL
DATA_LENGTH NULL
MAX_DATA_LENGTH NULL
INDEX_LENGTH NULL
DATA_FREE NULL
AUTO_INCREMENT NULL
CREATE_TIME NULL
UPDATE_TIME NULL
CHECK_TIME NULL
TABLE_COLLATION NULL
CHECKSUM NULL
CREATE_OPTIONS NULL
TABLE_COMMENT 'View ''db_name.view_name'' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them'
このビューは、互いに結合された他のビューによって生成されたビューです。
ビューの定義は、ダンプファイル内に含まれている必要があります。
定義を表示するには、ダンプファイルで次のコマンドを実行します。
cat backup.sql | grep -A 3 "CREATE ALGORITHM" > backup_views.sql
cat backup_views.sql
次に、問題のあるビューを削除して、手動で再作成できます。
ビューが既に確立されている別のサーバーがある場合は、スキーマのみをmysqldumpする必要があります。ビューも含まれます。 @ DTestと私はこれに関する以前の投稿を書きました 。
ビューは常にmysqldumpの最後に(すべてのテーブルの後)処理されます。
この問題は、あるビューが別のビューを参照し、ビューの作成順序がそれを考慮していない場合にも発生する可能性があります。
実際には、エラーレポートとして、これはビューの定義者/呼び出し元と関連付けることができます。通常、ビュー定義者がdb1
であるuser1
をバックアップしてから、db2
などの別の名前でこのバックアップを復元すると、user1
がこの新しいデータベース。
そのような場合、user1
をdb2
にマップするか、backup.sqlファイルでuser1
をuser2
に置き換えることができます(user2
がdb2
-本番データベースのバックアップを作成し、それをテストデータベースとして復元する通常の場合)。
詳細は this answer で読むことができます。