MySQL 使用视图进行备份和恢复

MySQL 使用视图进行备份和恢复

当数据库中有视图时,我无法让 mysql 备份正常运行。我认为这可能与需要一个占位符对象有关。无论如何,我运行以下命令:

mysqldump -u myuser -pmypassword mydatabase | mysql -u myuser -pmypassword -C mydatabase_Beta

该用户拥有完全权限,我得到以下信息:

查看 mydatabase_beta.yadayada 引用了无效的表或列或函数或定义者/调用者或查看缺少使用它们的权限。

我该如何备份它以便正确恢复我的所有数据库?

在示例中,我将其恢复为不同的名称,但我确实需要能够恢复工作副本。我认为这可能是一个额外的 mysqldump 参数,或者热复制可能效果更好。有什么想法吗?

答案1

首先尝试分两个步骤进行:

mysqldump -uroot -ppassword --skip-extended-insert database.sql > database.sql

因此,它备份到一个文件,然后将其输入到第二个命令中:

mysql -u myuser -pmypassword -C mydatabase_Beta < database.sql

如果引用错误发生在 mysqldump 步骤中,请修复视图或将其从数据库中删除。我无法想象如果它们引用不存在的表,它们仍然会被使用。

答案2

我认为答案可能是补充-f

--force, -f

Continue even if an SQL error occurs during a table dump.

此选项的一个用途是使 mysqldump 继续执行,即使它遇到由于定义引用已被删除的表而变得无效的视图。如果没有--force,mysqldump 将退出并显示错误消息。如果有--force,mysqldump 将打印错误消息,但它还会将包含视图定义的 SQL 注释写入转储输出并继续执行。

答案3

这里是瞎猜的,但我认为你不需要-C该语句的后半部分。根据我的 mysql 副本,-C定义了要使用的配置文件路径。

相关内容