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)
只需使用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)
通过备份,我假设您只是指没有数据的定义。
看来现在 mysqldump 不区分视图和表,所以最好的办法可能是在命令行上显式指定视图到 mysqldump 或在 mysqldump 之前动态地找出这个列表,然后像以前一样将其传递下来。
您可以使用以下查询获取特定数据库中的所有视图:
SHOW FULL TABLES WHERE table_type='view';
归档时间: |
|
查看次数: |
54633 次 |
最近记录: |