我在更新后备份我的数据库时遇到问题。我一直在我的系统上四处寻找,试图找出原因。我运行的一个查询返回了这个结果。
Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES
Run Code Online (Sandbox Code Playgroud)
经过一些调查,这些视图的定义者似乎是一个已从系统中清除的旧开发者帐户。有这个问题的数据库和视图很少使用,并且大多数被保留用于存档目的。
大约有 40 个视图带有不再存在的定义器。有没有一种简单的方法可以一次性将定义者更改为不同的帐户?有没有办法让 mysqldump 简单地将所有视图转储到一个文件中,以便我可以编辑该文件并重新创建视图?
在执行 mysqldump 时,会跳过一些表,因为 mysqldump 将它们视为视图而不是表,尽管它们是 100% 的表。
所以对于某些表,它看起来像
-- Retrieving table structure for table services...
-- Sending SELECT query...
-- Retrieving rows...
Run Code Online (Sandbox Code Playgroud)
对于一些:
-- Retrieving view structure for table users...
-- It's base table, skipped
Run Code Online (Sandbox Code Playgroud)
我看到这个问题已经提到过几次了,但是没有解决方案。
显示创建表用户;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
...
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8915 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
SHOW TABLE STATUS LIKE 'users' \G;
*************************** 1. row ***************************
Name: users
Engine: InnoDB
Version: 10 …
Run Code Online (Sandbox Code Playgroud)