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

Posted

技术标签:

【中文标题】谷歌云sql实例超级权限错误【英文标题】:Google cloud sql instance super privilege error 【发布时间】:2015-05-02 13:37:40 【问题描述】:

我是谷歌应用引擎的新手,请帮我解决我的问题

当我导入 SQL 文件时,我在谷歌云 sql 中创建了一个实例,然后它显示这样的错误。

第 1088 行的错误 1227 (42000):访问被拒绝;您需要(至少一个)超级权限才能执行此操作

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

【问题讨论】:

你搜索过错误吗? 【参考方案1】:

如the Cloud SQL documentation所述:

不支持超级权限。

您可以查看 this page,其中介绍了如何将数据导入 Cloud SQL 实例。

【讨论】:

@我也遇到同样的错误,我从第一代云 sql 导出哑元并从第二代云 sql 导入在第 22 行出现错误 ERROR 1227 (42000):访问被拒绝;您需要(至少其中一项)超级权限才能执行此操作 您找到解决方案了吗? 我他妈的成功了。您必须从客户端创建表或创建数据库,并遇到该错误。而且我认为您正在访问 mysql 数据库。通过我 4 小时的研究,你不可能做到这一点,而且你做错了,因为访问“mysql”数据库确实是禁止的。您应该拥有自己的数据库,而不是“mysql”数据库。从控制台,创建你的数据库,然后创建表,然后你就可以通过了。希望此评论对某人有所帮助,如果您愿意,请发表评论。欢迎您!【参考方案2】:

我也遇到了同样的问题。但问题出在转储的 sql 数据库中。导出数据库时使用这些标志

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

这里是如何做到这一点的完整文档 (https://cloud.google.com/sql/docs/mysql/import-export/importing)。数据导出后,可以使用命令行、gcloud shell 或gcloud sql 中的import 选项导入。

我使用了gcloud sql 控制台的import 功能,它对我有用。

【讨论】:

如果您使用的是更新版本的mysqldump,可能还需要添加:--column-statistics=0 @MattBrowne 你知道mysqldump是哪个版本的吗? 看起来像 mysqldump 版本 8+。顺便说一句,我在这里添加了一个答案,显示了我使用的特定命令:***.com/a/63239396/560114【参考方案3】:

在将 gzipped 转储(使用 mysqldump 从 5.1 版本的 MySQL 采购)反向移植到 MySQL 5.6 的 Google Cloud SQL 实例时,我遇到了同样的错误。 sql文件中的以下语句是问题:

DEFINER=`username`@`%`

对我有用的解决方案是使用 sed 删除它的所有实例:

cat db-2018-08-30.sql |  sed -e 's/DEFINER=`username`@`%`//g' > db-2018-08-30-CLEANED.sql

删除后,反向移植完成,没有错误。显然需要SUPER 权限,这在 Google Cloud SQL 中不可用,才能运行DEFINER

另一个参考:Access denied; you need (at least one of) the SUPER privilege(s) for this operation

祝你好运!

【讨论】:

谢谢!解决了问题!【参考方案4】:

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

声明

DEFINER=username@`%

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

您可以解决的解决方案是从 sql 转储文件中删除所有条目并从 GCP 控制台导入数据。

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

从转储中删除条目并成功完成后,您可以尝试重新导入。

【讨论】:

【参考方案5】:

对于在数据库之间复制的用例在同一实例中,似乎唯一的方法是使用mysqldump,您必须传递一些特殊标志才能使其在没有超级特权。这就是我从一个数据库复制到另一个数据库的方式:

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 了解更多信息。

【讨论】:

【参考方案6】:

这是关于数据的导出。当您从控制台导出时,它会导出整个实例,而不仅仅是模式,这需要创建它的项目的 SUPER 权限。要将数据导出到另一个项目,只需通过在高级选项中定位模式来导出。如果遇到could not find storage or object,请将导出的架构保存到本地,然后上传到其他项目的存储中,然后从那里选择它。

【讨论】:

【参考方案7】:

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

    创建一个数据库。您可以从 UI 中执行此操作,只需转到数据库菜单并单击“创建数据库”。 单击“导入”并选择您的 sql_dump(之前保存在存储桶中)后,“显示高级选项”并选择您的 Db(不是那么高级,是吗?!)。否则默认是系统mysql里面的,当然不能 支持导入。

导入愉快。

【讨论】:

这也是我的情况。归结起来,你需要导入到你有权限的数据库中。【参考方案8】:

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

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

希望对某人有所帮助

【讨论】:

【参考方案9】:
SUPER privilege is exclusively reserved for GCP

对于您的问题,您需要将数据导入您拥有权限的数据库中..

【讨论】:

以上是关于谷歌云sql实例超级权限错误的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云 SQL 很慢

谷歌云sql数据读取审计日志

HTTP错误 400 |谷歌云平台将csv导入谷歌sql服务器(cloud sql)

如何在谷歌云平台中使用私有 IP 从我的电脑连接到 sql 实例

谷歌云 是啥

谷歌云sql中的Mysql连接