work:zabbix:zabbix-migration-mysql-postgresql

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
work:zabbix:zabbix-migration-mysql-postgresql [2025/01/15 11:52] rollandwork:zabbix:zabbix-migration-mysql-postgresql [2025/01/15 14:26] (текущий) rolland
Строка 149: Строка 149:
 </code> </code>
  
 +==== Настраиваем PostgreSQL ====
  
 +Создаем пользователя базы Zabbix. Я создавал с таким же именем и паролем, как в MySQL.
 +
 +<code>
 +sudo -u postgres createuser --pwprompt zabbixrd
 +</code>
 +
 +Далее создаем базу. Тоже с названием не заморачивался и брал такое же, как в MySQL.
 +
 +<code>
 +sudo -u postgres createdb -O zabbixrd zabbixrddb
 +</code>
 +
 +Применяем схему
 +
 +<code>
 +sudo -u postgres psql --host=127.0.0.1 --dbname=zabbixrddb --username=zabbixrd -f /tmp/zabbix-db-migration/create_tables.sql
 +</code>
 +
 +Для работы с **pgloader** временно ставим шифрование md5
 +
 +<code>
 +sudo -u postgres psql -c "SET password_encryption='md5';"
 +</code>
 +
 +Задаем пароль пользователя введенный выше
 +
 +<code>
 +sudo -u postgres psql -c "ALTER ROLE zabbixrd WITH PASSWORD 'password';"
 +</code>
 +
 +==== Настраиваем MySQL ====
 +
 +Для начала поправим файл **/etc/mysql/mysql.comf.d/mysqld.cnf**. Добавим в него:
 +
 +<code>
 +[mysqld]
 +...
 +default-authentication-plugin=mysql_native_password
 +</code>
 +
 +Перезапускаем службу MySQL
 +
 +<code>
 +systemctl restart mysql
 +</code>
 +
 +Меняем метод входа пользователя Zabbix. Не забываем поставить правильный пароль.
 +
 +<code>
 +mysql -e "ALTER USER 'zabbixrd'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';"
 +</code>
 +
 +Далее создаем файл **/tmp/zabbix-db-migration/pgloader.conf** с таким содержанием
 +
 +<code>
 +LOAD DATABASE
 +FROM mysql://zabbixrd:password@127.0.0.1/zabbixrddb
 +INTO postgresql://zabbixrd:password@127.0.0.1/zabbixrddb
 +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 'zabbixrddb' RENAME TO 'public';
 +</code>
 +
 +==== Миграция ====
 +
 +Останавливаем Zabbix и Apache:
 +
 +<code>
 +sudo systemctl stop zabbix-server apache2
 +</code>
 +
 +Создаем каталог для данных из MySQL
 +
 +<code>
 +mkdir /tmp/zabbix-db-migration/data
 +</code>
 +
 +Далее запускаем pgloader с конфигурацией, которую создавали выше:
 +
 +<code>
 +pgloader --root-dir=/tmp/zabbix-db-migration/data /tmp/zabbix-db-migration/pgloader.conf
 +</code>
 +
 +Все предупреждающие сообщения игнорируем. Миграция займет некоторое время, в зависимости от размера и т.п.
 +
 +После завершения, возвращаем шифрование.
 +
 +<code>
 +sudo -u postgres psql -c "SET password_encryption='SCRAM-SHA-256';"
 +</code>
 +
 +Снова задаем пользователя
 +
 +<code>
 +sudo -u postgres psql -c "ALTER ROLE zabbixrd WITH PASSWORD 'password';"
 +</code>
 +
 +Создаем схемы:
 +
 +<code>
 +sudo -u postgres psql --host=127.0.0.1 --dbname=zabbixrddb --username=zabbixrd -f /tmp/zabbix-db-migration/create_index.sql
 +
 +sudo -u postgres psql --host=127.0.0.1 --dbname=zabbixrddb --username=zabbixrd -f /tmp/zabbix-db-migration/alter_table.sql
 +
 +sudo -u postgres psql --host=127.0.0.1 --dbname=zabbixrddb --username=zabbixrd -f /tmp/zabbix-db-migration/triggers.sql
 +</code>
 +
 +Ну и рекомендуется сделать VACUUM
 +
 +<code>
 +sudo -u postgres vacuumdb --dbname=zabbixrddb --analyze --username=postgres --jobs=$(grep -c processor /proc/cpuinfo)
 +</code>
 +
 +==== Тестирование ====
 +
 +Удаляем поддержку mysql
 +
 +<code>
 +sudo apt remove zabbix-server-mysql
 +</code>
 +
 +На всякий случай сохраняем конфиг **zabbix_server.conf** .
 +
 +Ставим необходимые пакеты
 +
 +<code>
 +sudo apt install zabbix-server-pgsql php8.3-pgsql zabbix-apache-conf
 +</code>
 +
 +Удаляем конфиг mysql для Zabbix
 +
 +<code>
 +sudo rm /etc/zabbix/web/zabbix.conf.php
 +</code>
 +
 +Стартуем Zabbix и Apache
 +
 +<code>
 +sudo systemctl start zabbix-server apache2
 +</code>
 +
 +Подключаемся к нашему Zabbix через браузер и выполняем его настройку на СУБД PostgreSQL. После этого все должно заработать.
 +
 +Удаляем MysQL и все, что с ним связано.
 +
 +<code>
 +service mysql stop
 +
 +sudo apt purge mysql-server mysql-common mysql-server-core-* mysql-client-core-*
 +
 +sudo rm -Rf /var/lib/mysql/
 +
 +sudo rm -Rf /etc/mysql/
 +
 +sudo rm -Rf /var/log/mysql/
 +
 +sudo deluser --remove-home mysql
 +</code>
 +
 +==== Установка TimescaleDB ====
 +
 +А теперь еще одна плюшка. Ставим TimescaleDB для улучшения работы с Zabbix.
 +
 +Подключаем репозиторий
 +
 +<code>
 +echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
 +</code>
 +
 +Про ключ не забываем
 +
 +<code>
 +wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/timescaledb.gpg
 +</code>
 +
 +Обновим список
 +
 +<code>
 +sudo apt update
 +</code>
 +
 +Ставим необходимое
 +
 +<code>
 +sudo apt install timescaledb-2-postgresql-17 timescaledb-2-loader-postgresql-17
 +</code>
 +
 +Выполняем настройку. Проще всего на все ответить "да".
 +
 +<code>
 +sudo timescaledb-tune
 +</code>
 +
 +Останавливаем сервер Zabbix
 +
 +<code>
 +sudo systemctl stop zabbix-server
 +</code>
 +
 +Перезапустим postgresql
 +
 +<code>
 +sudo systemctl restart postgresql
 +</code>
 +
 +Подключаем расширение к Zabbix
 +
 +<code>
 +echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql --dbname=zabbixrddb
 +</code>
 +
 +И выполняем скрипт для конвертации данных. Занимает некоторое время.
 +
 +<code>
 +sudo -u postgres psql --host=127.0.0.1 --dbname=zabbixrddb --username=zabbixrd -f /usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql
 +</code>
 +
 +Запускаем Zabbix
 +
 +<code>
 +sudo systemctl start zabbix-server
 +</code>
 +
 +Помогли в написании источники: https://www.initmax.com/wiki/zabbix-migration-from-mysql-to-postgresql/ https://interface31.ru/tech_it/2024/07/ustanovka-zabbix-7-c-nginx-postgresql-timescaledb-na-ubuntu-server.html https://rutube.ru/video/f393860f271726b94d9a1467a871c1da/
  • work/zabbix/zabbix-migration-mysql-postgresql.1736931171.txt.gz
  • Последнее изменение: 2025/01/15 11:52
  • rolland