谷歌云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实例超级权限错误的主要内容,如果未能解决你的问题,请参考以下文章
HTTP错误 400 |谷歌云平台将csv导入谷歌sql服务器(cloud sql)