当数据库中有视图时,我无法让 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
定义了要使用的配置文件路径。