MySQL 1698: Access denied for user 'root'@'localhost' — как войти
В Ubuntu пользователь root в MySQL и MariaDB входит без пароля базы, но только из-под sudo. Наберите sudo mysql, а для сайта и программ заведите отдельного пользователя с паролем.
Содержание 8
Как выглядит ошибка
ivan@myserver:~$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'Ошибка будет, какой бы пароль вы ни ввели, и даже если просто нажать Enter.
Почему так
При установке из пакетов Ubuntu пользователь root в базе получает особый способ входа. База проверяет не пароль, а то, от имени какого пользователя системы запущена команда. Пускает она только root системы — то есть команду, запущенную через sudo.
- В MySQL этот способ называется auth_socket.
- В MariaDB — unix_socket. Пароль для root там тоже не задан, поэтому войти по паролю нельзя.
Это сделано для безопасности: подобрать пароль к root нельзя, потому что пароля нет. Войти может только тот, у кого есть права администратора на самом сервере.
Как войти
sudo mysqlЕсли система спросит пароль, введите пароль своего пользователя на сервере, а не пароль базы. Символы при вводе не видны — так и должно быть, просто наберите пароль и нажмите Enter. Строка ввода сменится на mysql> у MySQL или на MariaDB [(none)]> у MariaDB: теперь можно вводить команды для базы. Каждая команда заканчивается точкой с запятой. Выйти обратно — команда exit.
Команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
Для сайта заведите отдельного пользователя
Сайту и программам sudo недоступен, поэтому им нужен свой пользователь с паролем и правами только на свою базу. Войдите через sudo mysql и выполните три команды — вместо base подставьте имя базы, вместо ivan — имя пользователя, вместо новый-пароль — свой пароль:
CREATE DATABASE base CHARACTER SET utf8mb4;
CREATE USER 'ivan'@'localhost' IDENTIFIED BY 'новый-пароль';
GRANT ALL PRIVILEGES ON base.* TO 'ivan'@'localhost';Если база уже есть, первую команду пропустите. Выйдите командой exit и проверьте вход нового пользователя:
mysql -u ivan -p baseЭти имя, пароль и базу впишите в настройки сайта. Если MySQL ответил ошибкой 1819, пароль слишком простой — разбор.
Не переводите root на вход по паролю
Если задать root пароль, к пользователю с полными правами появится вход по паролю, а пароль можно подобрать. Отдельный пользователь для каждого сайта надёжнее: если пароль сайта утечёт, пострадает только его база.
mysql_secure_installation в Ubuntu
Программа mysql_secure_installation из пакета MySQL в Ubuntu не задаёт пароль root. Вместо этого она пишет:
Skipping password set for root as authentication with auth_socket is used by default.Это не ошибка: так и задумано, root по-прежнему входит через sudo mysql.
Тексты ошибок и настройки сверены с исходным кодом MySQL 8.0.46 и MariaDB 10.11.14 — эти версии ставятся из пакетов Ubuntu 24.04. В других версиях строки могут немного отличаться.
Источники
- Пакет MySQL в Ubuntu 24.04: mysql-server-8.0.postinst — root получает вход через auth_socket.
- Пакет MySQL в Ubuntu 24.04: mysql_secure_installation-remove-root-pw-creation.patch — почему mysql_secure_installation в Ubuntu не задаёт пароль root.
- Исходный код MySQL 8.0.46: auth_socket.cc — способ входа auth_socket.
- Исходный код MySQL 8.0.46: sql_authentication.cc — какая ошибка выдаётся при отказе.
- Исходный код MariaDB 10.11.14: mysql_system_tables_data.sql — root входит через unix_socket.
- Исходный код MariaDB 10.11.14: sql_acl.cc — выбор между ошибками 1045 и 1698.
- Пакет MariaDB в Ubuntu 24.04: mariadb-server.README.Debian — вход root через unix_socket.
- Исходный код MySQL 8.0.46: messages_to_clients.txt — тексты ошибок сервера MySQL.
Сверено 10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026