mysqldump命令还会备份数据库中存在的所有视图吗,还是有一个特殊的命令?


10

我正在尝试备份我的整个数据库以及视图。我将使用mysqldump命令。我想知道这是否将复制所有视图,或者我将不得不使用单独的命令。

请给我一个答案。任何帮助是极大的赞赏。

Answers:


9

没有用于转储视图的特定选项。

您可以尝试以下方法:

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

您应该能够看到视图。这表明转储数据库时,视图随其一起提供。

您可以尝试的另一种特技,仅是获取视图,是这样的:

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

试试看 !!!


非常感谢您提供这样的解释性答案。问题是,我的数据库很大,因此我计划一次复制一个数据库。在所有这些混乱中,我还需要复制“视图”,所以我不能使用--all-databases命令。请建议一种从Mysql DB Server复制视图的方法。
2012年

因此,不要使用,而是--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"

如果要将此类内容转换为Shell脚本,我还建议使用--defaults-extra-file = CREDSFILENAME参数,这样就无需在脚本中指定用户/密码。

凭证文件如下所示:

[client]
username=YourUsernameHere
password=YourPasswordHere
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.