root
без пароля на ОС Linux;root
на ОС Linux;root
на ОС 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) и заходим под этой учетной записью.
Смена пароля 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
или сделать запрос в консоле MySQLSELECT 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.