Google Cloud SQL и флаг sql_mode - PullRequest
       35

Google Cloud SQL и флаг sql_mode

1 голос
/ 05 ноября 2019

Я пытаюсь выполнить следующую команду

gcloud beta sql instances create my_replica \
--master-instance-name=db-master01 \
--master-username=replication_user \
--master-password='replication_password' \
--master-dump-file-path=gs://path/to/dump.sql.gz \
--database-flags default_time_zone='-05:00' \
                 sql_mode='STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION' \
--region=us-central \
--tier=db-g1-small

Но я получаю следующую ошибку:

ERROR: (gcloud.beta.sql.instances.create) unrecognized arguments: sql_mode=STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

To search the help text of gcloud commands, run:
  gcloud help -- SEARCH_TERMS

Я что-то неправильно печатаю? Это не поддерживается?

ОБНОВЛЕНИЕ: Из ответа Стефана я обновил свою команду, чтобы исправить синтаксис. Я получаю новую ошибку:

Вот моя команда:

gcloud beta sql instances create $replica_name \
--master-instance-name=db-master01 \
--master-username=replication_user \
--master-password='replication_password' \
--master-dump-file-path=gs://path/to/dump.sql.gz \
--database-flags default_time_zone='-05:00',sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' \
--region=us-central \
--tier=db-g1-small

, а вот ошибка:

ERROR: (gcloud.beta.sql.instances.create) argument --database-flags: Bad syntax for dict arg: [NO_ZERO_IN_DATE]. Please see `gcloud topic flags-file` or `gcloud topic escaping` for information on providing list or dictionary flag values with special characters.
Usage: gcloud beta sql instances create INSTANCE [optional flags]
  optional flags may be  --activation-policy | --assign-ip | --async |
                         --authorized-gae-apps | --authorized-networks |
                         --availability-type | --backup | --backup-start-time |
                         --client-certificate-path | --client-key-path | --cpu |
                         --database-flags | --database-version |
                         --enable-bin-log | --failover-replica-name |
                         --follow-gae-app | --gce-zone | --help | --labels |
                         --maintenance-release-channel |
                         --maintenance-window-day | --maintenance-window-hour |
                         --master-ca-certificate-path |
                         --master-dump-file-path | --master-instance-name |
                         --master-password | --master-username | --memory |
                         --network | --pricing-plan |
                         --prompt-for-master-password | --region |
                         --replica-type | --replication | --require-ssl |
                         --root-password | --source-ip-address | --source-port |
                         --storage-auto-increase |
                         --storage-auto-increase-limit | --storage-size |
                         --storage-type | --tier | --zone

For detailed information on this command and its flags, run:
  gcloud beta sql instances create --help

Я не понимаю, почемуNO_ZERO_IN_DATE это проблема. Жалуется, потому что я передаю ему более одного значения для флага?

1 Ответ

1 голос
/ 05 ноября 2019

--database-flags принимает несколько параметров, которые вы можете передать используя. ","

Вы режете --database-flags при default_time_zone = '- 05:00', используйте "," там.

Попробуйте передать --database-flags таким образом, вместо разделенияих с \

- флагами базы данных default_time_zone = '- 05:00', sql_mode = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, 101__NITION_0_0_0_0_0_0 * * * * * ** Здесь у вас есть более конкретная информация о том, как предполагается передавать флаги базы данных.

Дайте мне знать.

РЕДАКТИРОВАТЬ:

Посмотрите на это, это довольно интересно. По-видимому флагом --sql_mode по умолчанию включает в себя все флаги, которые вы пытаетесь передать

Режим SQL по умолчанию в MySQL 5.7 включает в себя следующие режимы:. ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, иNO_ENGINE_SUBSTITUTION.

Google Cloud SQL использует 5.7 по умолчанию, поэтому все эти флаги должны быть применены, если вы установите.

Здесь посмотрите здесь .

Флаг, о котором я говорил, это этот один.

После его развертывания вы можете проверить флаги, используя следующую команду:

gcloud sql instances describe [INSTANCE_NAME]

Если вы хотите узнать больше о команде .

EDIT2:

Вы не можете установить эти флаги, поскольку они недоступны для передачи как - базы данных-флаги в Google Cloud Platform, здесь у вас есть список всех флагов, которые вы можете передать параметру - database-flags . Проблема в том, что большинство из них либо устарели в соответствии с документацией MySQL, либо уже реализованы в установленном вами sql_mode. Взгляните сюда * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * S S Sи он содержит тот, который вы не хотите иметь.

Дайте мне знать.

...