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

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

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

Я получал следующую ошибку:

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

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

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

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

Ошибка: Не удалось подключиться к серверу базы данных: представление «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

решение1

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

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

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

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

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

У вас нет пользователя root, поскольку он был переименован в пользователя admin при первоначальной установке 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)

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

Ошибка: Не удалось подключиться к серверу базы данных: представление «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]> FLUSH TABLES;

Query OK, 0 rows affected (0.003 sec)

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

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

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

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 и убедитесь, что все они работают нормально.

Связанный контент