使用 sql server 作业上传到 gcp 存储桶

Posted

技术标签:

【中文标题】使用 sql server 作业上传到 gcp 存储桶【英文标题】:upload to gcp bucket using sql server job 【发布时间】:2020-01-17 02:32:09 【问题描述】:

我正在尝试自动将 db 备份上传到 gcp 存储桶。

我现在正在使用 Google 云上的虚拟机。我想创建一个 SQL 作业,它将运行将备份文件上传到存储桶的 cmd 命令。

当我在 cmd 中手动运行命令时它可以工作,但是当我通过 sql 代理运行它时它不会。该作业返回成功,但它并没有真正上传它。

第一个问题是运行机器的谷歌服务没有写入桶的权限;我解决了。我还使用 Gutils 在我的用户下使用 ouath 创建了一个 boto 文件。

我尝试为 gsutils 添加-D flag 以进行调试,如果我理解正确,它找不到配置文件。 sql 代理作业设置为我是所有者。 sql 代理服务由网络服务运行。

任何想法为什么它不会上传数据?

据我了解,gsutil 被 nbot 设置为正确的 projectID!将 gcloud 设置为正确的 projectid。我不知道如何将 gsutil 设置为我的 projectid。我查看了boto文件,找不到projectID配置。

这是来自 then 命令的调试输出:

正在运行的命令:C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform/gsutil\gsutil -o GSUtil:default_project_id=xxxx-246709 -o GoogleCompute:service_account=default -D -m rsync -r D:\backup\ gs://xxx config_file_list: [u'No config found'] config: [('debug', '0'), ('working_dir', '/mnt/pyami'),

【问题讨论】:

【参考方案1】:

我还使用 gsutil 在我的用户下使用 ouath 创建了一个 boto 文件

那个文件在哪里?如果它位于<path to your home directory>\.boto,Boto 库将自动加载它。如果它不是在 Boto 检查运行时的已知位置之一,您需要在运行 gsutil 之前设置 BOTO_CONFIG 环境变量以告诉 Boto 在哪里可以找到配置。您可以通过运行 gsutil -D version 并查看 config_file_list 行来找到配置的路径。

【讨论】:

它是:C:\Users\myuser\.boto,sql 作业运行并显示成功,但实际上并没有同步存储桶。我没有看到任何错误,我确定这是 sql server 代理的许可。 您的 SQL 作业可能以不同于您手动运行命令的用户身份运行。即使您将 BOTO_CONFIG env var 设置为 boto 配置的完整路径,SQL 用户也可能无法访问其他用户的主目录。要进一步调试,您可以使用*** -D- 标志运行命令,并将 stdout 和 stderr 路由到文件以在命令完成后查看。

以上是关于使用 sql server 作业上传到 gcp 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 代理作业不执行 SSIS 包权限错误

在 ASP.NET 页面上跟踪 SQL Server 作业的进度

当没有数据上传到 GCP 中的 BigQuery 表时创建警报

Sql Server 如何按每个月自动生成一张表,求大师指点一下下

SQL Server - 将代理作业迁移到 Azure

Docker容器上传到gcp cloud-run,核心Web api应用程序不起作用