Если вы захотите настроить резервное копирование базы данных на другой сервер, или протестировать соединение с базой данных из другого сервера. И тогда вы можете столкнуться с ошибкой access denied for user root localhost, даже если вы указали верное имя пользователя, базу данных и пароль.
В этой небольшой статье мы рассмотрим почему возникает эта ошибка, а также как ее исправить и подключиться к MySQL из другого сервера через интернет.
Содержание статьи
- Что означает access denied for user root localhost?
- Исправляем ошибку access denied for user root localhost
- Выводы
Что означает access denied for user root localhost?
Если переводить дословно, то эта ошибка означает что у вас нет доступа к данной базе данных от имени этого пользователя. В примере я использовал пользователя root, но вы можете использовать и другого пользователя. Это может быть вызвано несколькими причинами:
- Пароль введен неверно;
- По каким-либо причинам у пользователя нет прав на доступ к базе данных;
- В настройках этого пользователя запрещено авторизоваться с этого сервера;
Для безопасности базы данных в mysql была придумана настройка хоста, из которого пользователь может авторизоваться. По умолчанию для пользователей устанавливается разрешение на авторизацию только с localhost. Чтобы разрешить подключение с других хостов, нужно менять настройки. Рассмотрим как это делается с помощью Phpmyadmin и в терминале.
Исправляем ошибку access denied for user root localhost
1. Подключение с другого хоста
Сначала рассмотрим как работать с Phpmyadmin. Это намного проще для начинающих и тех, кто не любит работать в терминале. Откройте Phpmyadmin, авторизуйтесь в программе с правами root и перейдите на вкладку "Учетные записи пользователей":
Здесь, вы увидите, кроме обычных полей, поле "имя хоста", которое указывает с какого хоста может подключаться пользователь. Если в этом поле написано localhost, значит этот пользователь может авторизоваться только с локальной машины. Также, в этом поле может находиться IP адрес, с которого есть разрешение или символ %, который означает, что пользователь может подключаться с любого IP.
Чтобы изменить права для пользователя, нужно нажать на ссылку "Редактировать привилегии" для него, на открывшейся странице перейдите на вкладку "Информация об учетной записи":
Затем установите в поле "Имя хоста" значение "Любой хост" чтобы разрешить этому пользователю авторизоваться с любого IP. Если вы хотите разрешить только определенный IP, выберите "Использовать текстовое поле" и укажите нужный адрес или подсеть:
После этого останется нажать кнопку "Вперед" чтобы сохранить настройки. Если вам нужно чтобы был доступ и с локального IP, и с другого, то необходимо создать еще одного пользователя. После этого вы сможете авторизоваться от имени этого пользователя.
Теперь рассмотрим другой способ решить ошибку 1045 access denied for user root localhost, с помощью терминала. Это немного проще, поскольку вам нужно только выполнить несколько команд:
mysql
Уже после этого, вы можете подключаться к серверу баз данных с любого другого компьютера и не получите никаких ошибок. Вместо символа %, можно указать нужный ip или localhost, если ограничение нужно вернуть обратно.
2. Неверный пароль root
Иногда случается, что при установке базы данных пароль для root задается, но вы его не знаете. Поскольку это главный пользователь и если вы не можете войти от его имени, то вы не сможете ничего исправить. Сначала попробуйте авторизоваться от имени root в системе и подключиться к базе без пароля:
mysql
Иногда это работает. Если не сработало, остановите службу mysql и запустите ее без проверки безопасности, а затем попробуйте снова:
systemctl stop mysqld
mysqld --skip-grant-tables
mysql
Еще можно попытаться выдать права над всеми таблицами нашему пользователю, если это необходимо:
Обратите внимание на хост localhost, если вы хотите чтобы удаленные узлы тоже могли подключаться к этому пользователю, то нужно использовать %. Дальше можно перезапустить базу данных и работать как обычно.
Выводы
Теперь вы знаете как решается mysql access denied for user root localhost и что делать в таких ситуациях, чтобы решить проблему. Надеюсь, эта информация была полезной для вас. Если у вас остались вопросы, спрашивайте в комментариях!
https://youtu.be/avnitMoiJww
Во-первых, необходимо установить пароль для пользователя root, поскольку для него пароль не установлен. Заходим в терминал, начинаем сессию root, выполняем mysql
Таким образом мы попадаем в командную оболочку mysql
Далее выбираем базу use mysql;
Затем устанавливаем пароль update user set authentication_string=PASSWORD('123');
Обратить внимание, что число взято в кавычки, чтобы быть текстовым типом. Если забудете про кавычки, есть риск, что не войдете с таким паролем. Тут нужно пробовать, чтобы точно узнать этот момент.
Пароль мы установили, но есть еще нюанс. Вероятно, что пользователю root пароль вообще не требуется для входа. Выполните команду select Host, User, authentication_string, plugin from user; - в поле plugin у пользователя root должно стоять значение mysql_native_password , чтобы входить по паролю. Если это не так, изменить значение.
После этого FLUSH PRIVILEGES и на выход из командной оболочки.
Перезапустите сервер БД.
Теперь должен быть доступен вход по логину и паролю root как непосредственно из под прав root'а, так и из под обычных пользователей. При этом вход без пароля, осуществляемый из учетной записи root'а, больше недоступен.