我已成功导出MySQL Export Guide之后的MySQL数据库。
现在,我试图在MySQL Import Guide之后导入MySQL数据库。
我已经检查了service_account_email
我使用的权限,并且我允许 Admin SQL 和 Admin Storage 权限。
我能够在本地使用此命令成功激活我的服务帐户:
gcloud auth activate-service-account <service_account_email> --key-file=<service_account_json_file>
运行命令后:
gcloud sql import sql <instance> <gstorage_file> --database=<db_name> --async
我收到了这些信息:
{
"error": {
"errors": Array[1][
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}
我尝试过的其他事情
我也尝试使用我的SQL实例的service_account_email
来自:
gcloud sql instances describe <instance_name>
但是,似乎有同样的错误。
问题
基于我给出的REST API JSON错误,我如何&#34;登录&#34;使用service_account_email
因此我无法获得401 Error
?
答案 0 :(得分:7)
问题与数据库实例服务帐户在创建的存储桶上写入权限有关。解决此问题的步骤
1)转到您的Cloud SQL实例并复制实例的服务帐户(Cloud SQL-> {instance name}-> OVERVIEW-> Service account)
2)复制服务帐户后,转到要转储的位置的Cloud Storage Bucket,然后对该帐户设置所需的权限(存储-> {bucket name}-> permissions-> add成员)。
答案 1 :(得分:3)
云SQL实例在不属于您的项目的Google服务帐户下运行。您将需要授予该用户对您要导入的Cloud Storage中的文件的权限。这是一个方便的dandy bash片段,可以做到这一点。
SA_NAME=$(gcloud sql instances describe YOUR_DB_INSTANCE_NAME --project=YOUR_PROJECT_ID --format="value(serviceAccountEmailAddress)")
gsutil acl ch -u ${SA_NAME}:R gs://YOUR_BUCKET_NAME;
gsutil acl ch -u ${SA_NAME}:R gs://${YOUR_BUCKET_NAME}/whateverDirectory/fileToImport.sql;
第一行获取服务帐户的电子邮件地址。 下一行为该服务帐户提供了对存储桶的读取权限。 最后一行赋予服务帐户对该文件的读取权限。
答案 2 :(得分:0)
执行一些研究并基于权限错误后,我发现这些步骤对您解决问题更有用:
为了更轻松地测试ACL和权限,您可以:
您可能需要授予其他IAM角色,例如&#39; roles / storage.admin&#39;如有问题的服务帐户,请参阅更多信息here。
答案 3 :(得分:0)
Google也有一些最严重的错误报告。如果收到此错误消息,也可能是您输入的PATH错误。就我而言,这是我的存储桶目录的路径。快点,我没有权限访问不存在的存储桶。技术上正确,但几乎没有用。