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

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

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

1) Сервер с MariaDB

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

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

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

Все шаги необходимо выполнять от пользователя с правами root.

Если вы хотите произвести миграцию с MariaDB на PostgreSQL, для подготовки БД PostgreSQL воспользуйтесь инструкцией Настройка СУБД PostgreSQL

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

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

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

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

Last updated

Was this helpful?