Назад | Перейти на главную страницу

Невозможно создать или удалить базу данных на сервере Plesk

Сегодня я понял, что не могу добавлять или удалять базы данных, принадлежащие любому из моих клиентов, на моем сервере Plesk.

Я получал эту ошибку:

Ошибка: невозможно удалить некоторые из выбранных баз данных. Пользователь, указанный как определитель ('root' @ 'localhost'), не существует

Итак, я нашел и запустил это исправление:

# plesk db
# CREATE USER 'root'@'localhost' IDENTIFIED BY 'typepasswordhere';

Теперь при попытке добавить или удалить базу данных я получаю новую ошибку:

Ошибка: соединение с сервером базы данных не удалось: View 'mysql.user' ссылается на недопустимые таблицы (ы) или столбец (ы) или функцию (ы) или определитель / инициатор просмотра не имеет прав на их использование

(Я не уверен, связано это или нет, но я обновил MariaDB несколько дней назад. Я почти уверен, что после этого создал новую базу данных).

CentOS Linux 7.7.1908 (Core) Plesk Onyx, версия 17.8.11, обновление # 80, mysql 10.4.11-1.el7.centos 10.4.11-MariaDB MariaDB Server

Немного поздно, но может быть полезно кому-то другому.

Сообщается об ошибке MariaDB, когда безопасная установка, требуемая Plesk, работает некорректно.

Начиная с версии 10.4 mysql_secure_installation застревает в самом начале выполнения, если в базе данных нет root @ localhost и сценарий выполняется под другим суперпользователем.

Это приводит к невозможности переключить определителя с «root» на другого пользователя (администратора, как того требует Plesk).

https://jira.mariadb.org/browse/MDEV-22486

У вас нет пользователя root, поскольку он был переименован при начальной установке Plesk в пользователя с правами администратора.

Таким образом, в результате этого Plesk не смог подключиться к базе данных, потому что определитель не был изменен с root на admin из-за сбоя безопасной установки во время установки или обновления.

И любое действие не срабатывает с этой ошибкой:

[root@hostname ~]# plesk db
...
MariaDB [psa]> SELECT User FROM mysql.user;
ERROR 1449 (HY000): The user specified as a definer ('root'@'localhost') does not exist

Решением для этого является создание пользователя root @ localhost:

MariaDB [psa]> CREATE USER root@localhost IDENTIFIED VIA unix_socket USING 'invalid';
Query OK, 0 rows affected (0.015 sec)

Чтобы не получить эту ошибку:

Ошибка: соединение с сервером базы данных не удалось: View 'mysql.user' ссылается на недопустимые таблицы (ы) или столбец (ы) или функцию (ы) или определитель / инициатор просмотра не имеет прав на их использование

Предоставить привилегии:

MariaDB [psa]> GRANT SELECT ON *.* TO root@localhost IDENTIFIED VIA unix_socket; Query OK, 0 rows affected (0.533 sec)simply grant privileges for the new user:

После этого операции с базой данных будут работать в Plesk. Но хорошо удалить ненужного пользователя с полным доступом к базе данных (это хорошо для безопасности), вам нужно изменить DEFINER обратно на admin (я сделал это вручную в файле, но вы можете выполнить это через ALTER VIEW в MySQL):

[root@localhost]# grep root /var/lib/mysql/mysql/*.frm
user.frm:definer_user=root
>>>
[root@localhost]# grep root /var/lib/mysql/mysql/*.frm
user.frm:definer_user=admin

Очистите таблицы, чтобы применить изменения:
MariaDB [psa]> ПРОМЫВИТЬ ТАБЛИЦЫ;

Query OK, 0 rows affected (0.003 sec)

После этого убедитесь, что определитель изменен:

MariaDB [psa]> SHOW CREATE VIEW mysql.user;
...
| user | CREATE ALGORITHM=UNDEFINED DEFINER=`admin`@`localhost` 

И удалите пользователя корневой базы данных:

MariaDB [psa]> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'localhost';

Query OK, 0 rows affected (0.114 sec)



MariaDB [psa]> DROP USER 'root'@'localhost';

Query OK, 0 rows affected (0.025 sec)

Проверьте действия Plesk DB и убедитесь, что все они работают нормально.