Почему не удалось перенести базу zabbix?
имеем 2 сервера
Zabbix "all in one" zabbix 6.4, postgres 13
PGSRV сервер для размещения баз Postgres 15
на Zabbix
остановил zabbix server
переименовал базу zabbix в zabbix_two(так как на втором есть уже база заббикс)
выгрузил базу(pg_dump -U zabbix -h localhost -O -d zabbix_2 -f zabbix_two.dump)
исправил DBHost,DBName,DBUser,DBPassword
на PGSRV
создал базу zabbix_two
создал пользователя zabbix_user2
залил в нее базу (psql -d zabbix_two -f zabbix_two.dump)
законфигурил pg_hba
host zabbix_two zabbix_user2 10.111.222.333/32 md5 |
host zabbix_two zabbix_user2 10.111.222.333/32 md5
ошибки в логе
[Z3005] query failed: [0] PGRES_FATAL_ERROR:ERROR: permission denied for table users [select userid from users limit 1] cannot use database "zabbix_two": database is not a Zabbix database |
[Z3005] query failed: [0] PGRES_FATAL_ERROR:ERROR: permission denied for table users [select userid from users limit 1] cannot use database "zabbix_two": database is not a Zabbix database
Дополнительно:
- запустили намеренно pg_dump с отказом -O - то есть --no-owner
- развернули дамп от супера
- все объекты теперь ожидаемо принадлежат суперу, owner'а же не переносили
- удивляемся, что постороннему пользователю нет прав чтения
Что же тут могло пойти не так?
Самое простое для баз с одним пользователем - импортируйте дамп базы от имени этого самого пользователя. Если в базе есть какие-то extension - то сперва их создать от суперпользователя.
- забыл добавить, я менял owner'a
изменил owner'a
ALTER DATABASE zabbix_two OWNER TO zabbix_user2;
команда lzabbix_two | zabbix_user2 | en_US.UTF-8| и так далее
zabbix_two | zabbix_user2 | en_US.UTF-8| и так далее
проверил dt, а владелец таблиц суперюзер
а как то можно сменить владельца таблиц разом? - 2 заход
выгрузка(не как в прошлый раз sql скрипт, а пригодный для pg_restore)pg_dump -U zabbix -h localhost -O -d zabbix_net -F c -f zabbix_two.dump
pg_dump -U zabbix -h localhost -O -d zabbix_net -F c -f zabbix_two.dump
изменил в pg_hba.com (кажется это тупиковый путь, надо было как то добавить пользователя для авторизации типа peer)
local all all md5
загрузкаpg_restore --username zabbix_user2 --password --dbname zabbix_two --no-owner --no-privileges zabbix_two.dump
pg_restore --username zabbix_user2 --password --dbname zabbix_two --no-owner --no-privileges zabbix_two.dump
ошибки типа
pg_restore: error: could not execute query: ERROR: permission denied for table
pg_restore: error: could not execute query: ERROR: must be owner of table token
pg_restore: warning: errors ignored on restore: 1218или я не так понял сточку "Самое простое для баз с одним пользователем - импортируйте дамп базы от имени этого самого пользователя."
- базу-то пересоздали перед второй попыткой импорта?
ALTER DATABASE zabbix_two OWNER TO zabbix_user2;
не вы первый для кого это неожиданно, но owner базы даёт права только на саму базу. То есть CREATE (создание новых схем, публикаций, trusted extensions (замечу, даже не create table, оно в грантах уровня schema)), CONNECT (возможность подключиться к этой базе), TEMPORARY (возможность сделать create temp table) но ничего сверх этого. Никаких рекурсивно выданных прав на объекты внутри этой базы.
а как то можно сменить владельца таблиц разом?
написать запрос, который сформирует список (внимательно не зацепить системный каталог) alter table .. owner .. и выполнить полученные alter'ы. Плюс аналогично сиквенсы и что ещё было.
для обычных дел есть reassign owned, но оно будет плохой идеей для смены владельца с суперпользователя на обычную учётку. Зацепит много лишнего и возможно даже с фейерверками
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для успешного переноса базы данных Zabbix необходимо учитывать несколько важных моментов. Вот несколько возможных причин, почему у вас не получилось перенести базу Zabbix:
1. Неправильно настроенные параметры подключения к базе данных: Перед переносом базы данных убедитесь, что вы правильно сконфигурировали параметры подключения к базе данных в файле конфигурации Zabbix. Убедитесь, что указан правильный хост, порт, имя пользователя и пароль для подключения к базе данных.
DBHost=localhost DBName=zabbix DBUser=zabbix_user DBPassword=your_password
2. Отсутствие необходимых прав доступа к базе данных: Убедитесь, что у пользователя, под которым вы пытаетесь перенести базу данных, есть достаточные права доступа к базе данных. Пользователь должен иметь права на создание таблиц, вставку данных и т.д.
3. Неправильный формат дампа базы данных: При экспорте базы данных убедитесь, что используете правильный формат дампа (например, SQL или XML) и что файл дампа не поврежден.
4. Конфликты версий: При переносе базы данных между разными версиями Zabbix может возникнуть конфликт из-за изменений в структуре базы данных. Убедитесь, что версии Zabbix на исходном и целевом серверах совпадают или совместимы.
5. Недостаточно свободного места на диске: При переносе базы данных может понадобиться значительное количество свободного места на диске. Убедитесь, что у вас достаточно места для сохранения дампа базы данных и временных файлов.
6. Неправильно настроенные параметры PHP: Если вы используете PHP для выполнения скриптов или утилит для переноса базы данных, убедитесь, что PHP настроен правильно и имеет необходимые расширения для работы с базой данных.
Если вы уверены, что все вышеперечисленные моменты были учтены, но проблема все равно остается, попробуйте выполнить перенос базы данных поэтапно, отслеживая каждый шаг и проверяя возможные ошибки. Если проблема сохраняется, обратитесь за помощью к сообществу или специалистам по Zabbix для получения более конкретной поддержки.