Поиск по сайту

telegram

Интересуешься IT и системным администрированием? Подпишись на наш канал, где мы делимся инсайдами, новостями и практическими советами! Прокачай свои навыки вместе с нами!

Как мигрировать базу данных Zabbix с MySQL на PostgreSQL

Ни для кого не секрет, что Zabbix поддерживает шесть или семь разных движков баз данных. Однако на практике самыми популярными остаются MySQL и PostgreSQL. Пользователи часто делятся на два лагеря: одни отдают предпочтение MySQL, другие выбирают исключительно PostgreSQL. Но рано или поздно и те, и другие могут столкнуться с необходимостью миграции с одного движка базы данных на другой.

В этой статье мы рассмотрим именно такой случай: перенос Zabbix с MySQL на PostgreSQL. Разберём, почему это может понадобиться, и как грамотно подойти к процессу.

Онлайн-курс: Zabbix 6. Мониторинг IT инфраструктуры предприятия.

Курс предлагает глубокое изучение Zabbix 6 и охватывает все ключевые аспекты: от установки и конфигурации до продвинутого мониторинга и автоматизации. Курс подходит как для начинающих, так и для опытных администраторов.

Проверка версий

Первый и важнейший момент, на который следует обратить внимание для успешной миграции, — это наличие применённых дополнительных исправлений, таких как обновления для плавающих и первичных ключей, если они доступны. Проверить это можно в веб-интерфейсе Zabbix, в разделе «Информация о системе». Там должен быть пункт: Database history tables upgraded: No или по-русски: Таблицы истории базы данных обновлены: Нет.

В моём случае этот пункт отсутствует, что означает, что все необходимые исправления уже применены, и я могу смело переходить к процессу миграции.

Важно! Перед началом миграции я настоятельно рекомендую сделать резервную копию вашей текущей базы данных. Минимум — это создание снапшота, максимум — полноценный бэкап. Это особенно актуально, если вы работаете с боевой базой данных. Лучше перестраховаться, чтобы избежать потери данных в случае непредвиденных проблем.

Коллеги, каждая версия Zabbix и используемой базы данных имеет свои нюансы, которые обязательно нужно учитывать при планировании миграции и выполнении всех последующих шагов. Из моего опыта, а также опыта коллег, большая часть проблем после миграции (например, связанных с корректностью работы учета) зачастую проявляется не сразу, а спустя какое-то время.

Именно поэтому резервная копия базы данных или даже всей машины целиком — это не просто формальность, а настоящая гарантия сохранения ваших данных и, что немаловажно, ваших нервов. Не пренебрегайте этим шагом!

Перед началом миграции важно определить, какая именно версия Zabbix сервера у вас установлена и запущена. Узнать это можно с помощью команды zabbix_server -V


zabbix_server -V
zabbix_server (Zabbix) 7.0.6
Revision c1d7a081969 20 November 2024, compilation time: Nov 20 2024 07:51:53

Copyright (C) 2024 Zabbix SIA
License AGPLv3: GNU Affero General Public License version 3 .
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).

Compiled with OpenSSL 3.0.13 30 Jan 2024
Running with OpenSSL 3.0.13 30 Jan 2024

В моём случае команда показала, что у меня установлена версия Zabbix сервера 7.0.6. Этот шаг крайне важен, так как версия сервера влияет на процесс миграции и требуемые действия.

Подготовительный этап

Хочу акцентировать внимание на важном моменте: начиная с версии Zabbix 6.0.11, в системе появились триггеры базы данных. Эти триггеры нужно учитывать при выполнении миграции, чтобы избежать проблем в работе системы.

Давайте проверим наличие триггеров в нашей базе данных. Для этого переходим в режим управления MySQL.

  1. Открываем MySQL:

mysql

  1. Выбираем базу данных zabbix:

use zabbix;

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

SHOW TRIGGERS\G
...
             Created: 2024-12-05 21:43:31.74
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: zabbix@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_bin
*************************** 65. row ***************************
             Trigger: triggers_delete
               Event: DELETE
               Table: triggers
           Statement: insert into changelog (object,objectid,operation,clock)
values (5,old.triggerid,3,unix_timestamp())
              Timing: BEFORE
             Created: 2024-12-05 21:43:31.75
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
             Definer: zabbix@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: utf8mb4_bin
65 rows in set (0.01 sec)

Если триггеры существуют, команда отобразит их список. В моём случае триггеры присутствуют, и их ровно 65 штук (65. row). Это подтверждает, что миграцию необходимо выполнить с учётом этих триггеров.

Установка зависимостей

Следующий шаг — это установка необходимых зависимостей, а именно базы данных PostgreSQL. Для начала выходим из режима управления MySQL:


exit;

Теперь приступим к установке PostgreSQL. Установить PostgreSQL можно несколькими способами. Самый простой — это команда:


apt install postgresql

Она установит PostgreSQL из стандартного репозитория Ubuntu сервера. Однако тут есть важный нюанс: если вы используете, например, Ubuntu 20.04, последняя версия PostgreSQL в её репозиториях — это 12.9 (если не ошибаюсь). А эта версия официально не поддерживается Zabbix 6, который требует как минимум PostgreSQL версии 13.

Конечно, есть обходной путь: можно настроить Zabbix 6 для работы с PostgreSQL 12, изменив параметр конфигурационного файла Zabbix-сервера:


AllowUnsupportedDBVersions=1

Этот параметр позволяет серверу работать с неподдерживаемыми версиями баз данных. Но я настоятельно не рекомендую идти по этому пути, так как это может вызвать проблемы в будущем.

Если вы, как и я, используете Zabbix 7 на Ubuntu 24.04, вы можете просто установить PostgreSQL с помощью команды apt install postgresql.


apt install postgresql

В этом случае следующий раздел можно смело пропускать и переходить к следующему шагу.

Однако, если вы работаете с Zabbix 6 на Ubuntu 20.04, обратите внимание на следующий раздел — он специально для вас!

Установка PostgreSQL на Ubuntu 20.04

Мы будем устанавливать последнюю актуальную версию PostgreSQL. Это более безопасный и надёжный подход, который обеспечит стабильную работу Zabbix.

Первым шагом для установки PostgreSQL является добавление в систему официального пакета установки от разработчиков PostgreSQL. Для этого выполняем следующую команду:


sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

После этого необходимо добавить ключ данного пакета, так как он является сторонним, а не родным для системы. Добавляем ключ с помощью команды:


wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Теперь обновляем списки пакетов, чтобы система смогла получить доступ к последней версии PostgreSQL:


sudo apt update

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


sudo apt -y install postgresql

Кстати, если вы хотите установить не последнюю версию PostgreSQL, а минимально поддерживаемую для Zabbix 6 (например, PostgreSQL 13), это также легко сделать, просто указав конкретную версию в команде установки. Например:


sudo apt install postgresql-13

После завершения установки давайте проверим, какая версия PostgreSQL была установлена:


psql --version
psql (PostgreSQL) 16.6 (Ubuntu 16.6-0ubuntu0.24.04.1)

В моём случае установилась версия PostgreSQL 16.6, которая на сегодняшний день является последней.

PostgreSQL установлен, двигаемся дальше!

Для следующего шага нам потребуется установить утилиту pgloader, которая используется для миграции данных. Однако важно отметить, что установка pgloader из официального репозитория Ubuntu может привести к различным ошибкам при миграции. Например, я лично столкнулся с двумя:

  1. FATAL error: 76 fell through ECASE expression (Фатальная ошибка: значение 76 не соответствует выражению ECASE).
  2. DB-CONNECTION-ERROR: Failed to connect to pgsql at "127.0.0.1" (port 5432) as user "zabbix": 10 fell through ECASE expression (Не удалось подключиться к pgsql по адресу "127.0.0.1" (порт 5432): значение 10 не соответствует выражению ECASE).

Чтобы избежать подобных проблем, я рекомендую не использовать репозитории Ubuntu, а собирать pgloader из исходников. Такой способ установки поддерживается в Linux.

Установка зависимостей

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


sudo apt install sbcl unzip libsqlite3-dev gawk curl make freetds-dev libzip-dev

Скачивание исходников pgloader

Теперь загрузим последнюю доступную версию утилиты pgloader из репозитория GitHub. На момент написания этой инструкции последней версией является 3.6.9. Если к моменту вашей установки выйдет более свежая версия, замените URL в следующей команде:


wget https://github.com/dimitri/pgloader/archive/refs/tags/v3.6.9.tar.gz

Распаковка архива

После завершения загрузки распаковываем скачанный архив:


tar xvf v3.6.9.tar.gz

Переход в директорию

Переходим в распакованную папку:


cd pgloader-3.6.9

Компиляция pgloader

Теперь приступаем к компиляции утилиты pgloader. Для этого используем команду:


make pgloader

Процесс компиляции может занять некоторое время, поэтому немного подождём. Как только он завершится, pgloader будет готов к использованию!

После завершения компиляции давайте переместим скомпилированный файл pgloader в каталог /usr/local/bin, чтобы он стал доступен для выполнения из любого места. Выполняем команду:


sudo mv ./build/bin/pgloader /usr/local/bin/

Теперь проверим установленную версию pgloader. Для этого используем следующую команду:


pgloader --version
pgloader version "3.6.7~devel"
compiled with SBCL 2.2.9.debian

Как видите, у нас установилась версия pgLoader 3.6.7 с пометкой devel, что означает, что это версия для разработчиков. Это нормально для сборки из исходников и вполне подходит для выполнения миграции. Всё готово, двигаемся дальше!

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

Теперь мы переходим к процессу подготовки к миграции. Первым шагом необходимо создать временную папку, где будут храниться файлы конфигурации, используемые в процессе переноса. Создадим эту папку и сразу перейдём в неё. Для этого используем следующую команду:


mkdir /tmp/zabbix-db-migration/ && cd $_

Эта команда создаёт папку /tmp/zabbix-db-migration/ и автоматически переключает текущую директорию на неё. Теперь мы готовы к следующему этапу подготовки!

Разбор схемы

Для переноса данных нам понадобится файл со схемой базы данных, который находится в официальном исходном коде Zabbix, соответствующем установленной версии сервера. В моём случае это Zabbix 7.0.6. Давайте разберёмся, как найти этот файл.

  1. Переходим на страницу загрузки Zabbix
  2. Выбираем версию 7.0.6 и подходящую операционную систему.

  1. Находим нужный файл схемы:
  2. В документации и инструкции загрузки указана команда для извлечения файла:

Этот файл содержит всю информацию о структуре базы данных, включая данные, изображения и схему.

  1. Используем только схему базы данных:
  2. Так как в процессе миграции мы будем переносить данные и изображения из текущей базы данных MySQL, нам потребуется исключительно схема из этого файла. Мы извлечём её отдельно, чтобы избежать дублирования данных и оптимизировать процесс миграции.

Давайте приступим к извлечению схемы из указанного файла! Для загрузки и извлечения схемы базы данных выполним следующие шаги:

  1. Переход на источник загрузки Zabbix
  2. Выбираем версию Zabbix, соответствующую вашей установке. В моём случае это версия 7.0.

    Затем снова выбираем версию Zabbix, которая соответствует вашей установке. В моём случае это версия 7.0.6. Нас будет интересовать файл с расширением .tar.gz, например, в моём случае это zabbix-7.0.6.tar.gz.

  1. Загружаем файл на сервер
  2. Используем команду:

    
    wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.6.tar.gz
    
    
  1. Распаковываем архив
  2. После успешной загрузки выполняем распаковку файла:

    
    tar -zxvf zabbix-7.0.6.tar.gz
    
    
  1. Проверяем содержимое папки
  2. Просматриваем содержимое, чтобы убедиться, что архив распакован корректно:

    
    ls
    zabbix-7.0.6  zabbix-7.0.6.tar.gz
    
    

    Теперь вы должны увидеть папку zabbix-7.0.6, в которой находится всё содержимое исходного кода Zabbix.

  1. Удаляем архив, чтобы освободить место на диске
  2. Поскольку сам архив нам больше не нужен, удаляем его:

    
    rm -rf zabbix-7.0.6.tar.gz
    
    

Теперь мы готовы работать с файлом схемы, находящимся в распакованной папке.

Двигаемся дальше!

Теперь переходим в только что распакованную папку Zabbix. Выполняем следующие шаги:

  1. Переход в папку Zabbix 7.0.6
  2.  

    
    cd zabbix-7.0.6/
    
    
  1. Просмотр содержимого папки
  2. Чтобы увидеть содержимое папки в более читабельном виде, используем команду ll

    
    ll
    total 2768
    drwxr-xr-x 13 lunin lunin    4096 Nov 20 10:51 ./
    drwxr-xr-x  3 root  root     4096 Dec 10 17:23 ../
    -rw-r--r--  1 lunin lunin   55753 Nov 20 10:50 aclocal.m4
    -rw-r--r--  1 lunin lunin      98 Nov 20 10:50 AUTHORS
    drwxr-xr-x  4 lunin lunin    4096 Nov 20 10:50 bin/
    drwxr-xr-x  5 lunin lunin    4096 Nov 20 10:50 build/
    -rw-r--r--  1 lunin lunin 1803663 Nov 20 10:50 ChangeLog
    -rwxr-xr-x  1 lunin lunin    7400 Mar 18  2022 compile*
    drwxr-xr-x  3 lunin lunin    4096 Nov 20 10:50 conf/
    -rwxr-xr-x  1 lunin lunin   49482 Jan 31  2022 config.guess*
    -rwxr-xr-x  1 lunin lunin   35406 Jan 31  2022 config.sub*
    -rwxr-xr-x  1 lunin lunin  589336 Nov 20 10:50 configure*
    -rw-r--r--  1 lunin lunin   72900 Nov 20 10:50 configure.ac
    -rw-r--r--  1 lunin lunin   34523 Nov 20 10:50 COPYING
    drwxr-xr-x  7 lunin lunin    4096 Nov 20 10:51 database/
    -rwxr-xr-x  1 lunin lunin   23568 Mar 18  2022 depcomp*
    drwxr-xr-x  4 lunin lunin    4096 Nov 20 10:51 include/
    -rw-r--r--  1 lunin lunin      83 Nov 20 10:50 INSTALL
    -rwxr-xr-x  1 lunin lunin   15358 Mar 18  2022 install-sh*
    drwxr-xr-x  2 lunin lunin    4096 Nov 20 10:51 m4/
    -rw-r--r--  1 lunin lunin    7786 Nov 20 10:50 Makefile.am
    -rw-r--r--  1 lunin lunin   38288 Nov 20 10:50 Makefile.in
    drwxr-xr-x  2 lunin lunin    4096 Nov 20 10:51 man/
    drwxr-xr-x  5 lunin lunin    4096 Nov 20 10:51 misc/
    -rwxr-xr-x  1 lunin lunin    6878 Mar 18  2022 missing*
    -rw-r--r--  1 lunin lunin      53 Nov 20 10:50 NEWS
    -rw-r--r--  1 lunin lunin      26 Nov 20 10:50 README
    -rw-r--r--  1 lunin lunin    2435 Nov 20 10:50 README.md
    drwxr-xr-x  5 lunin lunin    4096 Nov 20 10:50 sass/
    drwxr-xr-x 12 lunin lunin    4096 Nov 20 10:51 src/
    drwxr-xr-x 14 lunin lunin    4096 Nov 20 10:51 ui/
    
    

    Здесь действительно много исходных файлов Zabbix.

  1. Переход к папке с файлами базы данных PostgreSQL
  2. Мы переходим в директорию с базой данных PostgreSQL, так как именно там находится файл схемы, который нам нужен. Поскольку команда по умолчанию может не сработать из-за различий в версиях Zabbix, мы указываем нашу версию:

    
    cd database/postgresql/
    
    
  1. Просмотр содержимого папки
  2. Чтобы убедиться, что мы нашли нужный файл, снова проверяем содержимое папки, командой ls

    
    ls
    data.sql    Makefile.am  option-patches  timescaledb
    images.sql  Makefile.in  schema.sql
    
    

    В папке будет файл с именем schema.sql — это именно тот файл, который нам нужен для миграции базы данных. Убедитесь, что файл выделен и готов к дальнейшему использованию. Мы на правильном пути!

Теперь нам нужно извлечь из файла schema.sql только те операции, которые создают таблицы и триггеры, а затем сохранить их в отдельный файл. Для этого выполняем следующую команду:


grep -v 'ALTER TABLE ONLY' schema.sql | grep -v INSERT | grep -v 'CREATE INDEX' | grep -v 'CREATE UNIQUE INDEX' > /tmp/zabbix-db-migration/create_tables.sql

Проверка результата
  1. Просмотр содержимого текущей папки
  2. Выполняем команду ls

    
    ls
    data.sql    Makefile.am  option-patches  timescaledb
    images.sql  Makefile.in  schema.sql
    
    

    Если файла create_tables.sql здесь нет, то это ожидаемо, так как он был создан в директории /tmp/zabbix-db-migration.

  1. Переход в папку с миграцией
  2. Для перехода в папку используем команды:

    
    cd ..
    cd ..
    cd ..
    
    

    Теперь мы находимся в директории /tmp/zabbix-db-migration.

  1. Проверяем содержимое папки миграции
  2. Выполняем команду ls

    
    ls
    create_tables.sql  zabbix-7.0.6
    
    

    Здесь мы видим файл create_tables.sql. Отлично, файл создан и находится в нужной папке.

Далее, выполняем следующие шаги для разделения данных из файла схемы на разные файлы:

    Удаляем информацию о триггерах из файла create_tables.sql

    Удаляем всё, что связано с функциями для триггеров, чтобы оставить только операции создания таблиц:

    
    sed -i '/create\ or\ replace\ function/,$d' /tmp/zabbix-db-migration/create_tables.sql
    
    
  1. Создаём файл с операциями для триггеров
  2. Извлекаем только операции, связанные с триггерами, и сохраняем их в отдельный файл:

    
    awk '/INSERT INTO dbversion/{p=1;next} /ALTER TABLE/{p=0} p' zabbix-7.0.6/database/postgresql/schema.sql > /tmp/zabbix-db-migration/triggers.sql
    
    

    Проверяем содержимое папки, чтобы убедиться, что файл triggers.sql создан:

    
    ls
    create_tables.sql  triggers.sql  zabbix-7.0.6
    
    
  1. Создаём файл с операциями создания индексов
  2. Извлекаем команды создания индексов и сохраняем их в отдельный файл:

    
    grep -E 'CREATE INDEX|CREATE UNIQUE INDEX' zabbix-7.0.6/database/postgresql/schema.sql > /tmp/zabbix-db-migration/create_index.sql
    
    

    Снова проверяем, что файл create_index.sql успешно создан:

    
    ls
    create_index.sql  create_tables.sql  triggers.sql  zabbix-7.0.6
    
    
  1. Создаём файл с операциями предупреждения (ALTER TABLE)
  2. Извлекаем только команды ALTER TABLE ONLY и сохраняем их в отдельный файл:

    
    grep 'ALTER TABLE ONLY' zabbix-7.0.6/database/postgresql/schema.sql > /tmp/zabbix-db-migration/alter_table.sql
    
    

    Проверяем содержимое папки, чтобы убедиться, что файл alter_table.sql тоже создан:

    
    ll
    total 224
    drwxr-xr-x  3 root  root    4096 Dec 10 17:33 ./
    drwxrwxrwt 20 root  root    4096 Dec 10 17:20 ../
    -rw-r--r--  1 root  root   36267 Dec 10 17:33 alter_table.sql
    -rw-r--r--  1 root  root   18036 Dec 10 17:32 create_index.sql
    -rw-r--r--  1 root  root  134204 Dec 10 17:32 create_tables.sql
    -rw-r--r--  1 root  root   23612 Dec 10 17:32 triggers.sql
    drwxr-xr-x 13 lunin lunin   4096 Nov 20 10:51 zabbix-7.0.6/
    
    

Теперь у нас есть все необходимые файлы для дальнейшей работы:

  • create_tables.sql (только таблицы),
  • triggers.sql (только триггеры),
  • create_index.sql (только индексы),
  • alter_table.sql (только ALTER TABLE).

Продолжаем настройку и подготовку к миграции!

Подготовка PostgreSQL

Теперь займёмся настройкой базы данных PostgreSQL для Zabbix:

  1. Создание нового пользователя базы данных
  2. Создаём пользователя zabbix с паролем. Выполняем следующую команду:

    
    sudo -u postgres createuser --pwprompt zabbix
    
    

    Когда будет предложено ввести пароль, указываем zabbix (или любой другой, который вы хотите использовать).

Важно: Обратите внимание: префикс sudo -u postgres указывает, что команда выполняется от имени пользователя PostgreSQL postgres, а не от имени суперпользователя root. Это важно, поскольку именно пользователь postgres управляет базами данных и их пользователями в PostgreSQL.

  1. Создание базы данных Zabbix
  2. Теперь создаём базу данных zabbix и назначаем её владельцем пользователя zabbix:

    
    sudo -u postgres createdb -O zabbix zabbix
    
    
  1. Создание схемы базы данных Zabbix
  2. Используем файл create_tables.sql, чтобы создать структуру базы данных. Выполняем следующую команду:

    
    sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/create_tables.sql
    
    

    Когда будет запрашиваться пароль, вводим тот, который вы установили ранее (в нашем случае это zabbix).

    После выполнения команда создаст таблицы в базе данных.

  1. Временное изменение типа шифрования пароля
  2. Для совместимости с утилитой pgloader нужно временно переключить шифрование паролей на тип 'md5':

    • Устанавливаем тип шифрования:

     

    
    sudo -u postgres psql -c "SET password_encryption='md5';"
    
    
    • Устанавливаем пароль пользователя zabbix с новым шифрованием:

     

    
    sudo -u postgres psql -c "ALTER ROLE zabbix WITH PASSWORD 'zabbix';"
    
    

Теперь база данных PostgreSQL настроена, и мы можем продолжать процесс миграции!

Подготовка MySQL

Теперь займёмся подготовкой базы данных MySQL и созданием конфигурационного файла для pgloader:

  1. Изменение метода аутентификации MySQL
    • Открываем конфигурационный файл MySQL:

     

    
    nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
    
    • В самый конец файла добавляем следующую директиву:

     

    
    default_authentication_plugin=mysql_native_password
    
    
    • Сохраняем изменения: нажимаем CTRL + X, затем Y, и подтверждаем Enter.
    • Перезапускаем службу MySQL, чтобы изменения вступили в силу:

     

    
    service mysql restart
    
    

    Выполняем команду, чтобы изменить метод входа пользователя zabbix и задать новый пароль (если вы используете другой пароль, замените 'zabbix'):

    
    mysql -e "ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY 'zabbix';"
    
    

Это действие обеспечивает совместимость с pgloader.

    • Открываем редактор для создания файла конфигурации:

     

    
    nano /tmp/zabbix-db-migration/pgloader.conf
    
    
    • Вставляем следующий текст в файл:

     

    
    LOAD DATABASE
    FROM mysql://zabbix:zabbix@127.0.0.1/zabbix
    INTO postgresql://zabbix:zabbix@127.0.0.1/zabbix
    WITH include no drop,
         truncate,
         create no tables,
         create no indexes,
         no foreign keys,
         reset sequences,
         data only,
         prefetch rows = 1000,
         batch rows = 1000,
         batch concurrency = 1
    ALTER SCHEMA 'zabbix' RENAME TO 'public';
    
    

    Обратите внимание:

    FROM mysql://zabbix:zabbix@127.0.0.1/zabbix — замените zabbix:zabbix на ваш логин и пароль, если они отличаются.

    INTO postgresql://zabbix:zabbix@127.0.0.1/zabbix — здесь тоже указывайте свои данные для PostgreSQL, если вы задавали другие.

    • Сохраняем файл: нажимаем CTRL + X, затем Y, и подтверждаем Enter.

Файл конфигурации для pgloader готов. Теперь мы можем перейти к следующему шагу — запуску миграции данных.

Миграция

Теперь мы подошли к самому важному этапу — миграции данных. Перед началом убедитесь, что:

  1. Вы сделали резервную копию исходной базы данных MySQL (если нет, сейчас самое время это сделать).
  2. На диске достаточно свободного места для временных файлов миграции.

Если всё готово, приступаем:

  1. Остановка служб Zabbix и Apache
  2. Чтобы данные не изменялись во время миграции, останавливаем службы Zabbix сервера и веб-сервера Apache:

    
    systemctl stop zabbix-server apache2
    
    

    Иногда службы могут зависать и не останавливаться корректно. На данном этапе это не критично — просто нажмите CTRL + C для принудительной отмены.

    На этом этапе Zabbix временно перестанет работать.

  1. Создание папки для временных данных
  2. Создаём папку для временных данных миграции в нашей директории:

    
    mkdir /tmp/zabbix-db-migration/data
    
    
  1. Запуск миграции с использованием pgloader
  2. Теперь всё готово к запуску миграции. Используем ранее созданный файл конфигурации для pgloader:

    
    pgloader --root-dir=/tmp/zabbix-db-migration/data /tmp/zabbix-db-migration/pgloader.conf
    
    
  1. Процесс миграции
  2. После запуска команда начнёт перенос данных из базы MySQL в PostgreSQL. Важно следить за процессом в терминале — pgloader будет выводить сообщения о ходе миграции, включая возможные ошибки.

    Ожидаем завершения миграции, а затем переходим к финальной настройке Zabbix!

Важное замечание: Во время работы утилиты pgloader вы можете увидеть предупреждающие сообщения. Их можно игнорировать, так как они не критичны и не влияют на общий процесс миграции.

С другой стороны, более серьёзные проблемы, такие как:

  • нехватка свободного места на диске,
  • таймауты между базами данных,
  • низкая скорость записи на диск,

могут потребовать дополнительного анализа и корректировки параметров утилиты или системы. Например, для устранения таймаутов или оптимизации записи на диск.

Если миграция завершилась успешно, вывод утилиты pgloader должен быть похож на следующий:


2024-12-10T18:20:05.016000+03:00 LOG pgloader version "3.6.7~devel"
2024-12-10T18:20:05.226000+03:00 LOG Migrating from #
2024-12-10T18:20:05.226000+03:00 LOG Migrating into #
2024-12-10T18:20:05.846997+03:00 WARNING Source column "public"."history_uint"."value" is casted to type "bigint" which is not the same as "numeric", the type of current target database column "public"."history_uint"."value".
2024-12-10T18:20:05.846997+03:00 WARNING Source column "public"."host_proxy"."revision" is casted to type "bigint" which is not the same as "numeric", the type of current target database column "public"."host_proxy"."revision".
2024-12-10T18:20:05.847997+03:00 WARNING Source column "public"."item_rtdata"."lastlogsize" is casted to type "bigint" which is not the same as "numeric", the type of current target database column "public"."item_rtdata"."lastlogsize".
2024-12-10T18:20:05.847997+03:00 WARNING Source column "public"."proxy_history"."lastlogsize" is casted to type "bigint" which is not the same as "numeric", the type of current target database column "public"."proxy_history"."lastlogsize".
2024-12-10T18:20:05.848997+03:00 WARNING Source column "public"."trends_uint"."value_min" is casted to type "bigint" which is not the same as "numeric", the type of current target database column "public"."trends_uint"."value_min".
2024-12-10T18:20:05.848997+03:00 WARNING Source column "public"."trends_uint"."value_avg" is casted to type "bigint" which is not the same as "numeric", the type of current target database column "public"."trends_uint"."value_avg".
2024-12-10T18:20:05.848997+03:00 WARNING Source column "public"."trends_uint"."value_max" is casted to type "bigint" which is not the same as "numeric", the type of current target database column "public"."trends_uint"."value_max".
2024-12-10T18:20:19.237965+03:00 LOG report summary reset
                       table name     errors       rows      bytes      total time
---------------------------------  ---------  ---------  ---------  --------------
                  fetch meta data          0        203                     0.199s
                         Truncate          0        203                     0.328s
---------------------------------  ---------  ---------  ---------  --------------
                   public.history          0     564190    19.2 MB          3.770s
          public.valuemap_mapping          0      32526   917.7 kB          4.102s
              public.history_uint          0     199794     6.1 MB          1.544s
              public.item_preproc          0      20901     1.0 MB          0.424s
              public.widget_field          0      10013   607.8 kB          0.298s
                    public.trends          0       9586   537.4 kB          0.290s
            public.item_discovery          0       6985   192.3 kB          0.257s
                  public.triggers          0       6172     1.7 MB          0.276s
                  public.item_tag          0      26151   789.3 kB          0.316s
               public.trends_uint          0       3645   132.5 kB          0.226s
                    public.widget          0       1962    82.5 kB          0.198s
                     public.items          0      16633     6.4 MB          0.648s
                    public.graphs          0       1747   204.2 kB          0.242s
            public.item_parameter          0       1051    42.3 kB          0.188s
            public.lld_macro_path          0        770    26.2 kB          0.172s
            public.dashboard_page          0        470    10.5 kB          0.284s
              public.hosts_groups          0        335     4.1 kB          0.352s
                 public.dashboard          0        321    22.7 kB          0.471s
    public.lld_override_operation          0        174     4.7 kB          0.527s
    public.lld_override_condition          0        161     6.6 kB          0.621s
   public.lld_override_opdiscover          0        151     1.0 kB          0.692s
               public.item_rtdata          0        153     2.4 kB          0.739s
                    public.images          0        187     1.9 MB          0.898s
                  public.auditlog          0         61    54.9 kB          1.030s
           public.hosts_templates          0         41     0.7 kB          1.134s
                    public.module          0         30     1.0 kB          1.216s
                 public.interface          0         26     1.2 kB          1.300s
     public.lld_override_opstatus          0         16     0.1 kB          1.396s
         public.trigger_discovery          0         15     0.5 kB          1.474s
                 public.functions          0       9891   278.4 kB          0.284s
                 public.event_tag          0         12     0.2 kB          1.581s
                       public.ids          0         11     0.3 kB          1.599s
                public.operations          0         10     0.2 kB          1.716s
                 public.opmessage          0          8     0.1 kB          1.728s
                public.conditions          0          6     0.1 kB          1.822s
        public.lld_override_optag          0          6     0.2 kB          1.826s
                   public.actions          0          5     0.3 kB          1.947s
              public.users_groups          0          5     0.0 kB          1.946s
             public.opmessage_grp          0          4     0.0 kB          2.127s
                   public.scripts          0          3     0.3 kB          2.112s
                    public.events          0          3     0.2 kB          2.247s
                   public.problem          0          2     0.2 kB          2.246s
                     public.users          0          2     0.3 kB          2.379s
              public.acknowledges          0          0                     2.388s
              public.autoreg_host          0          0                     2.522s
                    public.config          0          1     1.4 kB          2.517s
                 public.connector          0          0                     2.641s
            public.corr_condition          0          0                     2.638s
        public.corr_condition_tag          0          0                     2.745s
   public.corr_condition_tagvalue          0          0                     2.754s
               public.correlation          0          0                     2.859s
          public.dashboard_usrgrp          0          1     0.0 kB          2.879s
                   public.dchecks          0          1     0.0 kB          2.958s
                    public.drules          0          1     0.0 kB          2.970s
               public.escalations          0          0                     3.051s
            public.event_suppress          0          0                     3.088s
               public.globalmacro          0          1     0.0 kB          3.157s
           public.group_discovery          0          0                     3.208s
               public.history_log          0          0                     3.279s
               public.host_rtdata          0          1     0.0 kB          3.296s
                  public.httpstep          0          0                     3.374s
              public.httpstepitem          0          0                     3.393s
               public.trigger_tag          0       8012   217.5 kB          0.206s
            public.httptest_field          0          0                     3.500s
              public.httptestitem          0          0                     3.488s
              public.icon_mapping          0          0                     3.615s
            public.interface_snmp          0          0                     3.600s
  public.lld_override_opinventory          0          0                     3.732s
     public.lld_override_optrends          0          0                     3.711s
              public.maintenances          0          0                     3.841s
        public.maintenances_hosts          0          0                     3.855s
                     public.media          0          0                     3.955s
           public.mfa_totp_secret          0          0                     3.973s
             public.opcommand_grp          0          0                     4.058s
              public.opconditions          0          0                     4.077s
               public.opinventory          0          0                     4.185s
                     public.optag          0          0                     4.186s
                public.permission          0          0                     4.316s
                     public.proxy          0          0                     4.313s
            public.proxy_dhistory          0          0                     4.443s
        public.proxy_group_rtdata          0          0                     4.436s
              public.proxy_rtdata          0          0                     4.569s
              public.report_param          0          0                     4.569s
             public.report_usrgrp          0          0                     4.686s
                public.scim_group          0          0                     4.690s
                 public.hostmacro          0       5914   573.5 kB          0.250s
            public.service_alarms          0          0                     4.807s
       public.service_problem_tag          0          0                     4.808s
               public.service_tag          0          0                     4.941s
            public.services_links          0          0                     4.942s
     public.sla_excluded_downtime          0          0                     5.031s
           public.sla_service_tag          0          0                     5.068s
        public.sysmap_element_url          0          0                     5.129s
                public.sysmap_url          0          0                     5.197s
             public.sysmap_usrgrp          0          0                     5.219s
       public.sysmaps_element_tag          0          0                     5.320s
     public.sysmaps_link_triggers          0          0                     5.335s
                public.tag_filter          0          0                     5.447s
          public.task_acknowledge          0          0                     5.456s
        public.task_close_problem          0          0                     5.581s
       public.task_remote_command          0          0                     5.579s
               public.task_result          0          0                     5.720s
                     public.token          0          0                     5.707s
                     public.ugset          0          1     0.1 kB          5.852s
                public.user_ugset          0          1     0.0 kB          5.827s
    public.userdirectory_idpgroup          0          0                     5.950s
       public.userdirectory_media          0          0                     5.972s
      public.userdirectory_usrgrp          0          0                     6.042s
              public.graphs_items          0       4714   160.9 kB          0.138s
            public.item_condition          0       2857   150.4 kB          0.069s
           public.trigger_depends          0       1762    31.0 kB          0.128s
                  public.valuemap          0       1211    79.0 kB          0.024s
                  public.host_tag          0       1016    28.6 kB          0.166s
          public.media_type_param          0        633    24.7 kB          0.066s
                     public.hosts          0        375   243.3 kB          0.209s
                public.host_hgset          0        324     2.6 kB          0.152s
        public.media_type_message          0        208    59.2 kB          0.284s
              public.lld_override          0        161     6.2 kB          0.268s
               public.history_str          0        161    13.7 kB          0.414s
               public.item_rtname          0        147    10.9 kB          0.429s
              public.history_text          0        150    39.8 kB          0.537s
           public.group_prototype          0         66     1.7 kB          0.564s
            public.host_discovery          0         45     1.1 kB          0.673s
                public.media_type          0         40   301.9 kB          0.756s
                 public.role_rule          0         27     0.8 kB          0.724s
                    public.hstgrp          0         19     1.1 kB          0.840s
   public.lld_override_optemplate          0         14     0.2 kB          0.920s
               public.hgset_group          0         13     0.1 kB          0.943s
                     public.hgset          0         12     0.8 kB          1.050s
               public.expressions          0         10     0.5 kB          1.090s
           public.graph_discovery          0          8     0.2 kB          1.132s
               public.problem_tag          0          8     0.1 kB          1.247s
   public.lld_override_opseverity          0          6     0.0 kB          1.255s
                    public.usrgrp          0          6     0.2 kB          1.391s
                   public.regexps          0          5     0.2 kB          1.399s
               public.graph_theme          0          4     0.9 kB          1.536s
                      public.role          0          4     0.1 kB          1.544s
               public.ugset_group          0          3     0.0 kB          1.676s
            public.host_inventory          0          2     0.3 kB          1.681s
                  public.sessions          0          2     0.2 kB          1.817s
                   public.ha_node          0          1     0.1 kB          1.819s
                    public.alerts          0          0                     1.948s
                 public.changelog          0          0                     1.951s
        public.config_autoreg_tls          0          1     0.0 kB          2.082s
             public.connector_tag          0          0                     2.090s
      public.corr_condition_group          0          0                     2.195s
    public.corr_condition_tagpair          0          0                     2.214s
            public.corr_operation          0          0                     2.304s
            public.dashboard_user          0          0                     2.321s
                 public.dbversion          0          1     0.0 kB          2.446s
                    public.dhosts          0          0                     2.440s
                 public.dservices          0          0                     2.554s
            public.event_recovery          0          1     0.0 kB          2.555s
             public.event_symptom          0          0                     2.673s
                public.globalvars          0          0                     2.672s
               public.history_bin          0          0                     2.797s
                public.host_proxy          0          0                     2.779s
               public.housekeeper          0          0                     2.892s
            public.httpstep_field          0          0                     2.910s
                  public.httptest          0          0                     3.001s
              public.httptest_tag          0          0                     3.037s
                  public.icon_map          0          0                     3.113s
       public.interface_discovery          0          0                     3.155s
    public.lld_override_ophistory          0          0                     3.228s
     public.lld_override_opperiod          0          0                     3.296s
           public.maintenance_tag          0          0                     3.339s
       public.maintenances_groups          0          0                     3.439s
      public.maintenances_windows          0          0                     3.462s
                       public.mfa          0          0                     3.575s
                 public.opcommand          0          0                     3.582s
             public.opcommand_hst          0          0                     3.708s
                   public.opgroup          0          1     0.0 kB          3.723s
             public.opmessage_usr          0          0                     3.827s
                public.optemplate          0          1     0.0 kB          3.899s
                  public.profiles          0          1     0.0 kB          3.947s
        public.proxy_autoreg_host          0          0                     3.995s
               public.proxy_group          0          0                     4.100s
             public.proxy_history          0          0                     4.107s
                    public.report          0          0                     4.227s
               public.report_user          0          0                     4.242s
                    public.rights          0          0                     4.342s
              public.script_param          0          0                     4.356s
           public.service_problem          0          0                     4.444s
       public.service_status_rule          0          0                     4.466s
                  public.services          0          0                     4.552s
                       public.sla          0          0                     4.589s
              public.sla_schedule          0          0                     4.650s
    public.sysmap_element_trigger          0          0                     4.717s
              public.sysmap_shape          0          1     0.1 kB          4.750s
               public.sysmap_user          0          0                     4.821s
                   public.sysmaps          0          1     0.1 kB          4.879s
          public.sysmaps_elements          0          1     0.1 kB          4.933s
             public.sysmaps_links          0          0                     4.996s
                      public.task          0          0                     5.022s
            public.task_check_now          0          0                     5.133s
                 public.task_data          0          0                     5.146s
public.task_remote_command_result          0          0                     5.265s
               public.timeperiods          0          0                     5.273s
             public.trigger_queue          0          0                     5.282s
           public.user_scim_group          0          0                     5.306s
             public.userdirectory          0          0                     5.357s
        public.userdirectory_ldap          0          0                     5.352s
        public.userdirectory_saml          0          0                     5.357s
---------------------------------  ---------  ---------  ---------  --------------
          COPY Threads Completion          0          4                    12.781s
                  Reset Sequences          0          1                     0.094s
                 Install Comments          0          0                     0.000s
---------------------------------  ---------  ---------  ---------  --------------
                Total import time          ✓     942192    42.1 MB         12.87

Если у вас результат похож на этот, поздравляю — миграция завершена, и мы можем двигаться дальше!

После успешной миграции данных завершаем настройку базы данных PostgreSQL:

  1. Возвращаем более безопасный алгоритм хеширования паролей

Для повышения безопасности меняем алгоритм хеширования на SHA-256 и перегенерируем пароль для пользователя Zabbix:

  • Устанавливаем алгоритм хеширования:
  •  

    
    sudo -u postgres psql -c "SET password_encryption='SCRAM-SHA-256';"
    
    
  • Перегенерируем пароль для пользователя zabbix:
  •  

    
    sudo -u postgres psql -c "ALTER ROLE zabbix WITH PASSWORD 'zabbix';"
    
    

    Замените zabbix на желаемый пароль.

  1. Создание схемы индексов
  2. Используем файл create_index.sql для создания индексов в базе данных Zabbix:

    
    sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/create_index.sql
    
    

    Введите пароль пользователя zabbix, когда будет предложено.

  1. Создание схемы для предупреждений (ALTER TABLE)
  2. Используем файл alter_table.sql для внесения изменений в таблицы:

    
    sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/alter_table.sql
    
    

    Опять вводим пароль пользователя zabbix.

  1. Создание схемы триггеров
  2. Используем файл triggers.sql для добавления триггеров в базу данных:

    
    sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /tmp/zabbix-db-migration/triggers.sql
    
    

    И снова вводим пароль пользователя zabbix.

  1. Оптимизация базы данных (VACUUM)
  2. Запускаем команду VACUUM для внутренней очистки базы данных. Это обновляет статистику, используемую оптимизатором запросов, и улучшает производительность:

    
    sudo -u postgres vacuumdb --dbname=zabbix --analyze --username=postgres --jobs=$(grep -c processor /proc/cpuinfo)
    
    

    Теперь база данных PostgreSQL полностью готова к использованию! Мы можем возвращаться к настройке Zabbix и запуску служб.

Тестирование функциональности

Теперь переходим к следующему этапу — замене Zabbix сервера для работы с PostgreSQL:

  1. Удаляем Zabbix сервер, который был настроен для MySQL
  2. Текущая версия Zabbix сервера предназначена для работы с базой данных MySQL, и она не будет работать с PostgreSQL. Поэтому удаляем её:

    
    sudo apt remove zabbix-server-mysql
    
    

    После выполнения команды Zabbix сервер будет удалён.

  1. Создаём резервную копию конфигурационного файла
  2. Хотя при переустановке Zabbix сервера файл конфигурации zabbix_server.conf обычно сохраняется, рекомендуется сделать его резервную копию, особенно если вы работаете на боевой системе. Для этого выполните:

    
    cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bak
    
    

    Если у вас тестовая система или вы уверены, что файл сохранится, можете пропустить этот шаг.

  1. Устанавливаем Zabbix сервер для PostgreSQL
  2. Теперь установим Zabbix сервер, совместимый с PostgreSQL, а также необходимые зависимости, включая поддержку PostgreSQL в PHP:

    
    apt install zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql zabbix-apache-conf
    
    

Команду для установки мы берём с официального сайта Zabbix, чтобы быть уверенными в её корректности. Она включает:

  • zabbix-server-pgsql: Zabbix сервер для PostgreSQL,
  • php8.3-pgsql: модуль PHP для взаимодействия с PostgreSQL,
  • zabbix-apache-conf: конфигурация для работы веб-интерфейса Zabbix через Apache.

После установки Zabbix сервер будет готов для работы с PostgreSQL. Двигаемся дальше!

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

Теперь завершаем настройку Zabbix сервера для работы с PostgreSQL:

  1. Изменяем пароль пользователя базы данных
  2. Открываем файл конфигурации Zabbix сервера, чтобы указать новый пароль для подключения к базе данных:

    
    nano /etc/zabbix/zabbix_server.conf
    
    

    В файле найдите параметр DBPassword (можно использовать поиск в редакторе CTRL + W). Укажите туда ваш пароль для PostgreSQL, в моем случае это:

    
    DBPassword=zabbix
    
    

    Сохраняем изменения: нажимаем CTRL + X, затем Y, и подтверждаем Enter.

  1. Удаляем старый конфигурационный файл фронтенда для MySQL
  2. Файл конфигурации для веб-интерфейса Zabbix, использующий MySQL, больше не нужен. Удаляем его:

    
    rm /etc/zabbix/web/zabbix.conf.php
    
    
  1. Перезапускаем службы Zabbix и Apache
  2. После внесённых изменений перезапускаем службы Zabbix сервера и Apache:

    
    systemctl restart zabbix-server apache2
    
    
  1. Если службы не запускаются
  2. Если служба Zabbix сервера не запустилась и выдали ошибку, необходимо изучить логи, чтобы понять, в чём проблема. Лог Zabbix сервера находится по следующему пути:

    
    nano /var/log/zabbix/zabbix_server.log
    
    

    Просмотрите сообщения в логе, чтобы диагностировать и устранить проблему.

  1. Проверяем работу через веб-интерфейс
  2. Теперь заходим в веб-интерфейс Zabbix, чтобы убедиться, что сервер работает корректно, и настраиваем систему для работы с новой базой PostgreSQL.

    Переходим к первоначальной настройке Zabbix через веб-интерфейс. Я использую ссылку: http://zabbix7.itadminlab.ru/zabbix/, а вы откройте свою ссылку.

  1. Выбор языка интерфейса
  2. На первом экране выбираем язык интерфейса. По умолчанию установлен английский, оставляем его и нажимаем Далее.

  1. Проверка окружения
  2. В следующем окне происходит проверка версий и настроек системы. Здесь вы должны увидеть установленную поддержку PostgreSQL. Убедитесь, что всё в порядке, и нажимаем Далее.

  1. Настройка подключения к базе данных
  2. В следующем шаге выбираем тип базы данных — PostgreSQL.

    •  Оставляем все поля по умолчанию.

    •  Единственное, что нужно указать, — это пароль пользователя Zabbix для подключения к базе данных. В моем случае это - zabbix.

    Нажимаем Далее.

  1. Настройка имени сервера и часового пояса
  2. На этом этапе вводим имя сервера и выбираем часовой пояс:

    •  Имя сервера: Zabbix7

    •  Часовой пояс: выбираем свой. Например, для Москвы: +3 Europe/Moscow

    Нажимаем Далее.

  1. Проверка настроек
  2. На последнем шаге проверяем, что всё введено корректно, и нажимаем Далее.

  1. Завершение настройки
  2. После этого на экране появится сообщение о завершении настройки. Нажимаем Финиш.

  1. Вход в Zabbix
  2. Вводим логин и пароль, которые вы использовали ранее для доступа к Zabbix.

  1. Проверка панели управления
  2. После успешного входа вы увидите панель управления Zabbix. Теперь вы можете перейти в любой раздел и проверить, что всё работает корректно, и ваши данные перенесены.

    Поздравляю, миграция завершена!

Удаление MySQL

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

Однако внимание! В боевой среде лучше подождать месяц или два, чтобы убедиться, что после миграции не возникло проблем. Если вы уверены в стабильности системы, можно приступать.

Шаги для полного удаления MySQL

  1. Остановка службы MySQL
  2. Перед удалением необходимо остановить службу MySQL:

    
    systemctl stop mysql
    
    
  1. Удаление пакетов MySQL
  2. Полностью удаляем сервер MySQL, включая общие файлы и компоненты:

    
    sudo apt purge mysql-server mysql-common mysql-server-core-* mysql-client-core-*
    
    
  1. Удаление файлов базы данных
  2. Удаляем все файлы базы данных MySQL, чтобы они не занимали место:

    
    sudo rm -Rf /var/lib/mysql/
    
    
  1. Удаление конфигурационных файлов
  2. Если папка конфигурации MySQL осталась, удаляем её:

    
    sudo rm -Rf /etc/mysql/
    
    
  1. Удаление логов MySQL
  2. Удаляем все логи, связанные с MySQL:

    
    sudo rm -rf /var/log/mysql
    
    
  1. Удаление пользователей и групп MySQL
  2. Удаляем созданных пользователей и группы для MySQL:

    
    sudo deluser --remove-home mysql
    sudo delgroup mysql
    
    
  1. Проверка Zabbix
  2. После удаления MySQL проверьте, что Zabbix работает в штатном режиме. Убедитесь, что все данные доступны, а интерфейс работает без ошибок.

Если всё работает корректно, значит, миграция завершена успешно! На этом процесс можно считать завершённым. Вы успешно перенесли Zabbix с MySQL на PostgreSQL.

Коллеги, важно понимать, что в данной статье я предоставил общий алгоритм и основные шаги по миграции с базы данных MySQL на PostgreSQL. Однако, хочу подчеркнуть, что я выполнял миграцию в тестовой среде.

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

Но, я уверен, что с этим вы справитесь! Главное — внимательность, резервные копии и вдумчивый подход. Удачи в вашей работе!

Заключение

В этой статье вы узнали, как выполнить миграцию базы данных Zabbix с MySQL на PostgreSQL. Мы разобрали все этапы — от подготовки баз данных и конфигурации до настройки Zabbix сервера для работы с новой системой. Несмотря на сложность процесса, при правильном подходе миграция становится вполне выполнимой задачей.

Надеюсь, данное руководство помогло вам понять основные шаги и особенности этого процесса. Удачи в вашей работе, и пусть Zabbix продолжает радовать стабильной и эффективной работой!

Вам понравилась эта статья? Тогда вам, скорее всего, будет интересна другая полезная статья Как добавить пункт «Завершить задачу» в панели задач Windows 11.

Интересуешься IT и системным администрированием? Подпишись на SysAdminHub в Телеграмм или Макс, чтобы узнавать обо всем первым!

Комментарии (2)

This comment was minimized by the moderator on the site

Спасибо за статью!

  Александр
This comment was minimized by the moderator on the site

Данный способ так же актуален и при миграции с использованием PostgreSQL TimescaleDB ?

  Александр
Здесь не опубликовано еще ни одного комментария

Оставьте свой комментарий

0 Значки
Вложения (0 / 5)
Поделитесь своим местоположением