谷歌云SQL实例超级权限错误

16

我刚接触Google应用引擎,请帮助我解决问题。

我已在Google云SQL中创建了一个实例,但当我导入SQL文件时出现以下错误。

ERROR 1227 (42000) 在第1088行: 拒绝访问; 您需要(至少之一)SUPER特权才能执行此操作

我该如何为我的实例添加超级权限。


你有没有搜索过错误信息? - Cem Özer
9个回答

8
根据 Cloud SQL 文档,如下所述:

不支持 SUPER 权限。

您可以查看 此页面,了解如何将数据导入 Cloud SQL 实例。

我也遇到了同样的错误,我从第一代云SQL导出了数据,然后尝试导入到第二代云SQL中,但是出现了以下错误: ERROR 1227 (42000) at line 22: Access denied; you need (at least one of) the SUPER privilege(s) for this operation - twister_void
你得到解决方案了吗? - Rohit Manglik
1
我成功了。你可能是在客户端创建表或数据库时遇到了错误,而且我认为你正在访问mysql数据库。通过我的4小时研究,你不能不知道这个,你现在正在以错误的方式访问“mysql”数据库,这是绝对不允许的。你应该有自己的数据库,而不是“mysql”数据库。从控制台中创建你自己的数据库和表,然后你就可以完成了。希望这条评论能帮助到某些人,如果可以的话,请留下评论。不用谢! - minimanimo

6

我也遇到了同样的问题。但问题出在转储的SQL数据库中。在导出数据库时,请使用以下标志。

--hex-blob --skip-triggers --set-gtid-purged=OFF

以下是关于如何完成此操作的完整文档(https://cloud.google.com/sql/docs/mysql/import-export/importing)。数据导出后,您可以使用命令行、gcloud shell或选项中的importgcloud sql中进行导入。我使用了gcloud sql控制台的import功能,并且成功地完成了该操作。

2
如果您正在使用更近期的 mysqldump 版本,可能还需要添加:--column-statistics=0 - Matt Browne
@MattBrowne 你知道 mysqldump 是从哪个版本开始支持的吗? - probitaille
看起来是 mysqldump 版本 8+。顺便说一下,我在这里添加了一个答案,展示了我使用的具体命令: https://dev59.com/T14b5IYBdhLWcg3wrzfZ#63239396 - Matt Browne

2

当我将一个由MySQL 5.1版本的mysqldump获取的gzipped dump回溯到Google Cloud SQL实例中的MySQL 5.6时,遇到了相同的错误。以下语句是sql文件中的问题:

DEFINER=`username`@`%`

我找到的解决方案是使用 sed 命令删除所有它的实例:
cat db-2018-08-30.sql |  sed -e 's/DEFINER=`username`@`%`//g' > db-2018-08-30-CLEANED.sql

移除后,回退没有错误。显然需要SUPER权限才能运行DEFINER,但是在Google Cloud SQL中不可用。

另一个参考文献:拒绝访问; 您需要(至少之一)超级权限来执行此操作

祝你好运!


谢谢!问题已解决! - Richard Varno

2

我遇到了同样的问题,你可以尝试给用户授予“超级权限”,但在GCP Cloud SQL中不可用。

这个语句

DEFINER=username@`%

是备份转储中的一个问题。

你可以解决这个问题的方法是从sql dump文件中删除所有条目,然后从GCP控制台导入数据。

cat DUMP_FILE_NAME.sql | sed -e 's/DEFINER=<username>@%//g' > NEW-CLEANED-DUMP.sql

从备份文件中删除条目并成功完成后,你可以尝试重新导入数据。


2

对于在同一个实例内在数据库之间进行复制的用例,似乎唯一的方法是使用 mysqldump 。您需要传递一些特殊标志以使其在没有SUPER权限的情况下工作。这是我从一个数据库复制到另一个数据库的步骤:

DB_HOST=...  # set to 127.0.0.1 if using cloud-sql proxy
DB_USER=...
DB_PASSWORD=...
SOURCE_DB=...
DESTINATION_DB=...

mysqldump --hex-blob --skip-triggers --set-gtid-purged=OFF --column-statistics=0 -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $SOURCE_DB \
  | mysql -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $DESTINATION_DB

或者,如果您只想将其转储到本地文件并稍后进行其他操作:

mysqldump --hex-blob --skip-triggers --set-gtid-purged=OFF --column-statistics=0 -h $DB_HOST -u $DB_USER -p"$DB_PASSWORD" $SOURCE_DB \
  > $SOURCE_DB.sql

请查看https://cloud.google.com/sql/docs/mysql/import-export/exporting#export-mysqldump了解更多信息。

1
这是关于数据导出的问题。当您从控制台导出时,它会导出整个实例,而不仅仅是模式,这需要在创建它的项目中具有SUPER权限。要将数据导出到另一个项目,请通过高级选项以目标模式为导出对象进行导出。如果遇到“找不到存储或对象”的错误,请将导出的模式保存到本地,然后上传到其他项目的存储中,然后从那里选择它。

1

如果有人在2018年(至少8月)搜索此内容的话,解决方案如下:

  1. 创建一个数据库。您可以从UI中完成此操作,只需转到“数据库”菜单并单击“创建数据库”即可。
  2. 在您单击“导入”并选择您的sql_dump(先前保存在存储桶中)后,点击“显示高级选项”,然后选择您的数据库(这不算高级,是吗?!)。否则,默认值是系统mysql,当然不能支持导入。

祝您导入愉快。


这也是我的情况。简而言之,您需要导入到您拥有权限的数据库中。 - Kalnode

0

我通过创建一个新的数据库和在SQL实例中解决了这个问题(MySQL的默认数据库是sys)。

步骤(非CLI版本):
1)在GCP> SQL>数据库中,创建一个新的数据库,例如newdb
2)在您的SQL脚本中添加:Use newdb;

希望能帮助到有需要的人。


0
SUPER privilege is exclusively reserved for GCP

针对您的问题,您需要将数据导入到一个您具有权限控制的数据库中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接