Не удается найти событие DDL при перезапуске задачи репликации DMS - PullRequest
0 голосов
/ 06 июня 2019

Примечания. Моя команда использует AWS Database Migration Service (DMS), потому что мы рассматриваем ее как мощный инструмент для выполнения наших миграций БД через однородные БД в нескольких средах (DEV, STAGING, PROD).

Мыиметь задачу репликации DMS для обработки событий DDL при внесении изменений в схему БД.Мы планируем использовать это, когда вносим изменения в схему в DEV и нам необходимо применить их к базе данных STAGING, а затем, в конечном итоге, к базе данных PROD.

Мы выполняем следующие шаги:

  1. Создайте задачу репликации DMS с помощью source-dev и target-staging
  2. Запустите начальную загрузку и затем остановите задачу после полной загрузки каждой таблицы
    • Это создает CDC для восстановления, который будет использоваться приЗадача DMS возобновлена.
  3. Применение изменений схемы к базе данных DEV (например, ALTER TABLE test ADD COLUMN test INT)
  4. Возобновление задачи репликации DMS
  5. Подтверждение DDLСобытия подбираются и применяются к целевой БД

Кажется, это работает большую часть времени.Тем не менее, есть некоторые случаи, когда этого не происходит (мы еще не определили каждый случай отказа).

Любое руководство или помощь в настройке нашей задачи будет очень полезно.

Вот некоторая полезная информация о нашей задаче репликации DMS.

Параметры задачи репликации DMS:

{
      "TargetMetadata": {
          "TargetSchema": "target_schema",
          "SupportLobs": true,
          "FullLobMode": false,
          "LobChunkSize": 0,
          "LimitedSizeLobMode": true,
          "LobMaxSize": 256,
          "InlineLobMaxSize": 0,
          "LoadMaxFileSize": 0,
          "ParallelLoadThreads": 0,
          "ParallelLoadBufferSize": 0,
          "BatchApplyEnabled": false,
          "TaskRecoveryTableEnabled": false
      },
      "FullLoadSettings": {
          "TargetTablePrepMode": "DO_NOTHING",
          "CreatePkAfterFullLoad": false,
          "StopTaskCachedChangesApplied": false,
          "StopTaskCachedChangesNotApplied": false,
          "MaxFullLoadSubTasks": 8,
          "TransactionConsistencyTimeout": 1000,
          "CommitRate": 10000
      },
      "Logging": {
          "EnableLogging": true,
          "LogComponents": [
              {
                  "Id": "SOURCE_UNLOAD",
                  "Severity": "LOGGER_SEVERITY_DEFAULT"
              },
              {
                  "Id": "TARGET_LOAD",
                  "Severity": "LOGGER_SEVERITY_DEFAULT"
              },
              {
                  "Id": "SOURCE_CAPTURE",
                  "Severity": "LOGGER_SEVERITY_DEFAULT"
              },
              {
                  "Id": "TARGET_APPLY",
                  "Severity": "LOGGER_SEVERITY_DEFAULT"
              },
              {
                  "Id": "TASK_MANAGER",
                  "Severity": "LOGGER_SEVERITY_DEFAULT"
              }
          ],
      },
      "ControlTablesSettings": {
          "ControlSchema": "control",
          "HistoryTimeslotInMinutes": 5,
          "HistoryTableEnabled": true,
          "SuspendedTablesTableEnabled": true,
          "StatusTableEnabled": true
      },
      "StreamBufferSettings": {
          "StreamBufferCount": 3,
          "StreamBufferSizeInMB": 8,
          "CtrlStreamBufferSizeInMB": 5
      },
      "ChangeProcessingDdlHandlingPolicy": {
          "HandleSourceTableDropped": true,
          "HandleSourceTableTruncated": true,
          "HandleSourceTableAltered": true
      },
      "ErrorBehavior": {
          "DataErrorPolicy": "LOG_ERROR",
          "DataTruncationErrorPolicy": "LOG_ERROR",
          "DataErrorEscalationPolicy": "SUSPEND_TABLE",
          "DataErrorEscalationCount": 0,
          "TableErrorPolicy": "SUSPEND_TABLE",
          "TableErrorEscalationPolicy": "STOP_TASK",
          "TableErrorEscalationCount": 0,
          "RecoverableErrorCount": -1,
          "RecoverableErrorInterval": 5,
          "RecoverableErrorThrottling": true,
          "RecoverableErrorThrottlingMax": 1800,
          "ApplyErrorDeletePolicy": "IGNORE_RECORD",
          "ApplyErrorInsertPolicy": "LOG_ERROR",
          "ApplyErrorUpdatePolicy": "LOG_ERROR",
          "ApplyErrorEscalationPolicy": "LOG_ERROR",
          "ApplyErrorEscalationCount": 0,
          "ApplyErrorFailOnTruncationDdl": false,
          "FullLoadIgnoreConflicts": true,
          "FailOnTransactionConsistencyBreached": false,
          "FailOnNoTablesCaptured": false
      },
      "ChangeProcessingTuning": {
          "BatchApplyPreserveTransaction": true,
          "BatchApplyTimeoutMin": 1,
          "BatchApplyTimeoutMax": 30,
          "BatchApplyMemoryLimit": 500,
          "BatchSplitSize": 0,
          "MinTransactionSize": 1000,
          "CommitTimeout": 1,
          "MemoryLimitTotal": 1024,
          "MemoryKeepTime": 60,
          "StatementCacheSize": 50
      },
      "ValidationSettings": {
          "EnableValidation": true,
          "ValidationMode": "ROW_LEVEL",
          "ThreadCount": 5,
          "PartitionSize": 10000,
          "FailureMaxCount": 10000,
          "RecordFailureDelayInMinutes": 5,
          "RecordSuspendDelayInMinutes": 30,
          "MaxKeyColumnSize": 8096,
          "TableFailureMaxCount": 1000,
          "ValidationOnly": false,
          "HandleCollationDiff": false,
          "RecordFailureDelayLimitInMinutes": 0
      }
    }

Правила отображения таблиц:

      {
        "rules": [
          {
            "rule-type": "selection",
            "rule-id": "0",
            "rule-name": "0",
            "object-locator": {
              "schema-name": "source_schema",
              "table-name": "test"
            }, "rule-action": "include",
            "filters": []
          },
          {
            "rule-type": "transformation",
            "rule-id": "1",
            "rule-name": "1",
            "rule-target": "schema",
            "object-locator": {
              "schema-name": "source_schema",
              "table-name": "test"
            },
            "rule-action": "rename",
            "value": "target_schema",
            "old-value": null
          }
        ]
      }

Конфигурации задачи:

MigrationType='cdc'

Я бы ожидал, что Задача DMS подберет все события DDL с момента последнего CDC и применит их к целевой БД.

Иногда при возникновении проблем с DDL возникает следующее исключение:

2019-06-05T23:34:23 [SOURCE_CAPTURE ]W: Failed to find table definition, which is required in order to determine what type of DDL event was performed on table 'test'. DDL was 'ALTER TABLE test, ADD COLUMN test4 INT' (mysql_endpoint_capture.c:1763)

Иногда все работает как положено.Поэтому сейчас наша цель - лучше понять эти сбои, синхронизировать CDC и настроить эту задачу так, чтобы она была более надежной.

...