Yandex Metrika
sanches.free 1 просмотр

Сброс пароля root в MySQL/MariaDB (skip-grant-tables) для админа Битрикс

Зачем это понадобится

На машине с 1С‑Битриксом пароль учётной записи БД нужен хотя бы для дампа (см. mysqldump), миграции и восстановления. Если записи пароля из .settings.php и бэкапов нет или не подходит аккаунт с админ‑правами, остаётся стандартный путь восстановления через однопользовательский режим mysqld.

Важно: временно открывать вход без авторизации имеет смысл только на локальной консоли сервера, не оставляя сеть включённой. На BitrixVM/типовом VPS команды ниже выполняются по SSH как root или через sudo.

Остановить сервис базы

Используйте менеджер служб вашего дистрибутива (название сервиса может быть mysqld, mariadb или mysql):

systemctl stop mariadb.service
# или: systemctl stop mysqld.service

На старых системах возможен вариант service mysqld stop. Убедитесь, что демон действительно остановился: ps uaxww | grep -i '[m]ysqld' — живых процессов быть не должно.

Если «mysqld_safe A mysqld process already exists»

Отдельный инстанс не стартует, пока работает уже запущенный mysqld. Найдите PID и аккуратно завершите его (не посылайте KILL -9, пока есть шанс на обычный останов через сервис):

ps uaxww | grep -i mysql
# при необходимости: sudo kill 

Снова проверьте, что процессов нет, и только потом переходите к следующему шагу.

Запуск без проверки привилегий и без сети

Вариант через mysqld_safe (часто встречается на CentOS/Bitrix‑окружениях):

mysqld_safe --skip-grant-tables --skip-networking &

Ключи означают: не читаем таблицы привилегий при старте и не слушаем TCP — подключиться можно только с локальной консоли через сокет. Если в дистрибутиве нет mysqld_safe, смотрите документацию на запуск mysqld с теми же флагами в unit‑файле или вручную.

Сессия под root и смена пароля

mysql -u root

Дальше команды зависят от версии сервера.

MySQL 5.7.6+, MariaDB 10.2+ и MySQL 8 (предпочтительно)

После FLUSH PRIVILEGES одна и та же конструкция подходит большинству актуальных инсталляций под Битрикс — уточните хост в mysql.user:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password';
FLUSH PRIVILEGES;

На MySQL 8 именно этот вариант и нужен; на 5.7 он тоже корректен после перечитывания грантов.

Очень старый MySQL 5.6 и ниже

В наследии ещё встречается прямое обновление таблицы mysql.user через PASSWORD() — сверьтесь с мануалом вашей точной версии, не переносите такие скрипты на MySQL 8, где функция PASSWORD() удалена.

Если для 'root'@'localhost' сервер сообщает, что пользователя нет, выполните SELECT user, host FROM mysql.user; и повторите ALTER USER с тем host, который вернёт запрос.

Вернуть обычный режим

Выйдите из клиента (exit), остановите временный mysqld (через mysqladmin shutdown из той же сессии или kill по PID процесса, который вы подняли вручную), затем запустите штатную службу:

systemctl start mariadb.service
# или: systemctl start mysqld.service

Проверка

mysql -u root -p

После входа можно выдать отдельного пользователя для сайта и выровнять его с .settings.php, чтобы не работать под root в повседневной эксплуатации.

Итог

Сброс пароля через --skip-grant-tables — аварийный инструмент администратора MySQL/MariaDB на сервере с Битриксом. Делайте окно коротким, отключайте сеть на время процедуры и сразу возвращайте нормальный запуск демона.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии