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