---
title: "Создать кластер MySQL semi-sync через Terraform"
sidebar_label: "Создать кластер MySQL semi-sync"
description: "Как создать кластер MySQL semi-sync с базой данных"
sidebar_position: 4
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import ConfigureProviders from '@site/terraform/_partials/common/configure-providers.mdx'
import ConfigureProvidersConfig from '@site/terraform/_partials/common/configure-providers-config.mdx'
import CreateRouter from '@site/terraform/_partials/cloud-networks/create-router.mdx'
import CreateNetworks from '@site/terraform/_partials/cloud-networks/create-networks.mdx'
import CreateResourcesAlert from '@site/terraform/_partials/common/create-resources-alert.mdx'
import CreateDatabaseMySQL from '@site/terraform/_partials/managed-databases/create-database-mysql.mdx'
import CreateUserMySQL from '@site/terraform/_partials/managed-databases/create-user-mysql.mdx'
import GrantAccessMySQL from '@site/terraform/_partials/managed-databases/grant-access-mysql.mdx'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'

# Создать кластер MySQL semi-sync через Terraform

<CreateResourcesAlert />

<br />

1. Опционально: [настройте провайдеры](#configure-providers).
2. [Создайте приватную сеть и подсеть](#create-networks).
3. [Создайте кластер](#create-cluster).
4. [Создайте пользователя](#create-user).
5. [Создайте базу данных](#create-database).
6. [Выдайте пользователю доступ к базе данных](#grant-access).

## Конфигурационные файлы \{#config}

<details>
  <summary>Пример файла для настройки провайдеров</summary>

  <ConfigureProvidersConfig />
</details>

<details>
  <summary>Пример файла для создания кластера MySQL semi-sync фиксированной конфигурации</summary>

  ```hcl
  resource "openstack_networking_network_v2" "network_1" {
    name           = "private-network"
    admin_state_up = "true"
  }

  resource "openstack_networking_subnet_v2" "subnet_1" {
    network_id = openstack_networking_network_v2.network_1.id
    cidr       = "192.168.199.0/24"
  }

  data "selectel_dbaas_datastore_type_v1" "datastore_type_1" {
    project_id = selectel_vpc_project_v2.project_1.id
    region     = "ru-9"
    filter {
      engine  = "mysql_native"
      version = "8"
    }
  }

  data "selectel_dbaas_flavor_v1" "flavor_1" {
  project_id = selectel_vpc_project_v2.project_1.id
  region     = "ru-9"
  filter {
    datastore_type_id = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
    fl_size           = "standard"
    vcpus             = 4
    ram               = 16384
    disk              = 128
    }
  }

  resource "selectel_dbaas_mysql_datastore_v1" "datastore_1" {
    name       = "datastore-1"
    project_id = selectel_vpc_project_v2.project_1.id
    region     = "ru-9"
    type_id    = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
    subnet_id  = openstack_networking_subnet_v2.subnet_1.id
    node_count = 3
    flavor_id  = data.selectel_dbaas_flavor_v1.flavor_1.flavors[0].id
  }

  resource "selectel_dbaas_user_v1" "user_1" {
    project_id   = selectel_vpc_project_v2.project_1.id
    region       = "ru-9"
    datastore_id = selectel_dbaas_mysql_datastore_v1.datastore_1.id
    name         = "user"
    password     = "secret"
  }

  resource "selectel_dbaas_mysql_database_v1" "database_1" {
    project_id   = selectel_vpc_project_v2.project_1.id
    region       = "ru-9"
    datastore_id = selectel_dbaas_mysql_datastore_v1.datastore_1.id
    name         = "database_1"
  }

  resource "selectel_dbaas_grant_v1" "grant_1" {
    project_id   = selectel_vpc_project_v2.project_1.id
    region       = "ru-9"
    datastore_id = selectel_dbaas_mysql_datastore_v1.datastore_1.id
    database_id  = selectel_dbaas_mysql_database_v1.database_1.id
    user_id      = selectel_dbaas_user_v1.user_1.id
  }

  ```
</details>

<details>
  <summary>Пример файла для создания кластера MySQL semi-sync произвольной конфигурации</summary>

  ```hcl
  resource "openstack_networking_network_v2" "network_1" {
    name           = "private-network"
    admin_state_up = "true"
  }

  resource "openstack_networking_subnet_v2" "subnet_1" {
    network_id = openstack_networking_network_v2.network_1.id
    cidr       = "192.168.199.0/24"
  }

  data "selectel_dbaas_datastore_type_v1" "datastore_type_1" {
    project_id = selectel_vpc_project_v2.project_1.id
    region     = "ru-9"
    filter {
      engine  = "mysql_native"
      version = "8"
    }
  }

  resource "selectel_dbaas_mysql_datastore_v1" "datastore_1" {
    name       = "datastore-1"
    project_id = selectel_vpc_project_v2.project_1.id
    region     = "ru-9"
    type_id    = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
    subnet_id  = openstack_networking_subnet_v2.subnet_1.id
    node_count = 3
    flavor {
      vcpus = 1
      ram   = 4096
      disk  = 32
    }
  }

  resource "selectel_dbaas_user_v1" "user_1" {
    project_id   = selectel_vpc_project_v2.project_1.id
    region       = "ru-9"
    datastore_id = selectel_dbaas_mysql_datastore_v1.datastore_1.id
    name         = "user"
    password     = "secret"
  }

  resource "selectel_dbaas_mysql_database_v1" "database_1" {
    project_id   = selectel_vpc_project_v2.project_1.id
    region       = "ru-9"
    datastore_id = selectel_dbaas_mysql_datastore_v1.datastore_1.id
    name         = "database_1"
  }

  resource "selectel_dbaas_grant_v1" "grant_1" {
    project_id   = selectel_vpc_project_v2.project_1.id
    region       = "ru-9"
    datastore_id = selectel_dbaas_mysql_datastore_v1.datastore_1.id
    database_id  = selectel_dbaas_mysql_database_v1.database_1.id
    user_id      = selectel_dbaas_user_v1.user_1.id
  }

  ```
</details>

## 1. Опционально: настроить провайдеры \{#configure-providers}

Если вы [настроили провайдеры](/terraform/configure-terraform-environment/#configure-providers) Selectel и OpenStack, пропустите этот шаг.

<ConfigureProviders />

## 2. Создать приватную сеть и подсеть \{#create-networks}

<CreateNetworks />

## 3. Создать кластер \{#create-cluster}

<Tabs queryString="create-cluster">
  <TabItem value="fixed" default>
    <TabItemLabel>
      Фиксированная конфигурация
    </TabItemLabel>

    ```hcl
    data "selectel_dbaas_datastore_type_v1" "datastore_type_1" {
      project_id = selectel_vpc_project_v2.project_1.id
      region     = "ru-9"
      filter {
        engine  = "mysql_native"
        version = "8"
      }
    }

    data "selectel_dbaas_flavor_v1" "flavor_1" {
      project_id = selectel_vpc_project_v2.project_1.id
      region     = "ru-9"
      filter {
        datastore_type_id = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
        fl_size           = "standard"
        vcpus             = 4
        ram               = 16384
        disk              = 128
        }
      }


    resource "selectel_dbaas_mysql_datastore_v1" "datastore_1" {
      name       = "datastore-1"
      project_id = selectel_vpc_project_v2.project_1.id
      region     = "ru-9"
      type_id    = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
      subnet_id  = openstack_networking_subnet_v2.subnet_1.id
      node_count = 3
      flavor_id  = data.selectel_dbaas_flavor_v1.flavor_1.flavors[0].id
    }
    ```

    Здесь:

    * `region` — пул, например `ru-9`. Список доступных пулов можно посмотреть в инструкции [Доступность продуктов в локациях](/infrastructure/product-availability-by-location/#managed-databases);
    * `filter` — фильтр типов облачных баз данных:
      * `engine` — тип облачных баз данных. Для кластера MySQL semi-sync укажите `mysql_native`;
      * `version` — версия облачной базы данных. Список доступных версий можно посмотреть в инструкции [Версии и конфигурации](/managed-databases/mysql-semi-sync/configurations/);
    * `nodes_count` — количество нод. Максимальное количество нод — 3;
    * `filter` — фильтр фиксированных конфигураций кластера. Список доступных конфигураций можно посмотреть в инструкции [Версии и конфигурации](/managed-databases/mysql-semi-sync/configurations/);
      * `fl_size` — [линейка фиксированных конфигураций](/managed-databases/mysql-semi-sync/configurations/). Доступные значения — `standard` (для линеек Standard, CPU и Memory) и `high_freq` (для линейки HighFreq);
      * `vcpus` — количество vCPU;
      * `ram` — количество RAM в МБ;
      * `disk` — размер диска в ГБ.

    Посмотрите подробное описание источников данных и ресурсов:

    * [selectel\_dbaas\_datastore\_type\_v1](/terraform/selectel-provider-reference/data-sources/dbaas_datastore_type_v1/);
    * [selectel\_dbaas\_flavor\_v1](/terraform/selectel-provider-reference/data-sources/dbaas_flavor_v1/);
    * [selectel\_dbaas\_mysql\_datastore\_v1](/terraform/selectel-provider-reference/resources/dbaas_mysql_datastore_v1/).
  </TabItem>

  <TabItem value="custom">
    <TabItemLabel>
      Произвольная конфигурация
    </TabItemLabel>

    ```hcl
    data "selectel_dbaas_datastore_type_v1" "datastore_type_1" {
      project_id = selectel_vpc_project_v2.project_1.id
      region     = "ru-9"
      filter {
        engine  = "mysql_native"
        version = "8"
      }
    }

    resource "selectel_dbaas_mysql_datastore_v1" "datastore_1" {
      name       = "datastore-1"
      project_id = selectel_vpc_project_v2.project_1.id
      region     = "ru-9"
      type_id    = data.selectel_dbaas_datastore_type_v1.datastore_type_1.datastore_types[0].id
      subnet_id  = openstack_networking_subnet_v2.subnet_1.id
      node_count = 3
      flavor {
        vcpus = 1
        ram   = 4096
        disk  = 32
      }
    }
    ```

    Здесь:

    * `region` — пул, например `ru-9`. Список доступных пулов можно посмотреть в инструкции [Доступность продуктов в локациях](/infrastructure/product-availability-by-location/#managed-databases);
    * `filter` — фильтр типов облачных баз данных:
      * `engine` — тип облачных баз данных. Для кластера MySQL semi-sync укажите `mysql_native`;
      * `version` — версия облачной базы данных. Список доступных версий можно посмотреть в инструкции [Версии и конфигурации](/managed-databases/mysql-semi-sync/configurations/);
    * `nodes_count` — количество нод. Максимальное количество нод — 6;
    * `flavor` — произвольная конфигурация кластера. Доступные значения произвольных конфигураций можно посмотреть в инструкции [Версии и конфигурации](/managed-databases/mysql-semi-sync/configurations/):
      * `vcpus` — количество vCPU;
      * `ram` — количество RAM в МБ;
      * `disk` — размер диска в ГБ.

    Посмотрите подробное описание источников данных и ресурсов:

    * [selectel\_dbaas\_datastore\_type\_v1](/terraform/selectel-provider-reference/data-sources/dbaas_datastore_type_v1/);
    * [selectel\_dbaas\_flavor\_v1](/terraform/selectel-provider-reference/data-sources/dbaas_flavor_v1/);
    * [selectel\_dbaas\_mysql\_datastore\_v1](/terraform/selectel-provider-reference/resources/dbaas_mysql_datastore_v1/).
  </TabItem>
</Tabs>

## 4. Создать пользователя \{#create-user}

<CreateUserMySQL />

## 5. Создать базу данных \{#create-database}

<CreateDatabaseMySQL />

## 6. Выдать пользователю доступ к базе данных \{#grant-access}

<GrantAccessMySQL />

<Formbricks />
