使用Mysql转储备份视图

Cha*_*iga 27 mysql mysqldump

我想只用mysqldump备份视图.

这可能吗?

如果是这样,怎么样?

And*_*mar 25

注意:肯的答案从建议编辑转移到自己的答案.

这是使用上述变体的完整命令行示例

 mysql -u username INFORMATION_SCHEMA
  --skip-column-names --batch
  -e "select table_name from tables where table_type = 'VIEW'
      and table_schema = 'database'"
  | xargs mysqldump -u username database
  > views.sql
Run Code Online (Sandbox Code Playgroud)

这将通过查询将所有视图名称提取到INFORMATION_SCHEMA数据库,然后将它们传递给xargs以制定mysqldump命令.需要使用--skip-column-names和--batch来使输出xargs友好.如果你有很多视图,这个命令行可能会太长,在这种情况下你需要为select添加一些额外的过滤器(例如,查找以给定字符开头的所有视图).


Ros*_* II 16

我修改了Andomar的优秀答案,允许数据库(和其他设置)只被指定一次:

#!/bin/bash -e
mysql --skip-column-names --batch -e \
"select table_name from information_schema.views \
 where table_schema = database()" $* |
xargs --max-args 1 mysqldump $*
Run Code Online (Sandbox Code Playgroud)

我将其保存为mysql-dump-views.sh并通过以下方式调用:

$ mysql-dump-views.sh -u user -ppassword databasename >dumpfile.sql
Run Code Online (Sandbox Code Playgroud)


oll*_*ver 9

只需使用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, "; ") table_name from information_schema.views'
Run Code Online (Sandbox Code Playgroud)


Art*_*kii 3

通过备份,我假设您只是指没有数据的定义。

看来现在 mysqldump 不区分视图和表,所以最好的办法可能是在命令行上显式指定视图到 mysqldump 或在 mysqldump 之前动态地找出这个列表,然后像以前一样将其传递下来。

您可以使用以下查询获取特定数据库中的所有视图:

SHOW FULL TABLES WHERE table_type='view';