web-dev-qa-db-ja.com

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

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

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

10
vinny

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

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

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

試してみる !!!

9
RolandoMySQLDBA

これに対する最良の答えはおそらく this one by 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
1
RedScourge