Почему MySQL/MariaDB в Linux не пускает под root
В современных дистрибутивах Linux (таких как Gentoo, Ubuntu, Debian и др.) MySQL и MariaDB по умолчанию используют плагин аутентификации auth_socket (или unix_socket).
Этот плагин привязывает авторизацию в базе данных к вашей текущей сессии в операционной системе. Он проверяет, совпадает ли имя системного пользователя Linux с именем пользователя, под которым вы пытаетесь войти в СУБД.
Из-за этого логика работы выглядит следующим образом:
- Если вы в терминале Linux авторизованы как обычный пользователь (например, user), то при выполнении mysql -u root -p система безопасности MySQL видит, что запрос идет от имени user, а не root, и блокирует подключение, даже если вы вводите правильный пароль.
- Если вы введете sudo mysql (вызов от имени системного root), плагин успешно сопоставит имена, и вас впустит без ввода пароля базы данных.
Это сделано из соображений безопасности, чтобы защитить суперпользователя базы данных от подбора паролей извне.
Как разрешить вход по паролю для root в MySQL
Если вы хотите подключаться к MySQL под учетной записью root из-под любого пользователя Linux, используя обычный пароль, вам необходимо изменить плагин аутентификации на стандартный.
Войдите в MySQL из под root:
Смените плагин аутентификации и установите свой пароль, выполнив команду в консоли MySQL:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'ваш_надежный_пароль'; FLUSH PRIVILEGES;
Выйдите из СУБД (exit). Теперь вы сможете подключаться из-под обычного пользователя Linux по классической схеме:
Как разрешить вход по паролю для root в MariaDB
В MariaDB логика работает точно так же, но используется плагин под названием unix_socket.
Если у вас установлена именно MariaDB, команда для переключения на классический вход по паролю будет немного отличаться от MySQL.
Войдите в консоль MariaDB, используя права системного суперпользователя:
или sudo mysql, если эта команда привычнее — в MariaDB они взаимозаменяемы.
Выполните команду, которая отключит плагин unix_socket и установит обычный пароль:
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('ваш_новый_пароль');
FLUSH PRIVILEGES;
Выйдите из консоли MariaDB (exit). Теперь вы сможете подключаться из-под любого пользователя Linux стандартной командой:

