我在更新后备份我的数据库时遇到问题。我一直在我的系统上四处寻找,试图找出原因。我运行的一个查询返回了这个结果。
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 -ubackup -psomething --single-transaction --quick somedatabase | gzip > 4_19.gz
Run Code Online (Sandbox Code Playgroud)
在创建转储的 60%(估计 zip 文件的检查大小)后,我收到以下错误:
mysqldump: Couldn't execute 'show table status like 'customer\_cohort\_paid'': SELECT command denied to user ''@'%' for column 'customer_id' in table 'sales_order' (1143)
Run Code Online (Sandbox Code Playgroud)
它谈到了一个空白用户的权限问题user ''@'%'。此外,grants对于backup用户如下:
mysql> show grants for 'backup'@'%';
+------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for backup@% |
+------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup'@'%' IDENTIFIED BY PASSWORD '*SOMETHING' |
+------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set …Run Code Online (Sandbox Code Playgroud)