> For the complete documentation index, see [llms.txt](https://kb.pvhostvm.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kb.pvhostvm.ru/hostvm-vdi/hostvm-vdi-installation-guide/vdi-db/db-migration.md).

# Миграция данных брокера VDI из СУБД PostgreSQL в СУБД MariaDB

Если имеется необходимость в использовании HOSTVM VDI совместно с СУБД MariaDB, а брокер VDI развернут на использование СУБД PostgreSQL, следует выполнить миграцию данных брокера и переключить HOSTVM VDI Broker на работу с СУБД MariaDB.

### Предварительные требования:

1\) Сервер с MariaDB

2\) В MariaDB создана БД - udsdb

3\) Если сервер внешний - на нем открыт доступ к БД по сети

4\) Создан пользователь udsdbadm с паролем

{% hint style="warning" %}
**Все шаги необходимо выполнять от пользователя с правами root.**
{% endhint %}

Если вы хотите произвести миграцию с MariaDB на PostgreSQL, для подготовки БД PostgreSQL воспользуйтесь инструкцией [Настройка СУБД PostgreSQL](/hostvm-vdi/hostvm-vdi-installation-guide/vdi-db/postgresql.md).

### Подготовка к миграции БД

Чтобы создать БД выполните команду:

```
mysql -u root -p -e "CREATE DATABASE udsdb;
```

Для того, чтобы разрешить подключение к БД с внешних адресов необходимо добавить пользователя udsdbadm и выдать ему необходимые права.

Откройте терминальный клиент mysql:

```
mysql -u root -p
```

Для создания пользователя с паролем 'password' выполните команду:

```
CREATE USER 'udsdbadm'@'%' IDENTIFI ED BY 'password';
```

Затем выполните команды:

```
GRANT ALL PRIVILEGES ON *.* to 'udsdbadm'@'%';
FLUSH PRIVILEGES;
```

Выполните выход из терминального клиента mysql:

```
\q
```

Отредактируйте файл /etc/mysql/mariadb.conf.d/50-server.cnf

Необходимо для параметра bind-address указать соответствующий ip-адрес сервера, например, для db1 – 10.20.0.25:

```
bind-address = 10.20.0.25
```

После изменения конфигурационного файла перезагрузите сервис БД командой:

```
systemctl restart mariadb
```

Все готово для миграции.

### Миграция БД

Откройте SSH подключение к Брокеру и отредактируйте секцию DATABASES в файле /var/server/server/settings.py, приведите ее к виду (после секции default добавьте секцию mysql):

```
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'udsdb',
        'USER': 'udsdbadm',
        'PASSWORD': 'Qwerty_123',
        'HOST': 'localhost',
        'PORT': '',
    },
    'mysql': {
        'ENGINE': 'django.db.backends.mysql',  
        'OPTIONS': {            
            'isolation_level': 'read committed',
        },
        'NAME': 'udsdb', 
        'USER': 'udsdbadm', 
        'PASSWORD': 'password',
        'HOST': 'localhost', 
        'PORT': '3306',  
    }
}
```

Ниже скриншот конфигурации, когда обе БД на одном брокере:

Далее перейдите в директорию /var/server командой:

```
cd /var/server
```

Подготовьте БД командой:

```
python3 manage.py migrate --database=mysql
```

Далее необходимо очистить предзаполненные поля БД для этого необходимо получить SQL код командой:

```
python3 manage.py sqlflush --database=mysql
```

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

```
BEGIN;
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE `uds_userpreference`;
TRUNCATE `uds_log`;
TRUNCATE `uds_authenticator_tags`;
TRUNCATE `uds_group`;
TRUNCATE `uds_osmanager`;
TRUNCATE `uds_images`;
TRUNCATE `uds_accounts_tags`;
TRUNCATE `uds_user`;
TRUNCATE `uds_utility_cache`;
TRUNCATE `uds_transport_tags`;
TRUNCATE `uds_net_trans`;
TRUNCATE `uds__meta_grps`;
TRUNCATE `django_session`;
TRUNCATE `uds_transport`;
TRUNCATE `uds__ds_trans`;
TRUNCATE `uds__meta_pool_member`;
TRUNCATE `uds_scheduler`;
TRUNCATE `uds_calendar_rules`;
TRUNCATE `uds_osmanager_tags`;
TRUNCATE `uds_permissions`;
TRUNCATE `uds_group_users`;
TRUNCATE `uds_tickets`;
TRUNCATE `uds_tunneltoken`;
TRUNCATE `uds_stats_c`;
TRUNCATE `uds__deployed_service_tags`;
TRUNCATE `uds__deployed_service_pub`;
TRUNCATE `uds_proxies`;
TRUNCATE `uds__pool_meta_tags`;
TRUNCATE `uds_mfa`;
TRUNCATE `uds_acc_usage`;
TRUNCATE `uds_dbfile`;
TRUNCATE `uds_accounts`;
TRUNCATE `uds_stats_c_accum`;
TRUNCATE `uds_calendar`;
TRUNCATE `uds__deployed_service`;
TRUNCATE `uds_provider_tags`;
TRUNCATE `uds_service`;
TRUNCATE `uds_delayedtask`;
TRUNCATE `uds_cal_access`;
TRUNCATE `uds__deployed_service_pub_cl`;
TRUNCATE `uds_stats_e`;
TRUNCATE `uds_actortoken`;
TRUNCATE `uds__user_service_property`;
TRUNCATE `uds_storage`;
TRUNCATE `uds_uniqueid`;
TRUNCATE `uds__pools_groups`;
TRUNCATE `uds_configuration`;
TRUNCATE `uds_group_groups`;
TRUNCATE `uds_authenticator`;
TRUNCATE `uds_network`;
TRUNCATE `uds_network_tags`;
TRUNCATE `uds_calendar_tags`;
TRUNCATE `uds_proxies_tags`;
TRUNCATE `uds_service_tags`;
TRUNCATE `uds_provider`;
TRUNCATE `uds__ds_grps`;
TRUNCATE `uds_cal_maccess`;
TRUNCATE `uds__pool_meta`;
TRUNCATE `uds_tag`;
TRUNCATE `uds_mfa_tags`;
TRUNCATE `uds__user_service`;
TRUNCATE `uds_cal_action`;
SET FOREIGN_KEY_CHECKS = 1;
COMMIT;
```

Откройте терминальный клиент mysql:

```
mysql -u root -p
```

Перед выполнением кода выберите БД udsdb командой:

```
use udsdb;
```

Выполните полученный ранее код в БД:

Выполните выход из терминального клиента mysql:

```
\q
```

Создайте dump БД PostgreSQL в универсальном JSON формате командой:

```
python3 manage.py dumpdata --all --natural-foreign > dump.json
```

Теперь загрузите dump в БД MariaDB командой:

```
python3 manage.py loaddata dump.json --database=mysql
```

Необходимо переключить HOSTVM VDI Broker с БД PostgreSQL на MariaDB.

В файле /var/server/server/settings.py необходимо удалить конфигурацию default в разделе DATABASES и заменить mysql на default, чтобы получилось, как на скриншоте:

Теперь необходимо перезапустить службы брокера командой:

```
systemctl restart vdi vdiweb
```

Миграция завершена!


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kb.pvhostvm.ru/hostvm-vdi/hostvm-vdi-installation-guide/vdi-db/db-migration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
