- How do I find out my root MySQL password?
- 12 Answers 12
- Сброс пароля root в MySQL на Ubuntu
- Требования для сброса пароля
- Сброс пароля root
- План сброса
- Определение версии MySQL
- Остановка сервера
- Отключение привилегий MySQL сервера
- Изменение пароля root пользователя MySQL
- Изменение пароля для MySQL 5.7.6 и новее
- Изменения пароля на MySQL 5.7.5 и позднее
- Завершение
- Восстановление привилегий и запуск сервера MySQL
- Проверка нового пароля
- Как изменить пароль пользователя на новых версиях MySQL
How do I find out my root MySQL password?
I just installed MySQL on Ubuntu and the root user can’t log in 🙂 How can I recover or find out my password? Using blank for password does not work.
12 Answers 12
You can reset the root password by running the server with —skip-grant-tables and logging in without a password by running the following as root (or with sudo):
# service mysql stop # mysqld_safe --skip-grant-tables & $ mysql -u root
mysql> use mysql; mysql> update user set authentication_string=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root'; mysql> flush privileges; mysql> quit
# service mysql stop # service mysql start $ mysql -u root -p
Now you should be able to login as root with your new password.
It is also possible to find the query that reset the password in /home/$USER/.mysql_history or /root/.mysql_history of the user who reset the password, but the above will always work.
Note: prior to MySQL 5.7 the column was called password instead of authentication_string . Replace the line above with
mysql> update user set password=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
@Benjamin I did all the steps in your answer but I still get the Access denied for user ‘root’@’localhost’ — any ideas why?
For MySql 5.7: UPDATE mysql.user SET authentication_string = PASSWORD(‘MyNewPass’), password_expired = ‘N’ WHERE User = ‘root’ AND Host = ‘localhost’;
After trying all of this many times, and the dpkg approach below, and getting super frustrated that nothing worked (btw, I’m using 16.04 with mysql-sever-5.7 ), I noticed that mysql would accept my new credentials if I used sudo to connect. i.e. sudo mysql -u root -p Without sudo I get Access denied for user ‘root’@’localhost’ . I’ve never had to use sudo before, and I don’t see it mentioned here, but after a frustrating hour that seems to be the solution.
@Matt same here. I’ve never had to use sudo before when using mysql and now I have to? I don’t understand why I have to be the root linux user to access the root account in mysql. This sort of behaviour reminds me of postgresql a bit more.
sudo mysql -u root ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD_HERE'; FLUSH PRIVILEGES; mysql -u root -p # and it works
Thanks. Your solution worked for me. Author of the post should have specified his MySQL version. Mine is 5.7.27 .
I realize that this is an old thread, but I thought I’d update it with my results.
Alex, it sounds like you installed MySQL server via the meta-package ‘mysql-server’. This installs the latest package by reference (in my case, mysql-server-5.5). I, like you, was not prompted for a MySQL password upon setup as I had expected. I suppose there are two answers:
Solution #1: install MySQL by it’s full name:
$ sudo apt-get install mysql-server-5.5
Solution #2: reconfigure the package.
$ sudo dpkg-reconfigure mysql-server-5.5
You must specific the full package name. Using the meta-package ‘mysql-server’ did not have the desired result for me. I hope this helps someone 🙂
This succeeded but didn’t ask me for a root password for mysql in Ubuntu 18.04: sudo dpkg-reconfigure mysql-server-5.7
yup, also running 5.7 and the reconfigure does NOT ask for a root password. What gives, and what IS the default?
MySQL 5.5 on Ubuntu 14.04 required slightly different commands as recommended here. In a nutshell:
sudo /etc/init.d/mysql stop sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking & mysql -u root
And then from the MySQL prompt
FLUSH PRIVILEGES; SET PASSWORD FOR root@'localhost' = PASSWORD('password'); UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root'; FLUSH PRIVILEGES;
And the cited source offers an alternate method as well.
can you help and provide details on what following exactly does? —skip-grant-tables —skip-networking & It was really helpful for me to tackle client request but i’d like to learn about it so i can asses risk. Thanks!
skip-grant-tables certainly requires caution since anyone with access to the server can access all of the schemas for the instance. skip-networking is less of a problem I think but you should assess for yourself. If I’m trying to reset the root password without the current root password I consider myself in a security pickle already :). Not sure if there is a more ‘secure’ approach.
I got this ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2) [1]+ Exit 1 sudo /usr/sbin/mysqld —skip-grant-tables —skip-networking
For RHEL-mysql 5.5:
/etc/init.d/mysql stop /etc/init.d/mysql start --skip-grant-tables mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root'; mysql> FLUSH PRIVILEGES; mysql> exit; mysql -uroot -pnewpwd mysql>
Hmm Mysql 5.7.13 to reset all I did was:
$ sudo service mysql stop To stop mysql
$ mysqld_safe —skip-grant-tables & Start mysql
Just like the correct answer. Then all I did was do what @eebbesen did.
mysql> SET PASSWORD FOR root@’localhost’ = PASSWORD(‘NEW-password-HERE’);
Hope it helps anyone out there 🙂
Here is the best way to set your root password : Source Link Step 3 is working perfectly for me.
- sudo mysql
- SELECT user,authentication_string,plugin,host FROM mysql.user;
- ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;
- FLUSH PRIVILEGES;
- SELECT user,authentication_string,plugin,host FROM mysql.user;
- exit
Now you can use the Password for the root user is ‘password‘ :
- mysql -u root -p
- CREATE USER ‘sammy’@’localhost’ IDENTIFIED BY ‘password’;
- GRANT ALL PRIVILEGES ON . TO ‘sammy’@’localhost’ WITH GRANT OPTION;
- FLUSH PRIVILEGES;
- exit
Test your MySQL Service and Version:
systemctl status mysql.service sudo mysqladmin -p -u root version
Under MYSQL 5.7, If you are using mysql for development purpose, just :
2.start mysql under —skip-grant-tables mode:
$ sudo mysqld_safe --skip-grant-tables
and, further, you could try to change the user table under «skip-grant-table» mode, however I failed.
so, this is just a workaround.
There is a simple solution.
MySql 5.7 comes with anonymous user so you need to reconfigure MySQL server.
You can do that with this command
grep 'temporary password' /var/log/mysqld.log
sudo mysql_secure_installation
On this link is more info about mysql 5.7
It is actually very simple. You don’t have to go through a lot of stuff. Just run the following command in terminal and follow on-screen instructions.
sudo mysql_secure_installation
I’m going to make a bit of an assumption here because I’m not sure. I don’t think my MySQL (running on latest 20.04 upgraded) even has a root. I have tried setting one and I remember having problems. I suspect there is not a root user and it will automatically log you in as the MySQL root user if you’re logged in as root.
Why do I think this? Because when I do MySQL -u root -p, it will accept any password and log me in as the MySQL root user when I am logged in as root.
I have confirmed that trying that on a non root user doesn’t work.
EDIT 2020.12.19: It is no longer a mystery to me why if you are logged in as the root user you get logged into MySQL as the root user. It has to do with the authentication type. Later versions of MySQL are configured with the MySQL plugin ‘auth_socket’ (maybe you’ve noticed the /run/mysqld/mysqld.sock file on your system and wondered about it). The plugin uses the SO_PEERCRED option provided by the library auth_socket.so.
You can revert back to password authentication if desired simply by create/update of the password. Showing both ways and options below to make clear.
CREATE USER ‘valerie’@’localhost’ IDENTIFIED WITH auth_socket;
CREATE USER ‘valerie’@’localhost’ IDENTIFIED BY ‘password’;
Сброс пароля root в MySQL на Ubuntu
Сбросить пароль root пользователю базы данных MySQL может потребоваться в случае, если потерян доступ к системе управления базами данных.
Требования для сброса пароля
- Локальный доступ или подключение по SSH к серверу на Ubuntu Linux.
- Предустановленная система СУБД MySQL с отсутствующим доступом.
Сброс пароля root
План сброса
Определение версии MySQL
Стоит сразу определить установленную версию MySQL, поскольку на разных версиях программы, команды, в дальнейшем, могут отличаться.
Для определения версии MySQL в терминале достаточно ввести команду:
Должен появится похожий вывод:
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
Строку можно сохранить в текстовом документе, чтобы не забыть версию MySQL.
Остановка сервера
Для отключения привилегий нужно остановить сервер MySQL, введя в терминале команду:
sudo systemctl stop mysql
После выполнения команды процесс сервера MySQL будет приостановлен.
Отключение привилегий MySQL сервера
Отключение привилегий СУБД – исключение из процесса загрузки Grant-таблиц, которые хранят данные для авторизации пользователей (пароли и логины). Это позволит выполнить вход в MySQL без авторизации и восстановить пароль root по умолчанию.
Для начала создаётся конфигурационный файл, который изменяет параметры запуска MySQL. Для этого нужно ввести в терминале команду:
sudo systemctl edit mysql
В созданный текстовой файл нужно внести следующие строки, которые ограничат загрузку Grant-таблиц и запретят выход в сеть (для обеспечения безопасности):
[Service] ExecStart= ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking
Для сохранения изменений в файле нужно нажать «CTRL+X», потом «Y» и подтвердить изменения нажатием «Enter».
Для применения изменений в процессе загрузки MySQL, нужно обновить конфигурацию Systemd командой:
sudo systemctl daemon-reload
Остаётся запустить сервер MySQL с отключенными привилегиями. Для этого в терминале вводится команда:
sudo systemctl start mysql
Изменение пароля root пользователя MySQL
Таблицы привилегий отключены и ничего не мешает выполнить вход в консоль MySQL от имени root пользователя без авторизации.
Для выполнения входа в консоль MySQL нужно ввести команду:
Авторизация должна пройти без введения пароля.
Для того чтобы сменить пароль пользователя root, нужно загрузить Grant-таблицы, введя команду в терминал MySQL:
Изменение пароля для MySQL 5.7.6 и новее
Смена пароля root пользователя в консоли MySQL выполняется последовательным введением следующих команд:
UPDATE mysql.user SET authentication_string = PASSWORD('MY_NEW_PASSWORD') WHERE User = 'root'; FLUSH PRIVILEGES;
Вместо «MY_NEW_PASSWORD» вводится собственный пароль. Не стоит забывать о безопасности и ставить лёгкие пароли, так как это сыграет на руку злоумышленникам.
Изменения пароля на MySQL 5.7.5 и позднее
Нужно последовательно ввести следующие команды:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MY_NEW_PASSWORD'); FLUSH PRIVILEGES;
В поле «MY_NEW_PASSWORD» вводится собственный пароль.
Завершение
В случае успеха, в обоих случаях, будет получен следующий вывод:
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
Восстановление привилегий и запуск сервера MySQL
После изменения пароля необходимо восстановить параметры загрузки сервера MySQL, удалив конфигурацию Systemd. Для этого в терминале последовательно вводятся команды:
sudo systemctl revert mysql sudo systemctl daemon-reload
Далее необходимо перезапустить сервер MySQL со стандартными параметрами. Перезагрузка выполняется следующей командой:
sudo systemctl restart mysql
Проверка нового пароля
Проверить новый пароль можно, выполнив вход в консоль MySQL от имени root пользователя:
Как изменить пароль пользователя на новых версиях MySQL
В последних выпусках MySQL была добавлена возможность входа без пароля, если системная учётная запись имеет root доступ.
Чтобы узнать пароль на новых версиях, достаточно в терминале ввести команду, которая запустит MySQL с правами администратора:
При получении ошибки «access denied» стоит переходить к описанному выше способу – «Сброс пароля root».
Если доступ к консоли получен успешно получен, можно выполнить сброс пароля root в Ubuntu для MySQL, последовательно вводя следующие команды:
UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';
В поле «new_password» вводится новый пароль для пользователя root.
Для применения изменений нужно перезагрузить таблицы привилегий следующей командой:
В случае успеха будет получен следующий вывод:
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
Надежный хостинг для сайта. 14 дней — бесплатно!