Сообщить об ошибке.

Сброс/изменение пароля root в MySQL на ОС Linux/Windows

Содержание:


Вход в учетную запись root без пароля на ОС Linux.

Начнем с того, что современные версии MySQL не запрашивают пароль суперпользователя при установке сервера. Если после установки сервера, пароль пользователя root так и не был установлен, то консоль MySQL можно запустить БЕЗ ПАРОЛЯ от имени пользователя, от которого производилась установка сервера (или от имени которого работает/запущен MySQL-сервер).

В этом случае запуск консоли без пароля будет выглядеть следующим образом:

$ mysql -uroot
mysql [(none)]>

# или просто
$ mysql
mysql [(none)]>

Чтобы определить от какого пользователя запущен сервер MySQL, необходимо запустить консольную команду htop (если htop не установлен, то установите командой $ sudo apt install htop). После запуска htop нужно нажать клавишу F4(фильтр) и на клавиатуре набрать mysql. В результате этих действий на экране отобразятся все процессы mysql, а в графе USER можно увидеть пользователя от которого работает сервер MySQL. Также в графе Command расположен рабочий директорий, в котором находится файл родительского процесса mysql.pid (имя может быть другим).

Далее, если пароль пользователя, от имени которого работает/запущен MySQL-сервер неизвестен, то задаем новый пароль этому пользователю командой $ sudo passwd mysql_user (где mysql_user - пользователь от которого работает MySQL) и заходим под этой учетной записью.

Смена пароля пользователя MySQL из командной строки.

Смена пароля root БД MySQL из командной строки терминала:

$ mysqladmin -u root oldpassword newpassword

Смена пароля обычного пользователя БД MySQL из консоли терминала:

$ mysqladmin -u username -h hostname -p oldpassword newpassword

Сброс пароля суперпользователя root на ОС Linux.

Если все таки пароль пользователя root ранее был установлен или установлена старая версия MySQL или стоит сервер MariaDB, то для восстановления пароля к учетной записи root необходимо как-то зайти в консоль MySQL с привилегиями суперпользователя root, но при этом без пароля. Чтобы "просочится" в учетную запись root без пароля, перезапустим сервер в безопасном режиме (mysqld_safe), при этом отключим проверку информации о пользовательских привилегиях (параметр командной строки --skip-grant-tables).

Далее, все команды выполняются на машине, где запущен MySQL-сервер.

Для начала остановим сервер баз данных MySQL. Заходим в терминал и пишем:

$ sudo systemctl stop mysql
# или
$ sudo service mysql stop

Теперь запускаем БД MySQL в безопасном режиме, а параметр командной строки --skip-grant-tables отключит проверку пароля:

# запуск БД MySQL в безопасном режиме
$ sudo mysqld_safe --skip-grant-tables &

Амперсанд (&) в конце команды переводит консольную команду в фоновый режим и можно будет продолжить работу с терминалом. Если в консоли не появилось приглашение, то просто нажните Enter.

Далее, подключаемся к БД MySQL как суперпользователь root, при этом пароль запрашиваться не будет:

$ mysql -uroot
mysql [(none)]>

В современных версиях MySQL (MySQL >= 8.0) изменить пароль пользователя root можно с помощью команды ALTER USER.

-- сбрасываем кеш системных таблиц
-- и перезагружаем таблицы привилегий
mysql [(none)]> FLUSH PRIVILEGES;

-- теперь инструкция `ALTER USER` должна работать
-- устанавливаем пароль пользователю 'root'@'localhost'
mysql [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Примечание: замените строку 'MyNewPass' на свой новый пароль пользователя root.

Однако, данный запрос не сработает для старых версий MySQL < 8.0. В этом случае, пароль учетной записи root необходимо менять напрямую, в системной таблице таблице mysql.user при помощи оператора UPDATE . Это небезопасный способ, по этому необходимо быть внимательным:

-- внимательно и аккуратно меняем пароль `root`
mysql [(none)]> UPDATE mysql.user SET password=PASSWORD("MyNewPass") WHERE user="root";
-- сбрасываем кеш системных таблиц и
-- перезагружаем таблицы привилегий
mysql [(none)]> FLUSH PRIVILEGES;

Пароль для пользователя root успешно изменен.

Обратите внимание, что на старых версиях серверов, для изменения пароля пользователя root использовалась MySQL-функция PASSWORD(). Эта функция являлась интерфейсом SQL к алгоритму, используемому сервером для шифрования паролей MySQL для хранения в таблице привилегий.

Внимание! Функция PASSWORD() устарела в MySQL 5.7 и удалена с версии MySQL 8.0. Не пытайтесь сменить пароль таким способом в современных версиях MySQL. Узнать версию MySQL можно выполнив команду терминала $ mysqld --version или сделать запрос в консоле MySQL SELECT VERSION();.

Теперь можно перезапустить сервер базы данных в обычном режиме.

$ sudo systemctl stop mysql
$ sudo systemctl start mysql
# или
$ sudo service mysql stop
$ sudo service mysql start

Если возникает ошибка при остановке/старте MySQL-сервера, то нужно "убить" ВСЕ ПРОЦЕССЫ MySQL командой:

# убиваем все процессы MySQL
$ sudo killall mysql
# Завершён sudo mysqld_safe --skip-grant-tables

# теперь запустим MySQL
$ sudo systemctl start mysql
# или
$ sudo service mysql start

Пробуем зайти в БД MySQL с учетной записью root и паролем, который был установлен (MyNewPass), выполняя команды от обычного пользователя операционной системы:

$ mysql -uroot -pMyNewPass
mysql [(none)]>

Сброс пароля суперпользователя root в ОС Windows.

В ОС Windows, для сброса пароля для учетной записи MySQL 'root'@'localhost' будем использовать следующую процедуру.

Первое, что надо сделать, это войти в ОС Windows как администратор и остановить сервер MySQL (если он запущен). Для сервера MySQL, работающего как служба Windows, необходимо перейти к диспетчеру служб: меню "Пуск" выбрать "Панель управления", затем "Администрирование", затем "Службы". В списке запущенных служб Windows ищем MySQL и останавливаем ее.

Создаем текстовый файл c запросом на смену пароля суперпользователя root, который должен занимать одну строку (без переносов).

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Строку 'MyNewPass' замените новым паролем, который необходимо использовать.

Сохраняем файл, например, как C:\>mysql-init.txt. Затем открываем окно консоли Windows, для этого в меню "Пуск" выбираем "Выполнить", затем вводим команду для запуска консоли cmd.

Запустим MySQL-сервер с системной переменной init-file, указанной как параметр командной строки --init-file со значением созданного файла с запросом на изменение пароля C:\>mysql-init.txt. Если сервер MySQL установлен в другое место, то необходимо изменить команду cd соответствующим образом.

Обратите внимание, что обратная косая черта в значении параметра --init-file удваивается:

# консоль Windows
C:\> cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
C:\> mysqld --init-file=C:\\mysql-init.txt

При выполнении команды, MySQL-сервер выполнит содержимое файла, указанного системной переменной init_file и изменит пароль учетной записи 'root'@'localhost'. !!! После успешного запуска сервера удалите C:\>mysql-init.txt.

Для просмотра выходных данных сервера в окне консоли, необходимо в команду C:\> mysqld ... добавить параметр командной строки --console.

Если MySQL-сервер был установлен с помощью мастера установки, то может потребоваться указать параметр командной строки --defaults-file. Например:

# консоль Windows
C:\> mysqld
         --defaults-file="C:\\ProgramData\\MySQL\\MySQL Server 8.0\\my.ini"
         --init-file=C:\\mysql-init.txt

Параметр, который необходимо указать в --defaults-file можно найти с помощью диспетчера служб: меню "Пуск", выбрать "Панель управления", затем "Администрирование", затем "Службы". В списке находим службу MySQL, щелкаем правой кнопкой мыши и выбираем "Свойства". Поле "Путь к исполняемому файлу" будет содержать параметр --defaults-file.

Теперь можно подключиться к серверу MySQL как суперпользователь root, используя новый пароль. Для этого: остановим сервер MySQL и перезапустим его в обычном режиме. Если MySQL-сервер работал как служба, то его необходимо запустить из окна служб Windows.