Как я могу сбросить пароль root MySQL в MySQL 8.0.36 на Red Hat 8, если ‘mysqld_safe’ отсутствует?

Вопрос или проблема

В течение многих лет я использовал 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 простых шага! Поехали!

  1. Остановите mysqld и перезапустите его с правильным MYSQLD_OPTS:
    sudo service mysqld stop;
    sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking";
    sudo service mysqld start;
    
  2. Как только MySQL запустится, войдите в MySQL как root без пароля:
    mysql -u root;
    
  3. Теперь в 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; не представляет риска/угрозы.

  4. Теперь верните 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 с новым паролем.

Оцените материал
Добавить комментарий

Капча загружается...