work:zabbix:zabbix-migration-mysql-postgresql

Это старая версия документа!


Предыстория:

Zabbix сервер начал что-то периодически нагружать процессор под 30-40%. Вывод htop на сервере показал, что виновник MySQL. Он давал периодами нагрузку под 100%. Было решено перейти на PostgreSQL, ну и заодно пощупать TimescaleDB.

Сервер у нас трудится под Ubuntu Server 24.04, Zabbix 7.0.8.

Приступим.

Сначала подключаем репозиторий 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://wwww.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Если получаем сообщение

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

То должно помочь

apt-key export ACCC4CF8 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/postgresql.gpg

Мне не помогло:) Выкрутился так:

sudo wget http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc

А затем:

sudo apt-key add ACCC4CF8.asc

Ну и ставим сам PostgreSQL

sudo apt -y install postgresql

Далее ставим утилиту pgloader для миграции данных. Собирать будем её из исходников.

Ставим зависимости:

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

Качаем актуальную версию. На текущий момент 3.6.9

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

И спобираем

make pgloader

Ну и для приличия перемещаем

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

Создаем временный каталог для исходников нашей версии Zabbix

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

Скачиваем архив с нашей версией Zabbix с официального сайта

wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.8.tar.gz

Распаковываем

tar -zxvf zabbix-7.0.8.tar.gz

Переходим в распакованный каталог, где у нас лежит схема для PostgreSQL

cd /tmp/zabbix-db-migration/zabbix-7.0.8/database/postgresql/

Выбираем из схемы только операции создания таблиц и триггеров и сохраняем их в отдельный файл в корне папки для миграции

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

Удаляем из него строки, отвечающие за создания триггеров

sed -i '/create\ or\ replace\ function/,$d' /tmp/zabbix-db-migration/create_tables.sql

Из оригинального файла схемы забираем относящееся к триггерам

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

Теперь все относящееся к индексам

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

И еще ALTER

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

Создаем пользователя базы Zabbix. Я создавал с таким же именем и паролем, как в MySQL.

sudo -u postgres createuser --pwprompt zabbixrd

Далее создаем базу. Тоже с названием не заморачивался и брал такое же, как в MySQL.

sudo -u postgres createdb -O zabbixrd zabbixrddb

Применяем схему

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

Для работы с pgloader временно ставим шифрование md5

sudo -u postgres psql -c "SET password_encryption='md5';"

Задаем пароль пользователя введенный выше

sudo -u postgres psql -c "ALTER ROLE zabbixrd WITH PASSWORD 'password';"
  • work/zabbix/zabbix-migration-mysql-postgresql.1736932689.txt.gz
  • Последнее изменение: 2025/01/15 12:18
  • rolland