Сегодня я понял, что не могу добавлять или удалять ни одну из баз данных, принадлежащих ни одному из моих клиентов на моем сервере 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 и убедитесь, что все они работают нормально.