Публикация основана на докладе тренера и инженера технической поддержки Zabbix Александра Петрова-Гаврилова.

Многих волнует вопрос о том как мигрировать с MySQL на PostgreSQL и воспользоваться преимуществами TimescaleDB.  Первый вопрос, который обычно возникает, — зачем мигрировать с MySQL на PostgreSQL при использовании Zabbix.  Вариантов не так много, особенно если система уже работает и работает неплохо. Возможные причины для миграции: Необходимость миграции и эффективность использования зависят от опыта пользователя. Кроме того, платформы постоянно развиваются, добавляются новые функции. Предсказать, какая именно платформа будет предпочтительнее, невозможно. На данный момент для среднего пользователя Zabbix разница между платформами незначительна. Ниже продемонстрирован пример того, как мигрировать базу данных с MySQL на PostgreSQL с использованием: Примечание. Представленный метод может сработать с другими операционными системами и базами данных. Для миграции вам понадобится: Примечание. PGloader выбран с учетом успешного опыта пользователей и меньшего количества ошибок в сравнение с другими инструментами миграции. 1). Добавить репозиторий и установить PostgreSQL. # yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm # yum install postgresql12-server # /usr/pgsql-12/bin/postgresql-12-setup initdb # systemctl enable postgresql-12 # systemctl start postgresql-12 Для установки PostgreSQL можно просто скопировать репозиторий с сайта PostgreSQL, инициализировать, добавить в автозапуск и запустить. Возможно, придется поменять конфигурацию в pg_hba.conf, чтобы разрешить нужный тип доступа. 2). Установить pgloader. # yum install pgloader # pgloader -V # pgloader version "3.6.2 pgloader доступен в репозитории вместе с сервером PosgreSQL, и он устанавливается после добавления репозитория командой # yum install pgloader. Вместе с PosgreSQL 12, скорее всего, будет доступна версия pgloader 3.6.2.  3). Создать директорию для работы. # mkdir myzabbix-pgzabbix # cd myzabbix-pgzabbix Директория для работы необходима, потому что для проведения миграции нам потребуются файлы создания схемы и скрипт. В эту же директорию скачивается и исходный код Zabbix.  4). Скачать исходный код Zabbix. # yum install wget # wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix -5.0.1.tar.gz Если у вас установлена CentOS, необходим wget, который доступен «из коробки», начиная с минимальной инсталляции CentOS. Чтобы скачать исходный код Zabbix, перейдите на сайт Zabbix, нажмите Скачать, выберите раздел Исходный код Zabbix и скачайте исходный код для нужной версии Zabbix.  5). После того как версия скачана, нужно, конечно, распаковать архив. # tar -zxvf zabbix -5.0.1.tar.gz 6). Разделить schema.sql на create.sql и alter.sql. В архиве исходников Zabbix есть sql-скрипты для создания базы данных не только PostgreSQL, но и MySQL. Скрипты находятся в одноименных директориях, в которых нам понадобится только файл schema.sql, чтобы создать схему для данных, все таблицы и т. д. Придется также создать alter.sql, чтобы создать все индексы, все взаимосвязи между таблицами и т. д.  # cd myzabbix-pgzabbix/zabbix-5.0.1/database/postgresql/ # sed -n '/CREATE.*/,/INSERT.*$/p' schema.sql | head -n-1 > create.sql # grep ALTER schema.sql > alter.sql 7). Создать пользователя и базу данных в PostgreSQL # sudo -u postgres createuser --pwprompt zabbix # sudo -u postgres createdb -O zabbix zabbix Создание пользователя и базы данных PosgreSQL подробно описано в разделе Документация на сайте Zabbix.  Примечание. Не забудьте дать пользователю Zabbix необходимые разрешения. 8). Создать скрипт для миграции в директории, где находятся созданные create.sql и alter.sql LOAD DATABASE FROM mysql://zabbix:zabbix-password@localhost/zabbix INTO postgresql://zabbix:zabbix-password@localhost/zabbix WITH include no drop, truncate, create no tables, create no indexes, no foreign keys, reset sequences, data only SET maintenance_work_mem TO '1024MB', work_mem to '256MB' ALTER SCHEMA 'zabbix' RENAME TO 'public' BEFORE LOAD EXECUTE create.sql AFTER LOAD EXECUTE alter.sql; В скрипте для миграции указываются все необходимые данные, например, откуда мигрируются данные, где находится база данных, а также куда выполняется миграция. При использовании pgloader скрипт будет практически выполнять копированиеCOPY) PostgreSQL.  Кроме того, указываются дополнительные параметры. В нашем примере указано, что переноситься будут только данные без создания индексов, ключей или таблиц, какой объем памяти мы можем пожертвовать для миграции (чем больший объем памяти указан, тем быстрее проходит миграция).  Примечание. Для использования pgloader необходимо переименовать схему в public. Примечание. До фактической загрузки данных необходимо создать schema.sql для Zabbix, все взаимосвязи между таблицами, а также все необходимые файлы alter.sql. 1). Остановить Zabbix Server.  systemctl stop zabbix -server Остановить Zabbix Server необходимо, чтобы в какой-то момент перестали записываться данные в существующую базу данных.  Примечание. Рекомендуется сделать резервную копию базы данных. При этом не обязательно мигрировать саму базу данных. Можно сделать для миграции копию базы или даже экспортировать ее в csv-файл.  Примечание. Прежде чем проводить миграцию, рекомендуется выполнить тестирование, чтобы обезопасить себя от потери данных.  2). Запустить pgloader. # pgloader zabbix -migrate.load pgloader запускается с инструкциями, которые указаны в скрипте для миграции. 3). Видеть Warnings — это нормально.   Предупреждения после завершения миграции 4). Результат. После завершения копирования, появится отчет о том, какие данные были перенесены, сколько действий было сделано, сколько времени заняла миграция, а также количество ошибок (если они всё таки произошли).   Отчет о миграции 5). Проверить результаты. После завершения миграции рекомендуется авторизоваться в PostgreSQL и проверить результаты — индексы, ключи, сноски на другие таблицы и т. д.  Проверка результатов миграции в PostgreSQL Также необходимо убедиться в том, что данные были перенесены.  Подтверждение переноса данных в PostgreSQL 1). Удалить Zabbix сервер для работы с MySQL. # yum remove Zabbix -server -mysql 2). Удалить веб интерфейс для работы с MySQL. # yum remove zabbix -web - * 3). Установить Zabbix сервер для работы с PostgreSQL. # yum install zabbix -server -pgsql 4). Установить веб интерфейс для работы с PostgreSQL. # yum install zabbix -web -pgsql -scl zabbix -apache -conf -scl 5). Отредактировать новый zabbix_server.conf # vi /etc/zabbix/zabbix_server.conf 6). Добавить свой пароль. # DBPassword=zabbix 7). Удалить предыдущую конфигурацию веб интерфейса (обязательно). # rm /etc/zabbix/web/zabbix.conf.php 8). Раскомментировать строку и указать свой часовой пояс. # vi /etc/httpd/conf.d/zabbix.conf 9). Запустить Zabbix Server, перезагрузить httpd. # systemctl restart zabbix -server httpd 10). Настроить веб-интерфейс для PostgreSQL.  11). Перепроверить.   12). Остановить MySQL. # systemctl stop mariadb Вы можете ознакомиться с подробными инструкциями о том, как обновить Zabbix 4.0 до текущей версии, а также как установить расширение TimescaleDB. Материалы также доступны в разделе Документация на сайте Zabbix. Смотреть видео доклада Маркетолог и копирайтер