mysqldumpコマンドは、DBに存在するすべてのビューもバックアップしますか、それとも特別なコマンドがありますか?


10

ビューとともにデータベース全体をバックアップしようとしています。mysqldumpコマンドを使用します。それがすべてのビューをコピーするのか、それとも別のコマンドを使用する必要があるのか​​と思っていました。

答えを教えてください。どんな助けでも大歓迎です。

回答:


9

ビューをダンプするための特定のオプションはありません。

以下を試すことができます。

mysqldump -h... -u... -p... --all-databases --routines --triggers --no-data > /root/MySQLDBSchema.sql
grep "CREATE ALGORITHM" /root/MySQLDBSchema.sql

ビューを表示できるはずです。これは、データベースをダンプすると、ビューにデータベースが付属することを示しています。

ビューのみを取得するために試すことができるもう1つのスタントは次のとおりです。

mysql -uroot -prootpass AN -e"select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views" | sed 's/;/\\G/g' | mysql --uroot -prootpass > /root/MySQLDBViews.sql

試してみる !!!


そのような説明的な答えをありがとう。問題は、データベースが非常に大きいため、一度に1つずつコピーすることです。このすべての混乱の中で、私は「ビュー」もコピーする必要があるため、--all-databasesコマンドを使用できません。Mysql DBサーバーからビューをコピーする方法を提案してください。
vinny

したがって、を使用--all-databasesする代わりに、必要なデータベースを指定します。
デレクダウニー

1

これに対する最良の答えは、おそらくこれを少し修正 したolliiiverによるものでしょう。具体的には、テーブルをいじる必要なしに、システム内のすべてのビューについて、テーブルのドロップクエリとビューの作成または置換クエリをエクスポートします。テーブルを削除するクエリはしばしば重要です。mysqldumpは、すべてのビューを独自の--ignore-tableパラメータに含めない限り、ビューをテーブルとして再作成することを好むため、迷惑になります。INFORMATION_SCHEMAを使用します。

mysql --skip-column-names --batch \
  -e "SELECT CONCAT('DROP TABLE IF EXISTS ', TABLE_SCHEMA, '.', TABLE_NAME, \
  '; CREATE OR REPLACE VIEW ', TABLE_SCHEMA, '.', TABLE_NAME, ' AS ', \
  VIEW_DEFINITION, '; ') AS q FROM INFORMATION_SCHEMA.VIEWS"

このようなものをシェルスクリプトに変換する場合は、-defaults-extra-file = CREDSFILENAMEパラメータを使用することをお勧めします。これにより、スクリプトでuser / passを指定する必要がなくなります。

資格情報ファイルは次のようになります。

[client]
username=YourUsernameHere
password=YourPasswordHere
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.