[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for MySQL®](../index.md) > Вопросы и ответы > Все вопросы на одной странице

# Вопросы и ответы про Managed Service for MySQL®®


{% note info %}

В [регионе Казахстан](../../overview/concepts/region.md) доступны только [платформы](../../compute/concepts/vm-platforms.md#standard-platforms) `standard-v3` (Intel Ice Lake) и `standard-v3-t4i` (Intel Ice Lake with T4i). Другие типы платформ, кластеры GPU и выделенные хосты недоступны.

{% endnote %}


### Общие вопросы {#toc-general}

* [Что такое Managed Service for MySQL®?](#what-is)

* [Какую часть работы по управлению и сопровождению баз данных берет на себя Managed Service for MySQL®?](#services)

* [Для каких задач стоит использовать Managed Service for MySQL®, а для каких — виртуальные машины с базами данных?](#mdb-advantage)

* [Что такое хост базы данных и кластер базы данных?](#what-is-cluster)

* [Как начать работу с Managed Service for MySQL®?](#quickstart)

* [Сколько хостов БД может содержать кластер?](#how-many-hosts)

* [Как получить доступ к запущенному хосту базы данных?](#db-access)

* [Сколько кластеров можно создать в рамках одного облака?](#db-limit)

* [Как происходит обслуживание кластеров БД?](#service-window)

* [Какую версию MySQL® использует Managed Service for MySQL®?](#dbms-version)

* [Что происходит, когда выпускается новая версия СУБД?](#new-version)

* [Что происходит, когда версия СУБД становится неподдерживаемой (deprecated)?](#dbms-deprecated)

* [Как рассчитывается стоимость потребления для хоста базы данных?](#db-cost)

* [Как изменить вычислительные ресурсы и объем хранилища для кластера БД?](#resources-change)

* [Включено ли резервное копирование хостов БД по умолчанию?](#default-backup)

* [Когда выполняется резервное копирование? Доступен ли кластер БД во время резервного копирования?](#backup-window)

* [Можно ли изменить срок хранения автоматических резервных копий?](#backup-retain-days)

* [За какими метриками и процессами можно следить с помощью мониторинга?](#monitoring)

* [Какой размер блока используется на дисках кластера?](#block-size)

* [Соответствует ли сервис требованиям Федерального закона Российской Федерации № 152-ФЗ «О персональных данных»?](#fz-152)

* [Я могу получить логи моей работы в сервисах?](#logs)

* [Почему возникает ошибка при удалении БД?](#delete-db)

### Вопросы о MySQL® {#toc-mysql}

* [Какие версии MySQL® поддерживает Managed Service for MySQL®?](#supported-version)

* [Включено ли резервное копирование кластеров БД по умолчанию?](#backup)

* [Шифруется ли соединение с кластером БД MySQL®?](#encryption)

* [Что такое реплика для чтения в MySQL®?](#read-only-instance)

* [Какие ограничения накладываются на кластеры БД MySQL®?](#instance-limitations)

* [Почему кластер работает медленно, хотя вычислительные ресурсы использованы не до предела?](#throttling)

### Подключение {#toc-connection}

* [Как подключиться к кластеру?](#how-to-connect)

* [Почему не получается подключиться из интернета?](#from-internet)

* [Почему не получается подключиться из Yandex Cloud?](#from-yc)

* [Почему не получается подключиться к многохостовому кластеру?](#to-multi-host-cluster)

* [Можно ли подключиться к хостам кластера по SSH или получить на хостах права суперпользователя?](#connect-ssh)

* [Что делать, если при получении SSL-сертификата через PowerShell возникает ошибка проверки отзыва?](#get-ssl-error)

* [Почему может быть превышен лимит соединений?](#connection-limit)

### Проблемы с чтением/записью в кластер {#toc-read-write}

* [Почему не работает запись в кластер?](#write-failure)

* [Почему отстает реплика?](#replica-lagging)

* [Почему размер кластера значительно больше объема данных в нем?](#cluster-greater-data)

* [Что делать при возникновении любой ошибки приложения?](#application-error)

### Проблемы с производительностью {#toc-performance}

* [Как выяснить причину снижения производительности в пиках нагрузки?](#degradation-at-peak)

* [Как выяснить причину общего снижения производительности?](#general-degradation)

* [Как выяснить причину долгой загрузки ресурсов?](#long-load)

* [Как выяснить причину утилизации ресурса CPU?](#high-cpu)

* [Как выяснить причину утилизации ресурса IO?](#high-io)

* [Как выяснить причину утилизации ресурса сети?](#high-network)

* [Как выяснить причины блокировок?](#locks)

* [Как оптимизировать проблемные запросы?](#query-optimization)

### Изменение кластера {#toc-updating}

* [Можно ли управлять кластером с помощью команд SQL?](#sql-control)

* [Как уменьшить размер диска?](#reduce-size)

* [Как увеличить размера диска?](#increase-size)


* [Как изменить тип диска?](#modify-type)

* [Почему не добавляется/не удаляется хост?](#not-add-delete)

* [Как переключить мастер (manual failover)?](#manual-failover)

* [Как перезагрузить хост?](#host-reboot)

* [Почему возникает ошибка при остановке кластера?](#stop-cluster-error)

### Мониторинг и логи {#toc-monitoring}

* [Как посмотреть графики кластера и хостов?](#charts)

* [Как посмотреть логи?](#logs)

* [Как долго хранятся логи?](#log-keeping)

* [Как посмотреть текущие запросы?](#current-queries)

* [Какая еще диагностика доступна?](#trouble-info)

* [Как настроить алерты?](#alerts)

* [Как настроить алерт, который срабатывает при заполнении определенного процента дискового пространства?](#disk-space-percentage)

### Миграция/перенос {#toc-migration}

* [Как перенести данные в кластер?](#to-cluster)

* [Как перенести кластер в другой каталог или облако?](#to-folder-cloud)

* [Ошибка при внешней репликации](#external-replication-error)

### Настройки параметров MySQL® {#toc-configuring}

* [Как задать часовой пояс (time zone)?](#time-zone)

* [Как установить режим SQL (sql_mode)?](#sql-mode)

* [Какое значение установить для innodb_buffer_pool_size?](#innodb-buffer-pool-size)

* [Как отключить строгий режим Innodb?](#innodb-strict-mode)

* [Как изменить набор символов и правила их сравнения (CHARACTER SET, COLLATE)?](#character-collate)

* [Как настроить другие параметры?](#params)

## Общие вопросы {#general}

#### Что такое Managed Service for MySQL®? {#what-is}

Managed Service for MySQL® — это сервис, который помогает вам создавать, эксплуатировать и масштабировать базы данных MySQL® в облачной инфраструктуре.

С Managed Service for MySQL® вы можете:
- создавать базы данных с необходимыми параметрами производительности;
- масштабировать вычислительные мощности и выделенный объем хранилища для баз данных по мере необходимости;
- получать журналы работы баз данных.

Managed Service for MySQL® берет на себя трудоемкие задачи администрирования инфраструктуры MySQL®:
- предоставляет мониторинг потребляемых ресурсов;
- автоматически создает резервные копии баз данных;
- обеспечивает отказоустойчивость за счет автоматического переключения на резервные реплики;
- своевременно обновляет программное обеспечение СУБД.

Вы взаимодействуете с кластером БД в Managed Service for MySQL® как с обычной базой данных в вашей локальной инфраструктуре. Благодаря этому вы можете управлять внутренними настройками БД в соответствии с требованиями вашего приложения.


#### Какую часть работы по управлению и сопровождению баз данных берет на себя Managed Service for MySQL®? {#services}

При создании кластеров Managed Service for MySQL® выделяет ресурсы, устанавливает СУБД и создает базы данных.

Для созданных и запущенных баз данных Managed Service for MySQL® автоматически создает резервные копии, а также устанавливает исправления и обновления СУБД.

Также Managed Service for MySQL® обеспечивает репликацию данных между хостами БД (как внутри, так и между [зонами доступности](../../overview/concepts/geo-scope.md)) и автоматически переключает нагрузку на резервную реплику в случае аварии.

При работе необходимо учитывать, что контролирует сервис, а что — клиент Yandex Cloud. Понимание этих зон контроля помогает эффективно использовать облачные ресурсы и избегать возможных проблем при работе с базами данных. Подробнее в разделе [Разграничение зон контроля пользователей сервисов управляемых баз данных (MDB) и Yandex Cloud](../../overview/concepts/mdb-responsibilities.md).

#### Для каких задач стоит использовать Managed Service for MySQL®, а для каких — виртуальные машины с базами данных? {#mdb-advantage}

Yandex Cloud предлагает два варианта работы с базами данных:

- Managed Service for MySQL® позволяет вам эксплуатировать шаблонные базы данных, не заботясь об администрировании.
- Виртуальные машины Yandex Compute Cloud позволяют вам создавать и настраивать собственные базы данных. Такой подход позволяет использовать любые СУБД, подключаться к базам данных по [SSH](../../glossary/ssh-keygen.md) и так далее.


#### Что такое хост базы данных и кластер базы данных? {#what-is-cluster}

_Хост БД_ — это изолированная среда базы данных в облачной инфраструктуре с выделенными вычислительными ресурсами и зарезервированным объемом хранилища данных.

_Кластер БД_ — это один или более хостов БД, между которыми можно настроить репликацию.


#### Как начать работу с Managed Service for MySQL®? {#quickstart}

Managed Service for MySQL® доступен всем зарегистрированным пользователям Yandex Cloud.

Чтобы создать кластер базы данных в Managed Service for MySQL®, необходимо определиться с его характеристиками:

- [Класс хостов](../concepts/instance-types.md) (характеристики производительности — процессоры, память и т. п.).
- Объем хранилища (резервируется в полном объеме при создании кластера).
- Сеть, к которой будет подключен ваш кластер.
- Количество хостов для кластера и зона доступности для каждого хоста вы можете выбрать зону доступности.

Подробные инструкции смотрите в разделе [Начало работы](../quickstart.md).

#### Сколько хостов БД может содержать кластер? {#how-many-hosts}


Минимальное количество хостов зависит от типа используемого [хранилища](../concepts/storage.md):

* Минимум три хоста — для следующих дисков:

   * локальные SSD-диски (`local-ssd`);
   * нереплицируемые SSD-диски (`network-ssd-nonreplicated`).

* Минимум один хост — для следующих дисков:

   * сетевые HDD-диски (`network-hdd`);
   * сетевые SSD-диски (`network-ssd`);
   * сверхбыстрые сетевые SSD-диски с тремя репликами (`network-ssd-io-m3`).


Максимальное количество хостов в кластере ограничено установленными лимитами.

Подробнее в разделе [Квоты и лимиты](../concepts/limits.md).

#### Как получить доступ к запущенному хосту базы данных? {#db-access}

Вы можете подключаться к базам данных Managed Service for MySQL® способами, стандартными для СУБД.

[Подробнее о подключении к кластерам](../operations/connect/index.md).


#### Сколько кластеров можно создать в рамках одного облака? {#db-limit}

Технические и организационные ограничения MDB приведены в разделе [Квоты и лимиты](../concepts/limits.md).


#### Как происходит обслуживание кластеров БД? {#service-window}

Под обслуживанием в Managed Service for MySQL® понимается:

- автоматическая установка обновлений и исправлений СУБД для хостов БД (в т. ч. для выключенных кластеров);
- изменение класса хостов и объема хранилища;
- другие сервисные работы Managed Service for MySQL®.

Подробнее в разделе [Техническое обслуживание](../concepts/maintenance.md).

#### Какую версию MySQL® использует Managed Service for MySQL®? {#dbms-version}

Managed Service for MySQL® поддерживает MySQL® 5.7 и MySQL® 8.


#### Что происходит, когда выпускается новая версия СУБД? {#new-version}

Программное обеспечение баз данных обновляется при выходе новых минорных версий. Владельцы затронутых кластеров БД получают предварительное оповещение о сроках проведения работ и доступности баз данных.


#### Что происходит, когда версия СУБД становится неподдерживаемой (deprecated)? {#dbms-deprecated}

Через месяц после того, как версия СУБД становится неподдерживаемой, Managed Service for MySQL® автоматически оповещает владельцев кластеров БД, созданных с этой версией, по электронной почте.

Для кластеров с неподдерживаемой версией СУБД создание новых хостов и восстановление из резервных копий становится невозможным. Через 7 дней после оповещения для минорных версий и через 1 месяц для мажорных версий проводится автоматическое обновление кластеров БД до следующей поддерживаемой версии. Обновление неподдерживаемых мажорных версий происходит даже если у вас отключено автоматическое обновление.


#### Как рассчитывается стоимость потребления для хоста базы данных? {#db-cost}

В Managed Service for MySQL® стоимость потребления рассчитывается исходя из следующих параметров:

- Выбранный класс хостов.
- Объем хранилища, зарезервированного для хоста БД.
- Объем резервных копий кластера БД. Объем резервных копий, равный объему хранилища, не тарифицируется. Хранение резервных копий сверх этого объема оплачивается по [тарифам](../pricing.md).
- Количество часов работы хоста БД. Неполные часы округляются до целого значения. Стоимость часа работы для каждого класса хостов приведена в разделе [Правила тарификации](../pricing.md).

#### Как изменить вычислительные ресурсы и объем хранилища для кластера БД? {#resources-change}

Вы можете изменять вычислительные ресурсы и объем хранилища в консоли управления — просто выберите другой класс хостов для нужного кластера.

Характеристики кластера изменяются в течение 30 минут. В этот период также могут быть включены другие сервисные работы по кластеру, например, установка обновлений.


#### Включено ли резервное копирование хостов БД по умолчанию? {#default-backup}

Да, по умолчанию резервное копирование включено. Для MySQL® выполняется полное резервное копирование один раз в сутки, и сохраняются все журналы транзакций кластера БД. Это позволяет восстановить состояние кластера на любой момент времени в пределах периода хранения резервных копий, за исключением последних 30 секунд.

По умолчанию резервные копии хранятся 7 дней.

#### Когда выполняется резервное копирование? Доступен ли кластер БД во время резервного копирования? {#backup-window}

Окно резервного копирования — это интервал времени, в течение которого выполняется ежедневное полное резервное копирование кластера БД. Окно резервного копирования — 01:00−05:00 по московскому времени.

Во время окна резервного копирования кластеры остаются полностью доступными.

#### Можно ли изменить срок хранения автоматических резервных копий? {#backup-retain-days}

При [создании](../operations/cluster-create.md) или [изменении](../operations/update.md#change-additional-settings) кластера можно задать срок хранения автоматических резервных копий.

#### За какими метриками и процессами можно следить с помощью мониторинга? {#monitoring}

Для всех типов СУБД можно отслеживать:

- загрузку процессора, памяти, сети, дисков в абсолютных величинах;
- загрузку памяти, сети, дисков в процентах от установленных лимитов для класса хостов соответствующего кластера;
- объем данных кластера БД и остаток свободного места в хранилище данных.

Для всех хостов БД можно отслеживать метрики, специфические для типа соответствующей СУБД. Например для MySQL® можно отслеживать:
- среднее время выполнения запроса;
- количество запросов в секунду;
- количество ошибок в журналах и т. д.

Мониторинг можно осуществлять с минимальной гранулярностью в 5 секунд.

#### Какой размер блока используется на дисках кластера? {#block-size}

Размер [блока](https://en.wikipedia.org/wiki/Block_(data_storage)) всех типов дисков — 4 КБ.

#### Соответствует ли сервис требованиям Федерального закона Российской Федерации № 152-ФЗ <q>О персональных данных</q>? {#fz-152}

Да, вы можете ознакомиться с полным [заключением](https://storage.yandexcloud.kz/yc-compliance/conformance_ru_pdp.pdf) по результатам аудита системы защиты.

#### Я могу получить логи моей работы в сервисах? {#logs}

Да, вы можете запросить информацию о работе с вашими ресурсами из логов сервисов Yandex Cloud. Для этого обратитесь в [техническую поддержку](https://kz.center.yandex.cloud/support).

#### Почему возникает ошибка при удалении БД? {#delete-db}

Текст ошибки:

```text
Database deletion not allowed. Fix following issues: Database has external foreign key references:
child_db.orders (FK: fk_orders_user_id) -> parent_db.users
```

Ошибка возникает, если удаляемая БД связана с другими БД в кластере.

**Решение:** проверьте, с какими БД связана удаляемая БД, и удалите эти связи.

## Вопросы о MySQL® {#mysql}

#### Какие версии MySQL® поддерживает Managed Service for MySQL®? {#supported-version}

Managed Service for MySQL® поддерживает MySQL® 5.7 и MySQL® 8.

#### Включено ли резервное копирование кластеров БД по умолчанию? {#backup}

Да, по умолчанию резервное копирование включено. Для кластеров MySQL® выполняется полное резервное копирование один раз в сутки, и сохраняются все журналы транзакций кластера БД. Это позволяет восстановить состояние кластера на любой момент времени в пределах периода хранения резервных копий, за исключением последних 30 секунд.

#### Шифруется ли соединение с кластером БД MySQL®? {#encryption}

Соединение между кластером БД и приложением всегда шифруется с использованием SSL. Отключить шифрование соединений с кластером нельзя.

#### Что такое реплика для чтения в MySQL®? {#read-only-instance}

Реплика для чтения — это доступный только для чтения хост в кластере БД MySQL®, данные на котором синхронизируются с хостом-мастером (если в кластере работает более 1 хоста). Вы можете использовать реплику для чтения для снижения нагрузки на мастер в базах данных с большим объемом запросов на чтение.

#### Какие ограничения накладываются на кластеры БД MySQL®? {#instance-limitations}

Подробнее об ограничениях Managed Service for MySQL® смотрите раздел [Квоты и лимиты](../concepts/limits.md). В разделе [Классы хостов](../concepts/instance-types.md) приведены характеристики кластеров, которые можно создать с помощью Managed Service for MySQL®.

#### Почему кластер работает медленно, хотя вычислительные ресурсы использованы не до предела? {#throttling}

Вероятно, максимальные значения [IOPS и пропускной способности (bandwidth)](../../compute/concepts/storage-read-write.md) хранилища недостаточны для обработки текущего количества запросов. В этом случае срабатывает [троттлинг](../../compute/concepts/storage-read-write.md#throttling) и быстродействие всего кластера падает.

Максимальные IOPS и bandwidth прирастают на фиксированную величину при увеличении размера хранилища на определенный шаг. Шаг и прирост зависят от типа дисков:

| Тип дисков                  | Шаг, ГБ | Прирост макс. IOPS (чтение/запись) | Прирост макс. bandwidth (чтение/запись), МБ/с |
|-----------------------------|---------|------------------------------------|-----------------------------------------------|
| `network-hdd`               | 256     | 300/300                            | 30/30                                         |
| `network-ssd`               | 32      | 1000/1000                          | 15/15                                         |
| `network-ssd-nonreplicated`, `network-ssd-io-m3` | 93      | 28000/5600                         | 110/82                                        |

Чтобы увеличить максимальные значения IOPS и bandwidth и снизить вероятность троттлинга, расширьте размер хранилища при [изменении кластера](../operations/update.md#change-disk-size).

Если вы используете хранилище с типом диска `network-hdd`, рассмотрите возможность перехода на `network-ssd` или `network-ssd-nonreplicated` путем [восстановления кластера](../operations/cluster-backups.md#restore) из резервной копии.

## Подключение {#connection}

#### Как подключиться к кластеру? {#how-to-connect}

Посмотрите примеры подключения в [документации](../operations/connect/index.md#connection-string) или на странице кластера в [консоли управления](https://kz.console.yandex.cloud) (нажмите кнопку **Подключиться** на панели сверху).

Хосты MySQL® с публичным доступом поддерживают только соединения с [SSL-сертификатом](../operations/connect/index.md#get-ssl-cert).

Существуют также особые FQDN, указывающие на [текущий мастер](../operations/connect/fqdn.md#fqdn-master) и [наименее отстающую реплику](../operations/connect/fqdn.md#fqdn-replica) кластера.

#### Почему не получается подключиться из интернета? {#from-internet}

Проверьте, имеет ли хост публичный доступ. Для этого в [консоли управления](https://kz.console.yandex.cloud):
1. Перейдите на страницу каталога и выберите сервис **Managed Service for&nbsp;MySQL**.
1. Нажмите на имя нужного кластера, затем выберите вкладку **Хосты**.
1. Посмотрите значение в столбце **Публичный доступ** у нужного хоста.

MySQL®-хосты с публичным доступом поддерживают только соединения с [SSL-сертификатом](../operations/connect/index.md#get-ssl-cert).

Дополнительно:
* Если публичный доступ в вашем кластере настроен только для некоторых хостов, автоматическая смена мастера может привести к тому, что вы не сможете подключиться к мастеру из интернета.
* Если вы используете [особые FQDN](../operations/connect/fqdn.md#fqdn-master), проверьте в списке хостов, что текущий мастер или реплика имеют публичный доступ.
* Если вы используете [Группы безопасности](../concepts/network.md#security-groups), проверьте их [настройки](../operations/connect/index.md#configure-security-groups).

#### Почему не получается подключиться из Yandex Cloud? {#from-yc}

Проверьте, что вы подключаетесь с виртуальной машины Yandex Cloud, расположенной в той же виртуальной сети, что и кластер MySQL®.

Для этого в консоли управления:
1. Перейдите на страницу каталога, выберите сервис **Managed Service for&nbsp;MySQL** и нажмите на имя нужного кластера.
1. Проверьте значение параметра **Облачная сеть** и перейдите по ссылке названия сети, чтобы посмотреть ее подсети.
1. Убедитесь, что виртуальная машина расположена в одной из подсетей той же сети.

Дополнительно:
* Если вы подключаетесь к хосту с публичным доступом, то соединение возможно только с [SSL-сертификатом](../operations/connect/index.md#get-ssl-cert).
* Если вы используете [особые FQDN](../operations/connect/fqdn.md#fqdn-master), проверьте в списке хостов, что текущий мастер или реплика имеют публичный доступ.
* Если вы используете [Группы безопасности](../concepts/network.md#security-groups), проверьте их настройки.

#### Почему не получается подключиться к многохостовому кластеру? {#to-multi-host-cluster}

Если публичный доступ в вашем кластере настроен только для некоторых хостов, автоматическая смена мастера может привести к тому, что вы не сможете подключиться к мастеру из интернета.

Проверьте, имеет ли хост публичный доступ. Для этого в [консоли управления](https://kz.console.yandex.cloud):
1. Перейдите на страницу каталога и выберите сервис **Managed Service for&nbsp;MySQL**.
1. Нажмите на имя нужного кластера, затем выберите вкладку **Хосты**.
1. Посмотрите значение в столбце **Публичный доступ** у нужного хоста.

Дополнительно:

* Если вы используете [особые FQDN](../operations/connect/fqdn.md#fqdn-master), проверьте в списке хостов, что текущий мастер или реплика имеют публичный доступ.


* Если после добавления хоста к нему невозможно подключиться, убедитесь, что [группа безопасности](../concepts/network.md#security-groups) кластера настроена корректно для подсети, в которую помещен хост.


#### Можно ли подключиться к хостам кластера по SSH или получить на хостах права суперпользователя? {#connect-ssh}

Подключиться к хостам через SSH не получится. Это сделано в целях безопасности и отказоустойчивости пользовательских кластеров, так как прямые изменения внутри хоста могут привести к его полной неработоспособности.

#### Что делать, если при получении SSL-сертификата через PowerShell возникает ошибка проверки отзыва? {#get-ssl-error}

Полный текст ошибки:

```text
curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012)
The revocation function was unable to check revocation for the certificate
```
Это означает, что при подключении к веб-сайту не удалось проверить, есть ли его сертификат в списке отозванных.

Чтобы исправить ошибку:

* убедитесь, что проверку не блокируют настройки корпоративной сети;
* выполните команду с параметром `--ssl-no-revoke`.

   ```powershell
   mkdir $HOME\.mysql; curl.exe --ssl-no-revoke -o $HOME\.mysql\root.crt https://storage.yandexcloud.kz/cloud-certs/CA.pem
   ```

#### Почему может быть превышен лимит соединений? {#connection-limit}

Максимальное количество одновременных подключений к хосту кластера Managed Service for MySQL® задается параметром `max_connections` и по умолчанию равно величине `<количество_МБ_RAM_на_одном_хосте> ÷ 32`, но не менее 100.

Например, для хоста класса s1.micro (2 vCPU, 8 ГБ) значение параметра `max_connections` по умолчанию равно 8192 ÷ 32 = 256.

Вы можете [изменить](../operations/update.md#change-mysql-config) значение **Max connections** в настройках кластера.

## Проблемы с чтением/записью в кластер {#read-write}

#### Почему не работает запись в кластер? {#write-failure}

1. Если хранилище баз данных заполнится на 95%, кластер перейдет в режим **Только чтение**. Проверьте свободное место в хранилище и при необходимости увеличьте его размер. Чтобы проверить свободное место:
   1. Перейдите на страницу каталога и выберите сервис **Managed Service for&nbsp;MySQL**.
   1. Нажмите на имя нужного кластера и перейдите на вкладку **Мониторинг**.
   1. Проверьте график **Disk usage**.
1. Убедитесь, что запись производится в хост, который является мастером, а не [репликой](mysql.md#read-only-instance).

#### Почему отстает реплика? {#replica-lagging}

1. Проверьте, установлено ли параметру `slave_rows_search_algorithms` значение `INDEX_SCAN,HASH_SCAN`.
1. Вместо выполнения операции `ALTER TABLE` над объемными таблицами рекомендуется использовать утилиту `pt-online-schema-change` из пакета Percona Toolkit — это обеспечит отсутствие блокировок.
1. Если отставание сохраняется, включите параллельную репликацию. Для этого настройте параметры:
   ```text
   slave_parallel_type=LOGICAL_CLOCK
   slave_parallel_workers=8
   ```
1. Выполните на реплике команду `SHOW SLAVE STATUS;`. Если значение параметра `Executed_Gtid_Set` долго не меняется, убедитесь, что во всех таблицах присутствуют индексы.
1. Если данные пишутся в БД непрерывно и при этом объем оперативной памяти на хосте 8 ГБ или больше, рекомендуется увеличить значение параметра `innodb_log_file_size` до 1-2 ГБ (изменение параметра происходит с рестартом сервера).

#### Почему размер кластера значительно больше объема данных в нем? {#cluster-greater-data}

Это происходит в силу особенностей хранения данных самой СУБД MySQL®, а не сервиса Managed Service for MySQL® в Yandex Cloud. Факторы, влияющие на занимаемое место в хранилище:
* фрагментация;
* коэффициент заполнения индекса (fill factor);
* хранение старых версий строк (rollback segment);
* упаковка типов.

Чтобы узнать фактический объем таблиц в базе, обратитесь к системной таблице `INNODB_SYS_TABLESPACES`. Подробнее в статье [Finding MySQL Table Size on Disk](https://www.percona.com/blog/2016/01/26/finding_mysql_table_size_on_disk).

#### Что делать при возникновении любой ошибки приложения? {#application-error}

1. Проверьте, есть ли свободное место на диске, где располагается кластер:
   1. Перейдите на страницу каталога и выберите сервис **Managed Service for&nbsp;MySQL**.
   1. Нажмите на имя нужного кластера и перейдите на вкладку **Мониторинг**.
   1. Проверьте график **Disk usage**.
1. Проверьте графики мониторинга хостов:
   1. Перейдите на страницу каталога и выберите сервис **Managed Service for&nbsp;MySQL**.
   1. Нажмите на имя нужного кластера, затем выберите вкладку **Хосты**.
   1. Перейдите на страницу **Мониторинги**.
   1. Найдите проблемный ресурс: график будет приближаться к границе или выйдет за нее.
   1. Выберите другие хосты из выпадающего списка и проверьте их тоже.
1. Проверьте наличие свободных ресурсов на виртуальной машине или сервере, где запущено приложение, подключаемое к БД.

## Проблемы с производительностью {#performance}

#### Как выяснить причину снижения производительности в пиках нагрузки? {#degradation-at-peak}

Просмотрите лог медленных запросов:
1. В [настройках кластера MySQL®](../operations/update.md#change-mysql-config) установите значение **Long query time** больше нуля.
1. В [консоли управления](https://kz.console.yandex.cloud) на странице кластера выберите вкладку **Логи**.
1. В левом верхнем углу выберите из выпадающего списка `MYSQL_SLOW_QUERY`.

#### Как выяснить причину общего снижения производительности? {#general-degradation}

Проверьте графики мониторинга хостов:
1. Перейдите на страницу каталога и выберите сервис **Managed Service for&nbsp;MySQL**.
1. Нажмите на имя нужного кластера, затем выберите вкладку **Хосты**.
1. Перейдите на страницу **Мониторинги**:
   * Рекомендуется увеличить класс хостов:
      * При стабильно высоком значении `Steal` графика **CPU usage**.
      * При стабильно низком значении `Free` графика **Memory usage**.
   * При высоком значении `iowait` графика **CPU usage** возможно превышение лимитов IOPS дискового хранилища. Рекомендуется увеличить значение как минимум до следующего порога [блока размещения](../../compute/concepts/limits.md#compute-limits-disks) или использовать более быстрые диски. Подробнее о лимитах и производительности дисков смотрите в [документации Yandex Compute Cloud](../../compute/concepts/disk.md).

#### Почему отстает реплика? {#replica-lagging}

1. Проверьте, установлено ли параметру `slave_rows_search_algorithms` значение `INDEX_SCAN,HASH_SCAN`.
1. Вместо выполнения операции `ALTER TABLE` над объемными таблицами рекомендуется использовать утилиту `pt-online-schema-change` из пакета Percona Toolkit — это обеспечит отсутствие блокировок.
1. Если отставание сохраняется, включите параллельную репликацию. Для этого настройте параметры:
   ```text
   slave_parallel_type=LOGICAL_CLOCK
   slave_parallel_workers=8
   ```
1. Выполните на реплике команду `SHOW SLAVE STATUS;`. Если значение параметра `Executed_Gtid_Set` долго не меняется, убедитесь, что во всех таблицах присутствуют индексы.
1. Если данные пишутся в БД непрерывно и при этом объем оперативной памяти на хосте 8 ГБ или больше, рекомендуется увеличить значение параметра `innodb_log_file_size` до 1-2 ГБ (изменение параметра происходит с рестартом сервера).

#### Как выяснить причину долгой загрузки ресурсов? {#long-load}

Проверьте графики мониторинга хостов:
1. Перейдите на страницу каталога и выберите сервис **Managed Service for&nbsp;MySQL**.
1. Нажмите на имя нужного кластера, затем выберите вкладку **Хосты**.
1. Перейдите на страницу **Мониторинги**.
1. Найдите проблемный ресурс: график будет приближаться к границе или выйдет за нее.
1. Выберите другие хосты из выпадающего списка и проверьте их тоже.

Если по графикам ресурсы кластера не перегружены, воспользуйтесь рекомендациями из разделов [Причины блокировок](#locks) и [Оптимизация запросов](#query-optimization).

#### Как выяснить причину утилизации ресурса CPU? {#high-cpu}

Информацию о потреблении ресурса CPU можно получить с помощью системных представлений. Для доступа к ним потребуется [административная привилегия](../concepts/settings-list.md#setting-administrative-privileges) `PROCESS` уровня кластера.

1. Выдайте пользователю привилегию `PROCESS`, выполнив команду [CLI](../../cli/index.md):

   ```bash
   yc managed-mysql user update \
       --global-permissions PROCESS <имя_пользователя> \
       --cluster-id <идентификатор_кластера>
   ```

1. Получите список запросов в базу с наибольшим временем выполнения с помощью запроса:

   ```sql
   SELECT * FROM sys.statement_analysis LIMIT 10;
   ```

Обратите внимание на запросы с высокими значениями `rows_examined`, `rows_sorted` или флагом `full_scan` — с большой вероятностью именно они потребляют ресурсы CPU. Подробнее в [документации MySQL®](https://dev.mysql.com/doc/mysql-em-plugin/en/myoem-metric-sysschema-statementanalysis-category.html).

#### Как выяснить причину утилизации ресурса IO? {#high-io}

Приблизительную информацию о потреблении ресурса IO потоками в MySQL® можно получить с помощью системных представлений. Для доступа к ним потребуется [административная привилегия](../concepts/settings-list.md#setting-administrative-privileges) `PROCESS` уровня кластера.

1. Выдайте пользователю привилегию `PROCESS`, выполнив команду [CLI](../../cli/index.md):

   ```bash
   yc managed-mysql user update \
       --global-permissions PROCESS <имя_пользователя> \
       --cluster-id <идентификатор_кластера>
   ```

1. Получите список потоков с помощью запроса:

   ```sql
   SELECT   t.name             AS thread_name,
            t.processlist_user AS user,
            t.processlist_info AS query,
            t.processlist_time AS time,
            io.bytes           AS bytes
   FROM     performance_schema.threads t
   JOIN
            (
                     SELECT   thread_id,
                              sum(number_of_bytes) AS bytes
                     FROM     performance_schema.events_waits_history_long
                     WHERE    object_type='FILE'
                     GROUP BY thread_id) io
   ON       t.thread_id = io.thread_id
   ORDER BY io.bytes DESC;
   ```

Как правило, выше в таблице находятся потоки, обслуживающие буферный пул и репликацию. Такое состояние является нормой.

#### Как выяснить причину утилизации ресурса сети? {#high-network}

Повышенную нагрузку на сеть могут вызывать: `SELECT`, возвращающий большое число записей, `INSERT` больших объемов данных или `UPDATE`, изменяющий множество строк. В случае записи изменения будут реплицироваться на хосты-реплики, что вызовет дополнительный трафик.

Приблизительную информацию о потреблении ресурса сети потоками в MySQL® можно получить с помощью системных представлений. Для доступа к ним потребуется [административная привилегия](../concepts/settings-list.md#setting-administrative-privileges) `PROCESS` уровня кластера.

1. Выдайте пользователю привилегию `PROCESS`, выполнив команду [CLI](../../cli/index.md):

   ```bash
   yc managed-mysql user update \
       --global-permissions PROCESS <имя_пользователя> \
       --cluster-id <идентификатор_кластера>
   ```

1. Получите список потоков с помощью запроса:

   ```sql
   SELECT   t.name                       AS thread_name,
            t.processlist_user           AS user,
            t.processlist_info           AS query,
            t.processlist_time           AS time,
            net.bytes/t.processlist_time AS avg_bytes,
            net.bytes                    AS total_bytes
   FROM     performance_schema.threads t
   JOIN
            (
                     SELECT   thread_id,
                              Sum(variable_value) bytes
                     FROM     performance_schema.status_by_thread
                     WHERE    variable_name IN ('Bytes_sent',
                                                'Bytes_received')
                     GROUP BY thread_id ) net
   ON       t.thread_id = net.thread_id
   WHERE    t.processlist_time IS NOT NULL
   ORDER BY net.bytes DESC;
   ```

   Этот запрос возвращает статистику с момента запуска потоков, поэтому долгоживущие соединения (например, репликация) будут в нем выше.

#### Как выяснить причины блокировок? {#locks}

Если ресурсы кластера не перегружены, но запросы все равно выполняются долго, запросите информацию об ожиданиях блокировок с помощью системных представлений. Для доступа к ним потребуется [административная привилегия](../concepts/settings-list.md#setting-administrative-privileges) `PROCESS` уровня кластера.

1. Выдайте пользователю привилегию `PROCESS`, выполнив команду [CLI](../../cli/index.md):

   ```bash
   yc managed-mysql user update \
       --global-permissions PROCESS <имя_пользователя> \
       --cluster-id <идентификатор_кластера>
   ```

1. Для просмотра блокировок уровня таблиц выполните запрос:

   ```sql
   SELECT * FROM sys.schema_table_lock_waits
   ```

1. Для просмотра блокировок уровня отдельных строк выполните запрос:

   ```sql
   SELECT * FROM sys.innodb_lock_waits
   ```

Подробнее в [документации MySQL®](https://dev.mysql.com/doc/refman/8.0/en/sys-schema-table-lock-waits.html).

#### Как оптимизировать проблемные запросы? {#query-optimization}

Обратитесь к официальной документации MySQL®:

* [Использование операции `EXPLAIN`](https://dev.mysql.com/doc/refman/5.7/en/using-explain.html).
* [Оптимизация запросов](https://dev.mysql.com/doc/refman/5.7/en/statement-optimization.html).
* [Оптимизация таблиц](https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb.html).

## Изменение кластера {#updating}

#### Можно ли управлять кластером с помощью команд SQL? {#sql-control}

Существуют ограничения на управление кластером с помощью команд SQL. Подробнее в разделе [Ограничения для команд SQL](../concepts/sql-limits.md).

#### Как уменьшить размер диска? {#reduce-size}

Уменьшить размер хранилища кластера невозможно.

Вы можете [создать](../operations/cluster-create.md) новый кластер с хранилищем меньшего размера и [перенести](../tutorials/data-migration/index.md) в него данные.

#### Как увеличить размера диска? {#increase-size}

Увеличение размера недоступно для [хранилища](../concepts/storage.md) на нереплицируемых SSD-дисках: воспользуйтесь инструкцией в разделе [Изменение кластера](../operations/update.md#change-disk-size).

Чтобы увеличить размер хранилища на нереплицируемых SSD-дисках, [восстановите кластер из резервной копии](../operations/cluster-backups.md#restore) и задайте нужный размер.

Тип диска можно проверить в [консоли управления](https://kz.console.yandex.cloud). Для этого на странице кластера в блоке **Ресурсы** найдите параметр **Хранилище**.


#### Как изменить тип диска? {#modify-type}

Чтобы изменить тип диска, [восстановите](../operations/cluster-backups.md#restore) кластер из резервной копии.

#### Почему не добавляется/не удаляется хост? {#not-add-delete}

Количество хостов в кластерах ограничено [квотами](../concepts/limits.md#mmy-quotas). Перед добавлением хоста проверьте используемые ресурсы: откройте страницу [Квоты](https://kz.console.yandex.cloud/cloud?section=quotas) и найдите блок **Managed Databases**.

Удалить хост можно при условии, что он не является единственным хостом в кластере. Чтобы заменить единственный хост, сначала создайте новый хост, затем удалите старый.

В кластерах с локальным типом диска настроена отказоустойчивая конфигурация из 3 хостов. Меньшее количество хостов недопустимо.

#### Как переключить мастер (manual failover)? {#manual-failover}

В отказоустойчивом кластере из нескольких хостов вы можете переключить роль мастера с текущего хоста-мастера на хост-реплику. После этой операции текущий хост-мастер станет хостом-репликой для нового мастера.

{% list tabs group=instructions %}

- Консоль управления {#console}

   1. Перейдите на страницу кластера и выберите вкладку **Хосты**.
   1. Нажмите **Переключить мастер**.

- CLI {#cli}

   Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

   По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

   Чтобы переключить мастер:

   1. Посмотрите описание команды CLI для переключения мастера:

      ```bash
      yc managed-mysql cluster start-failover --help
      ```

   1.  Выполните команду `yc managed-mysql cluster start-failover`.

{% endlist %}

#### Как перезагрузить хост? {#host-reboot}

Перезагрузить отдельный хост кластера невозможно. Для перезагрузки хостов [остановите и запустите кластер](../operations/cluster-stop.md).

#### Почему возникает ошибка при остановке кластера? {#stop-cluster-error}

Текст ошибки:

```text
cluster has no backups. If you want to stop the cluster, make a backup
```

Ошибка возникает из-за того, что остановить кластер Managed Service for MySQL® можно только при наличии хотя бы одной резервной копии кластера.

**Решение:** дождитесь создания автоматической резервной копии или [создайте резервную копию вручную](../operations/cluster-backups.md#create-backup).

## Мониторинг и логи {#monitoring-logs}

#### Как посмотреть графики кластера и хостов? {#charts}

В [консоли управления](https://kz.console.yandex.cloud) перейдите на страницу кластера. Чтобы просмотреть [графики кластера](../operations/monitoring.md#monitoring-cluster), перейдите в раздел **Мониторинг**. Для [графиков отдельных хостов](../operations/monitoring.md#monitoring-hosts) перейдите в раздел **Хосты** → **Мониторинги**.

Чтобы посмотреть графики в сервисе [Yandex Monitoring](https://kz.monitoring.yandex.cloud), на главной странице выберите сервисный дашборд **Managed Service for&nbsp;MySQL**. Для просмотра отдельных метрик перейдите в раздел **Метрики** и задайте параметру `service` значение **Managed Service for MySQL**.

#### Как посмотреть логи? {#logs}

{% list tabs group=instructions %}

- Консоль управления {#console}

   1. Перейдите на страницу кластера и выберите вкладку **Логи**.
   1. В верхней части страницы выберите один из доступных логов:
      * `MYSQL_ERROR` — основной лог MySQL®, содержит сообщения об ошибках. Включен всегда.
      * `MYSQL_SLOW_QUERY` — информация о медленных запросах. Включен, если параметр `long_query_time` больше `0`.
      * `MYSQL_AUDIT` — информация о подключениях к базе данных.
      * `MYSQL_GENERAL` — полный список всех запросов. Рекомендуется включать только для отладки кластеров в среде разработки.

- CLI {#cli}

   Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

   По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

   1. Посмотрите описание команды CLI для просмотра логов:

      ```bash
      yc managed-mysql cluster list-logs --help
      ```

   1.  Выполните команду `yc managed-mysql cluster cluster list-logs`.

{% endlist %}

#### Как долго хранятся логи? {#log-keeping}

Логи кластера хранятся 45 дней.

#### Как посмотреть текущие запросы? {#current-queries}

Чтобы посмотреть запросы текущего пользователя, выполните запрос:

```sql
SHOW PROCESSLIST;
```

Подробное описание результата смотрите в [документации MySQL®](https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html).

#### Какая еще диагностика доступна? {#trouble-info}

Пользователь с [привилегией](../concepts/settings-list.md#setting-administrative-privileges) `PROCESS` уровня кластера может выполнять запросы:
* `SHOW FULL PROCESSLIST;`
* `SHOW ENGINE INNODB STATUS;`
* `SELECT` из системных схем `performance_schema` и `sys`.

Чтобы выдать привилегию `PROCESS`, выполните команду [CLI](../../cli/index.md):

```bash
yc managed-mysql user update \
    --global-permissions PROCESS <имя_пользователя> \
    --cluster-id <идентификатор_кластера>
```


#### Как настроить алерты? {#alerts}

Используйте сервис [Yandex Monitoring](https://kz.monitoring.yandex.cloud), инструкция по настройке в разделе [Создание алерта](../../monitoring/operations/alert/create-alert.md).

При выборе метрики задайте параметру `service` значение **Managed Service for MySQL**.


#### Как настроить алерт, который срабатывает при заполнении определенного процента дискового пространства? {#disk-space-percentage}

[Создайте алерт](../operations/monitoring.md#monitoring-integration) с метрикой `disk.used_bytes` в сервисе Yandex Monitoring. Метрика показывает размер использованного дискового пространства в кластере Managed Service for MySQL®.

Для `disk.used_bytes` используются пороги для оповещения. Их рекомендуемые значения:

* `Alarm` — 90% дискового пространства.
* `Warning` — 80% дискового пространства.

Значения порогов задаются только в байтах. Например, рекомендуемые значения для диска размером в 100 ГБ:

* `Alarm` — `96636764160` байтов (90%).
* `Warning` — `85899345920` байтов (80%).

## Миграция/перенос {#migration}

#### Как перенести данные в кластер? {#to-cluster}

Воспользуйтесь инструкцией в разделе [Миграция базы данных из стороннего кластера MySQL®](../tutorials/data-migration/index.md).

#### Как перенести кластер в другой каталог или облако? {#to-folder-cloud}

Чтобы перенести кластер:
* В другой каталог — [восстановите кластер из резервной копии](../operations/cluster-backups.md#restore). При задании параметров нового кластера укажите нужный каталог.
* В другое облако — воспользуйтесь инструкцией в разделе [Миграция базы данных из стороннего кластера MySQL®](../tutorials/data-migration/index.md).

#### Ошибка при внешней репликации {#external-replication-error}

Текст ошибки:

```text
Last\_IO\_Error: 
Got fatal error 1236 from source when reading data from binary log: 
'Could not find first log file name in binary log index file'
```

Ошибка может возникать в ходе внешней репликации с использованием [особого FQDN хоста-мастера](../operations/connect/fqdn.md#fqdn-master), если в кластере-источнике сменился хост-мастер.

**Решение:**

1. Запустите репликацию повторно.
1. Однократно выполните команду:

   ```sql
   STOP SLAVE;
   CHANGE MASTER TO MASTER_AUTO_POSITION = 1;
   START SLAVE;
   ```

При смене мастера в кластере-источнике репликация будет перенастроена на новый хост-мастер. Подробнее о настройке смотрите в [документации MySQL®](https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html).

## Настройки параметров MySQL® {#configuring}

#### Как задать часовой пояс (time zone)? {#time-zone}

Часовой пояс задается в виде смещения от UTC. Например, для Москвы: `'+03:00'`. Названия часовых поясов не поддерживаются.

Подробнее в [документации MySQL®](https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html#time-zone-variables).

#### Как установить режим SQL (sql_mode)? {#sql-mode}

Воспользуйтесь инструкцией в разделе [Управление базами данных](../operations/databases.md#sql-mode).

#### Какое значение установить для innodb_buffer_pool_size? {#innodb-buffer-pool-size}

Рекомендуемые границы для параметра:
* Минимум — 25% от объема RAM на хосте.
* Максимум — 75% от объема RAM на хосте при условии, что остается не менее 1–1,6 ГБ свободной памяти для выполнения запросов, мониторинга и системных процессов.

#### Как отключить строгий режим Innodb? {#innodb-strict-mode}

По умолчанию [строгий режим Innodb](../concepts/settings-list.md#setting-strict-mode) включен. Если отключать режим средствами MySQL®, возникнет ошибка:

```text
Mysql query error: (1227) Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation (400)
```

Чтобы отключить строгий режим, измените значение параметра `innodb_strict_mode` с помощью [интерфейсов Yandex Cloud](../operations/update.md#change-mysql-config). Также убедитесь, что в вашей конфигурации не осталось команды, отключающей строгий режим, например `$connection–>queryExecute("SET innodb_strict_mode=0");`.

#### Как изменить набор символов и правила их сравнения (CHARACTER SET, COLLATE)? {#character-collate}

Воспользуйтесь инструкцией в разделе [Управление базами данных](../operations/databases.md#charset-collate).

#### Как настроить другие параметры? {#params}

Настройки MySQL®, доступные для изменения, перечислены в [документации](../concepts/settings-list.md). Изменить их значения можно в одном из доступных интерфейсов: консоль управления, CLI, API или Terraform. Для этого воспользуйтесь инструкцией в разделе [Изменение кластера](../operations/update.md#change-mysql-config).