- Вопрос или проблема
- Команда mysqld_safe (бинарный файл/скрипт оболочки) определенно больше не является частью пакета MySQL 8 (8.0.36) на Red Hat 8 и, возможно, других дистрибутивах Linux.
- Ответ или решение
- Как сбросить пароль root в MySQL 8.0.36 на Red Hat 8 без mysqld_safe
- Шаг 1: Остановка MySQL и установка параметров
- Шаг 2: Вход в MySQL
- Шаг 3: Изменение пароля
- Шаг 4: Восстановление конфигурации
- Вход с новым паролем
- Альтернативный метод аутентификации
- Заключение
Вопрос или проблема
В течение многих лет я использовал mysqld_safe
(вот так) с --skip-grant-tables
, чтобы безопасно сбросить пароль root
в MySQL:
sudo mysqld_safe --skip-grant-tables &
Но недавно, пытаясь установить MySQL 8.0.36 на Red Hat 8, я получаю:
mysqld_safe: команда не найдена
Что за черт? Если команда mysqld_safe
не найдена, как же мне установить/изменить пароль root
?
В Интернете определенно много ответов на вопрос о том, как изменить пароль пользователя root
в MySQL. И главный вывод, который я сделал для себя в 2024 году, это следующее:
Команда mysqld_safe
(бинарный файл/скрипт оболочки) определенно больше не является частью пакета MySQL 8 (8.0.36) на Red Hat 8 и, возможно, других дистрибутивах Linux.
Возможно, она исчезла (как бинарный файл/скрипт оболочки) из установки MySQL на системах, управляемых systemd
, начиная как минимум с MySQL 5.7.6 согласно другому ответу на Stack Overflow:
“Начиная с MySQL 5.7.6, для установки MySQL с использованием RPM-дистрибутива управление запуском и остановкой сервера осуществляется с помощью systemd на нескольких платформах Linux. На этих платформах mysqld_safe больше не устанавливается, так как это нецелесообразно. Для получения дополнительной информации см. раздел 2.5.10, “Управление сервером MySQL с помощью systemd”.”
Независимо от причины, если вы получаете это сообщение при попытке запустить mysqld_safe
:
mysqld_safe: команда не найдена
И ваша система работает под управлением systemd
(или systemctl
), то это определенно современный ответ, который решит ваши проблемы в 4 простых шага! Поехали!
- Остановите
mysqld
и перезапустите его с правильнымMYSQLD_OPTS
:sudo service mysqld stop; sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"; sudo service mysqld start;
- Как только MySQL запустится, войдите в MySQL как
root
без пароля:mysql -u root;
- Теперь в MySQL выполните эти команды; обратите внимание, что
[password]
следует заменить на любой пароль MySQL, который вы хотите установить:FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '[password]'; FLUSH PRIVILEGES; exit;
Обратите внимание, я считаю, что первая
FLUSH PRIVILEGES;
связана с запуском MySQL с установленнымMYSQLD_OPTS
на--skip-grant-tables
. Тем не менее, запускFLUSH PRIVILEGES;
не представляет риска/угрозы. - Теперь верните
MYSQLD_OPTS
в исходное состояние и перезапустите MySQL следующим образом:sudo service mysqld stop; sudo systemctl unset-environment MYSQLD_OPTS; sudo service mysqld start;
Теперь, с завершением всех этих шагов, попробуйте войти в MySQL как root с паролем следующим образом:
mysql -u root -p
Нажмите Enter/Return, затем введите свой новый пароль root
и… вуаля! Вы должны войти в MySQL как root
!
Примечание: Я выбрал установить пароль с помощью плагина аутентификации caching_sha2_password
, но если вы хотите быть более современными, вы можете использовать mysql_native_password
следующим образом:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '[password]';
Ответ или решение
Как сбросить пароль root в MySQL 8.0.36 на Red Hat 8 без mysqld_safe
Сброс пароля root в MySQL — это важная задача, особенно когда доступ к базе данных критически необходим. Если вы использовали mysqld_safe
для этих целей, но столкнулись с ошибкой «mysqld_safe: команда не найдена», это может быть связано с изменениями в управлении MySQL, начиная с версии 5.7.6, которые убрали mysqld_safe
из пакета RPM для систем, управляемых systemd
.
Шаг 1: Остановка MySQL и установка параметров
Для начала остановите MySQL и установите переменные окружения для запуска сервера в режиме пропуска таблиц прав:
sudo service mysqld stop
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
sudo service mysqld start
Шаг 2: Вход в MySQL
Когда MySQL запустится, вы сможете войти в систему без пароля:
mysql -u root
Шаг 3: Изменение пароля
Теперь, когда вы вошли в MySQL, выполните следующие команды, чтобы сбросить пароль. Не забудьте заменить [пароль]
на свой новый пароль:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '[пароль]';
FLUSH PRIVILEGES;
exit;
Обратите внимание, что FLUSH PRIVILEGES
помогает загрузить изменения в системе.
Шаг 4: Восстановление конфигурации
После завершения всех необходимых изменений, не забудьте вернуть параметры в прежнее состояние и перезапустить MySQL, чтобы сервер работал без ограничений:
sudo service mysqld stop
sudo systemctl unset-environment MYSQLD_OPTS
sudo service mysqld start
Вход с новым паролем
Попробуйте войти в MySQL с новым паролем:
mysql -u root -p
Введите ваш новый пароль, и вы успешно войдете в систему.
Альтернативный метод аутентификации
Вы можете выбрать другой метод аутентификации, если это необходимо. Например, для использования mysql_native_password
выполните:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '[пароль]';
Заключение
Сброс пароля root в MySQL 8.0.36 на Red Hat 8 можно выполнить быстро и эффективно, если следовать предложенным шагам. Важно помнить, что отказ от использования mysqld_safe
требует изменения подходов из-за управления системой systemd
. С помощью этих шагов вы сможете восстановить доступ к вашей базе данных и настроить пользователя root с новым паролем.