【问题标题】:Bin Log (Tail Log) in Google Cloud SpannerGoogle Cloud Spanner 中的 Bin 日志(尾日志)
【发布时间】:2020-04-18 06:51:03
【问题描述】:

我们能否在 Google Cloud Spanner 中获取 DML 语句执行的 bin 日志。 尝试启用“数据访问写入”日志,但它没有提供与 mysql 或其他关系数据库相同的 bin 日志。

https://cloud.google.com/spanner/docs/audit-logging

https://cloud.google.com/logging/docs/audit/configure-data-access

https://console.cloud.google.com/iam-admin/audit?_ga=2.231523607.908127545.1587027457-1147786289.1577266273

【问题讨论】:

  • 数据访问写入日志现在应该在 protoPayload.request.sql 字段中包含用于 ExecuteSql 和 ExecuteStreamingSql 调用的 dml 语句。你能检查一下你的查询是否存在吗?对于流式查询,您将看到每个查询有两个日志条目,一个标记开始,另一个标记结束——它们将具有匹配的 operation.id 字段,开始条目将 operation.first 设置为 true;请求字段仅在开始日志条目中。

标签: google-cloud-spanner binlog


【解决方案1】:

Cloud Spanner 不包含用于生成二进制日志(如 MySQL)的内置实用程序。您必须implement your own change log table 来跟踪更改。

您还可以使用Audit logs 来跟踪执行更改的人员。因此,同时使用审核日志和您自己的更改日志表将是跟踪更改的理想解决方案。

【讨论】:

  • ExecuteSql 和 ExecuteStreamingSql 调用现在在数据访问写入审核日志中记录 dml 语句。
  • 那些日志用处不大。他们只是记录执行的sql。示例:“更新表集 v = 1 where 条件”。此外,如果您的查询包含参数,它不会记录参数的值。示例:“update table set v = 1 where col1 in :col1list” 其中 col1list 是一个参数。
  • 感谢您的反馈,钱丹。除了缺少的参数值,您能否告诉我们您正在寻找哪些额外的数据,您会在 binlogs 中找到这些数据?据我了解,binlog 主要用于复制和 DR,Cloud Spanner 会为您处理这些。希望有一些关于其他用例的信息。谢谢。
  • 最好的办法是拥有与mysql相同的bin log,不知道为什么不是这样。添加参数会很有帮助,但是我们仍然必须重建查询。如果记录了实际执行的查询,会很方便
  • 说,我们正在数据仓库(bq 或 redshift)中构建一些其他数据集,它依赖于 spanner 的变化。如果我们有像mysql这样的bin log就很容易了。例如:对于更新 bin 日志,它清楚地说明了行的旧值和更新的列值是什么@OzanBellik
【解决方案2】:

ExecuteSql 和 ExecuteStreamingSql 的数据访问审计日志包含 SQL 语句,因此您可以通过为“Cloud Spanner API”启用“数据写入”审计日志来生成 DML 语句的日志,如https://cloud.google.com/logging/docs/audit/configure-data-access#config-console-enable 中所述:

SQL 语句包含在为 ExecuteSql 生成的单个日志条目或为 ExecuteStreamingSql 生成的第一个日志条目中,在字段 protoPayload.request.sql 中。例如,以下是为 ExecuteStreamingSql 请求生成的日志条目:

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 2019-12-29
    • 2020-07-07
    • 2023-03-12
    • 2019-10-15
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多