Не могу войти в mysql через консоль
Если при попытке входа в phpMyAdmin вы видите ошибку:
то данная статья поможет вам разобраться в проблеме и устранить её.
MySQL 5.7 изменила модель безопасности: теперь вход в MySQL под рутом (root) требует sudo (при этом пароль всё равно может быть пустым). Т.е. phpMyAdmin невозможно использовать под пользователем рутом. Подробное объяснение смотрите в статье Аутентификация по паролю и unix_socket в MySQL и MariaDB.
Самым простым (и самым безопасным) решением будет создать нового пользователя и предоставить ему требуемые привилегии.
Но начнём мы с другого решения:
Разрешить пользователю root подключаться к MySQL и MariaDB без sudo
Для получения доступа к базе данных MySQL/MariaDB обычному пользователю без использования sudo привилегий, зайдите в приглашение командной строки MySQL
и запустите следующие команды:
Переключиться на аутентификацию по паролю можно следующим SQL запросом:
Обратите внимание, что вам нужно ввести ПАРОЛЬ.
Затем попробуйте войти в базу данных без sudo, как показано ниже.
Это устаревший метод, он не работает в новых версиях MariaDB, но может по-прежнему работать в MySQL.
Для получения доступа к базе данных MySQL/MariaDB обычному пользователю без использования sudo привилегий, зайдите в приглашение командной строки MySQL
и запустите следующие команды:
Затем перезапустите службу MySQL и попробуйте войти в базу данных без sudo, как показано ниже.
Ошибки запрета доступа в MySQL
В MySQL учётная запись (УЗ) определяется именем пользователя и клиентским хостом, с которого пользователь может подключиться. УЗ может также иметь данные для аутентификации (например, пароль).
Причин для запрета доступа может быть много. Одна из них связана с учётными записями MySQL, которые сервер разрешает использовать клиентским программам при подключении. Это означает, что имя пользователя, указанное в соединении, может не иметь прав доступа к базе данных.
В MySQL есть возможность создавать учётные записи, позволяющие пользователям клиентских программ подключаться к серверу и получать доступ к данным. Поэтому при ошибке доступа проверьте разрешение УЗ на подключение к серверу через клиентскую программу.
В консоли вводим команду:
Дать привилегии конкретному пользователю в БД по IP-адресу можно, используя следующие команды:
Ошибки запрещённого доступа могут также возникнуть из-за проблем с подключением к MySQL (см. выше).
Не удаётся подключиться к локальному серверу
Одной из распространённых ошибок подключения клиента к серверу является «ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)».
Эта ошибка означает, что на хосте не запущен сервер MySQL ( mysqld ) или вы указали неправильное имя файла сокета Unix или порт TCP/IP при попытке подключения.
Убедитесь, что сервер работает. Проверьте процесс с именем mysqld на хосте сервера, используя команды ps или grep, как показано ниже.
Если эти команды не показывают выходных данных, то сервер БД не работает. Поэтому клиент не может подключиться к нему. Чтобы запустить сервер, выполните команду systemctl.
Чтобы проверить состояние службы MySQL, используйте следующую команду:
Если в результате выполнения команды произошла ошибка службы MySQL, вы можете попробовать перезапустить службу и ещё раз проверить её состояние.
Если сервер работает (как показано) и вы по-прежнему видите эту ошибку, вам следует проверить, не заблокирован ли порт TCP/IP брандмауэром или любой другой службой блокировки портов.
Для поиска порта, который прослушивается сервером, используйте команду netstat .
Заключение
Самое важное при диагностике — понять, что именно вызвало ошибку. Следующие шаги помогут вам в этом:
I'm setting up a new server and keep running into this problem.
When I try to log into the MySQL database with the root user, I get the error:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
It doesn't matter if I connect through the terminal (SSH), through phpMyAdmin or a MySQL client, e.g., Navicat. They all fail.
As you can see, user root should have access.
The Server is quite simple, as I have tried to troubleshoot this for a while now.
It's running Ubuntu 16.04.1 LTS (Xenial Xerus) with Apache, MySQL and PHP, so that it can host websites, and iRedMail 0.9.5-1, so that it can host mail.
Log into the MySQL database works fine before I installed iRedMail. I also tried just installing iRedMail, but then root also doesn't work.
How can I fix my MySQL login problem or how can I install iRedMail over an existing MySQL install? And yes, I tried the Installation Tips and I can't find those variables in the configuration files.
On 2022-03-02, this was the number one search engine hit for " MySQL client ERROR 1698 28000 Access denied for user ".
Связанные статьи:
Слишком много подключений
Эта ошибка означает, что все доступные соединения используются клиентскими программами. Количество соединений (по умолчанию 151) контролируется системной переменной max_connections . Устранить проблему можно, увеличив значение переменной в файле конфигурации /etc/my.cnf .
Потеря соединения с сервером MySQL
С этой ошибкой можно столкнуться по одной из следующих причин:
- плохое сетевое соединение;
- истекло время ожидания соединения;
- размер BLOB больше, чем max_allowed_packet .
В первом случае убедитесь, что у вас стабильное сетевое подключение (особенно, если подключаетесь удалённо).
Если проблема с тайм-аутом соединения (особенно при первоначальном соединении MySQL с сервером), увеличьте значение параметра connect_timeout .
В случае с размером BLOB нужно установить более высокое значение для max_allowed_packet в файле конфигурации /etc/my.cnf в разделах [mysqld] или [client] как показано ниже.
Если файл конфигурации недоступен, это значение можно установить с помощью следующей команды.
Не удаётся подключиться к серверу MySQL
Ещё одна похожая и часто встречающаяся ошибка подключения — «(2003) Can’t connect to MySQL server on ‘server’ (10061)». Это означает, что в сетевом соединении было отказано.
Следует проверить, работает ли в системе сервер MySQL (смотрите выше) и на тот ли порт вы подключаетесь (как найти порт, можно посмотреть выше).
Похожие частые ошибки, с которыми вы можете столкнуться при попытке подключиться к серверу MySQL:
Недостаточно памяти
Если такая ошибка возникла, это может означать, что в MySQL недостаточно памяти для хранения всего результата запроса.
Сначала нужно убедиться, что запрос правильный. Если это так, то нужно выполнить одно из следующих действий:
- если клиент MySQL используется напрямую, запустите его с ключом --quick switch , чтобы отключить кешированные результаты;
- если вы используете драйвер MyODBC, пользовательский интерфейс (UI) имеет расширенную вкладку с опциями. Отметьте галочкой «Do not cache result» (не кешировать результат).
Также может помочь MySQL Tuner. Это полезный скрипт, который подключается к работающему серверу MySQL и даёт рекомендации по настройке для более высокой производительности.
Рекомендуемые статьи:
23 Комментарии
Пипец, почти всю ночь промучился с этим вопросом и чего только не перепробовал, а в итоге… Как вы говорите:
"MySQL 5.7 изменила модель безопасности: теперь вход в MySQL под рутом (root) требует sudo (при этом пароль всё равно может быть пустым). Т.е. phpMyAdmin невозможно использовать под пользователем рутом."
Нет, вы "врубитесь" еще раз:
"MySQL 5.7 изменила модель безопасности: теперь вход в MySQL под рутом (root) требует sudo"
Потратил столько времени и сил, а Вы описали суть проблемы всего несколькими словами.
Создал нового пользователя 'phpMyAdmin' и всё заработало.
Огромное СПАСИБО за помощь!
P.S. Ранее таких трудностей не было - при установке MySQL он просил указать пароль для root после чего всё работало без проблем. В этот же раз при установке пароль для root не спрашивало и после под root пускало только с sudo (phpMyAdmin таким образом не мог авторизоваться). Не зная о изменении модели безопасности я и попал в тупик 🙁
и запустите следующие команды:
Затем перезапустите службу MySQL и попробуйте войти в базу данных без sudo, как показано ниже.
После этих манипуляций совсем зайти не могу
Аналогичная проблема, помогло это
Братик, дай расцулую в дёсна!
Я после тебя !
Мда. Теперь тупо не пускает, на все комманды: mysql, mysql -u root -p, Enter password: Ответ один: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Такая ошибка возникает при неправильном имени пользователя или пароле. Если вы вводили команды из статьи или из комментариев, в некоторых из них вместо заполнителя нужно ввести свой новый пароль. Видимо, вы этого не сделали.
Спасибо, очень помогло!
Спасибо автор, у тебя отличный сайт! В закладки!
Привет, где запускать эти команды?
вот скриншот раньше вводил все было нормально, а после переустановки вот такая ошыбка.
Здесь решение для ошибки 1698, а у вас ошибка 1045. При установке (обновлении) у вас должен был запроситься пароль для root.
Если это какая-то сборка, то спросите на официальном сайте.
Если это официальная MySQL/MariaDB то можно просто сбросить пароль root. Но для этого вам нужно найти файл mysqld.exe — он в той папке, где установлена MySQL.
Если найдёте этот файл, то откройте командную строку, для этого нажмите Win+r и введите cmd и нажмите Enter. В открывшееся окно перетащите этот файл, добавьте опцию --version и нажмите Enter:
Должно вывестись что-то вроде такого:
Если всё получится, то напишите сюда, скажу что делать дальше.
вот что у меня получилось
Для начала попробуйте следующие учётные данные:
Если не поможет, видимо авторы Open Server говорят пароль входа только тем, кто сделал донат ))))))))
В общем если не поможет, то перейдите к статье «Как сбросить пароль root MySQL или MariaDB в Windows» которую я специально написал по вашему вопросу, там всё подробно и пошагово описано как сбросить забытый пароль MySQL и MariaDB.
спасибо огромное помогло ввести пароль рут)
Ребята, выручайте. Всё перепробовал.
После нескольких попыток восстановить пароль(который был по умолчанию без пароля, то есть не пускало без пароля) перестало заходить и через sudo mysql. Я удалил полностью по мануалу. Далее начал устанавливать и теперь заходит через sudo mysql.
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)
Как было указано в мануале установил MEDIUM пароль: '12345678'
И всё-равно при входе ошибка 1698:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
То есть если при установке не ставишь пароль, он говорит пароль неверный. Если ставишь пароль, то всё-равно пароль неверный. Что я делаю не так?
Вы устанавливали пароль root’а с помощью mysql_secure_installation? Единственная идея, что вы как-то неправильно установили пароль.
Да, устанавливал. Без установки пароля всё-равно просит его ввести. После первой установки я не трогал пароль, то есть его не должно было быть. По идее оставляешь поле пустым, жмёшь enter и должно войти, но там была эта же ошибка 1698. Так я нашёл эту статью. Пробовал варианты восстановления пароля отсюда, на каком то из этапов словил ошибку. После чего перестало полностью пускать даже через sudo, удалил полностью, переустановил с паролем и всё-равно не работает. Какой пароль нужно установить, чтобы он работал? Спасибо.
Проблема решена. Для тупых как я нужен манул "Как правильно придумать пароль, чтобы система его приняла".
Я написал 8 строчных букв, одну заглавную, одну цифру и один спец символ(например: qwertyuiQ1!). Пароль принят и теперь заходит в учётку. Думаю у большинства новичков такая же ошибка. 3 дня потратил на это, ужас!
Кстати, требования к паролю можно изменить, об этом написано тут.
Корень проблемы в том, что по умолчанию пароль должен был отсутствовать, но в систему не пускало без пароля. На этапе установки программа в принципе не спрашивает про пароль. Скорее всего первым делом нужно включить поддержку паролей(как описано в одном из ваших мануалов, а может и зарубежных, их тоже курил). Почему то у меня по умолчанию эта функция была не активна. После включения функции даёт создать учётку и передать права.
Второй проблемой стало то, что при установке некорректного пароля(до включения поддержки паролей) система не ругается как будто всё хорошо и пароль принят. При попытке зайти по установленному вручную паролю выдаёт ошибку как в самом начале.(В этом моменте каждый начинает паниковать и перебирать все способы пока не сломает всё окончательно :))
После включения поддержки паролей при попытке установить некорректный пароль получаем, наконец-то, ошибку несоответствия и там уже проще разобраться. Вбиваем ошибку в поиск и находим требования к созданию пароля. По умолчанию поддержка паролей отключена, но не пускает. Бред короче 🙂
Итог: заходим через комманду sudo mysql, включаем поддержку паролей validate_password (
select plugin_name, plugin_status from information_schema.plugins where plugin_name like 'validate%' ;
install plugin validate_password soname 'validate_password.so' ;
, создаём новую учётку с логином вместо root (например: 'admin') с корректным паролем(например: 'qwertyuiQ!1') и передаём ей все права (
CREATE USER 'admin' @ '%' IDENTIFIED BY ' qwertyuiQ!1 ';
GRANT ALL PRIVILEGES ON *.* TO 'admin' @ '%' WITH GRANT OPTION ;
Далее уже входим в новую учётку( через команду: mysql -u admin -p). Скорее всего такая последовательность.
P.S: Раньше видимо поддержка пароля работала со старта и пускала в систему либо без пароля, либо с паролями навроде root или user, либо выдавала корректную ошибку. По факту выдаваемая ошибка не ведёт к решению проблемы, а только запутывает. Если бы ошибка просила включить поддержку паролей, то проблемы авторизации в принципе бы не существовало.
- Вопрос задан более трёх лет назад
- 23672 просмотра
1. Пароль root пользователя MySQL установлен
2. Такой строки у меня нет вообще в файле /usr/share/phpmyadmin/config.inc.php
Если phpmyadmin ставился пакетом то конфиги тут в убунте вроде /etc/phpmyadmin/ , в /usr/share/phpmyadmin/ примеры
привет, а в какую секцию вставлять $cfg['Servers'][$i]['AllowRoot'] , в конфиге нет такой строки.
/etc/phpmyadmin/config.inc.php
Решение:
mysql -u root -p
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
systemctl start mariadb
systemctl start mysql
Проверенный рабочий вариант, думаю поможет:
По умолчанию рутовый вход запрещен. Советую создать отдельного пользователя под свои нужды:
(вводить по одной строке)
sudo mysql -u root -p (спросит пароль)
create user 'пользователь'@localhost identified by 'пароль';
grant all privileges on *.* to 'пользователь'@localhost;
grant grant option on *.* to 'пользователь'@localhost;
flush privileges;
quit;
Возможно в том, что соотв. записи разрешающей вход - в базе нет. Можно попробовать из под рута запустить mysql-клиент (в консонли). Такой подход работает с MariaDB, с MySQL'ом возможно тоже прокатит.
И посмотреть потом, кому с какого хоста можно заходить. База: mysql, таблица: user. Пример.
MySQL — система управления базами данных (СУБД) с открытым исходным кодом от компании Oracle. Она была разработана и оптимизирована специально для работы веб-приложений. MySQL является неотъемлемой частью таких веб-сервисов, как Facebook, Twitter, Wikipedia, YouTube и многих других.
Эта статья расскажет, как определять, с чем связаны частые ошибки на сервере MySQL, и устранять их.
21 Answers 21
On some systems, like Ubuntu, MySQL is using the Unix auth_socket plugin by default.
Basically it means that: db_users using it, will be "authenticated" by the system user credentials. You can see if your root user is set up like this by doing the following:
As you can see in the query, the root user is using the auth_socket plugin.
There are two ways to solve this:
- You can set the root user to use the mysql_native_password plugin
- You can create a new db_user with you system_user (recommended)
Option 1:
Option 2: (replace YOUR_SYSTEM_USER with the username you have)
Note: On some systems (e.g., Debian 9 (Stretch)) the 'auth_socket' plugin is called 'unix_socket', so the corresponding SQL command should be: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
From andy's comment it seems that MySQL 8.x.x updated/replaced the auth_socket for caching_sha2_password . I don't have a system setup with MySQL 8.x.x to test this. However, the steps above should help you to understand the issue. Here's the reply:
One change as of MySQL 8.0.4 is that the new default authentication plugin is 'caching_sha2_password'. The new 'YOUR_SYSTEM_USER' will have this authentication plugin and you can log in from the Bash shell now with "mysql -u YOUR_SYSTEM_USER -p" and provide the password for this user on the prompt. There isn’t any need for the "UPDATE user SET plugin" step.
Enter password:
mysqladmin: connect to server at 'localhost' failed error:
'Access denied for user 'root'@'localhost' (using password: YES)'
How can I fix this?
@clearlight Is not same question, this post is a problem with mysqladmin win super privilegies into mysql, the other post is a problem with a simple connection from socket.
I know this is old, but want to say this for future visitors. Don't enter your mysql password, especially for root, in the command itself, or it will be stored in your shell history. Just leave the -p option by itself and mysql will prompt for a password.
MySQL продолжает «падать»
Если такая проблема возникает, необходимо выяснить, заключается она в сервере или в клиенте. Обратите внимание, что многие сбои сервера вызваны повреждёнными файлами данных или индексными файлами.
Вы можете проверить состояние сервера, чтобы определить, как долго он работал.
Чтобы узнать время безотказной работы сервера, запустите команду mysqladmin .
Кроме того, можно остановить сервер, сделать отладку MySQL и снова запустить службу. Для отображения статистики процессов MySQL во время выполнения других процессов откройте окно командной строки и введите следующее:
26 Answers 26
All solutions I found were much more complex than necessary and none worked for me. Here is the solution that solved my problem. There isn't any need to restart mysqld or start it with special privileges.
With a single query we are changing the auth_plugin to mysql_native_password and setting the root password to root (feel free to change it in the query).
Now you should be able to log in with root. More information can be found in MySQL documentation or MariaDB documentation.
(Exit the MySQL console with Ctrl + D or by typing exit.)
I'm unable to do this. "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near. ".
@TCB13 and anyone else facing this issue. "I 'm unable to do this. "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near. ". Use FLUSH PRIVILEGES before executing the alter command
- Open and edit /etc/my.cnf or /etc/mysql/my.cnf , depending on your distribution.
- Add skip-grant-tables under [mysqld]
- Restart MySQL
- You should be able to log in to MySQL now using the below command mysql -u root -p
- Run mysql> flush privileges;
- Set new password by ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
- Go back to /etc/my.cnf and remove/comment skip-grant-tables
- Restart MySQL
- Now you will be able to login with the new password mysql -u root -p
Hello, I had the same problem. I did the above, and it solve the problem, but everytime I reboot CentOS, I need to do all of the steps again (I got the message:Access denied for user 'root'@'localhost' (using password: NO) - when run the command mysql (or any sql command) and I do again and again all over as above at each reboot.
Too bad that this does not work with MariaDB: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER 'root'@'localhost' IDENTIFIED BY 'NewPassword'' at line 1
I found this to work @PhilippLudwig set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); I did this after step 5. Here is how my command prompt output looked: MariaDB [(none)]> MariaDB [(none)]> set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec)
None of the previous answers helped me with this problem, so here's the solution I found.
The relevant part:
In Ubuntu systems running MySQL 5.7 (and later versions), the root MySQL user is set to authenticate using the auth_socket plugin by default rather than with a password. This allows for some greater security and usability in many cases, but it can also complicate things when you need to allow an external program (e.g., phpMyAdmin) to access the user.
In order to use a password to connect to MySQL as root, you will need to switch its authentication method from auth_socket to mysql_native_password. To do this, open up the MySQL prompt from your terminal:
sudo mysql
Next, check which authentication method each of your MySQL user accounts use with the following command:
In this example, you can see that the root user does in fact authenticate using the auth_socket plugin. To configure the root account to authenticate with a password, run the following ALTER USER command. Be sure to change password to a strong password of your choosing, and note that this command will change the root password you set in Step 2:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Then, run FLUSH PRIVILEGES which tells the server to reload the grant tables and put your new changes into effect:
Check the authentication methods employed by each of your users again to confirm that root no longer authenticates using the auth_socket plugin:
You can see in this example output that the root MySQL user now authenticates using a password. Once you confirm this on your own server, you can exit the MySQL shell:
Worx also for mysql Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu)) on ubuntu 20.04 . Cheers
I'm recieving this error, why? You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BY 'MYPERSONALPASSWORD'' at line 1 I've just pasted this line: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MYPERSONALPASSWORD';
Step 1: Identify the database version
You'll see some output like this with MySQL:
Or output like this for MariaDB:
Make note of which database and which version you're running, as you'll use them later. Next, you need to stop the database so you can access it manually.
Step 2: Stopping the database server
To change the root password, you have to shut down the database server beforehand.
You can do that for MySQL with:
And for MariaDB with:
Step 3: Restarting the database server without permission checking
If you run MySQL and MariaDB without loading information about user privileges, it will allow you to access the database command line with root privileges without providing a password. This will allow you to gain access to the database without knowing it.
To do this, you need to stop the database from loading the grant tables, which store user privilege information. Because this is a bit of a security risk, you should also skip networking as well to prevent other clients from connecting.
Start the database without loading the grant tables or enabling networking:
The ampersand at the end of this command will make this process run in the background so you can continue to use your terminal.
Now you can connect to the database as the root user, which should not ask for a password.
You'll immediately see a database shell prompt instead.
MySQL Prompt
MariaDB Prompt
Now that you have root access, you can change the root password.
Step 4: Changing the root password
Now we can actually change the root password.
For MySQL 5.7.6 and newer as well as MariaDB 10.1.20 and newer, use the following command:
For MySQL 5.7.5 and older as well as MariaDB 10.1.20 and older, use:
Make sure to replace new_password with your new password of choice.
Note: If the ALTER USER command doesn't work, it's usually indicative of a bigger problem. However, you can try UPDATE . SET to reset the root password instead.
[IMPORTANT] This is the specific line that fixed my particular issue:
Remember to reload the grant tables after this.
In either case, you should see confirmation that the command has been successfully executed.
The password has been changed, so you can now stop the manual instance of the database server and restart it as it was before.
Step 5: Restart the Database Server Normally
The tutorial goes into some further steps to restart the database, but the only piece I used was this:
For MySQL, use:
For MariaDB, use:
Now you can confirm that the new password has been applied correctly by running:
The command should now prompt for the newly assigned password. Enter it, and you should gain access to the database prompt as expected.
Conclusion
You now have administrative access to the MySQL or MariaDB server restored. Make sure the new root password you choose is strong and secure and keep it in safe place.
Создание нового пользователя для работы с MySQL через phpMyAdmin
1. Подключитесь к mysql
2. Создайте пользователя для phpMyAdmin
Запустите следующие команды (замените some_pass на желаемый пароль):
Если ваш phpMyAdmin подключается к localhost, то этого должно быть достаточно.
3. Опционально: разрешение удалённых соединений
4. Обновите phpMyAdmin
Читайте также: