Ubuntu mysql сбросить пароль root

Обновлено: 02.07.2024

Очень много времени потратил на поиск решения как же сменить/сбросить пароль в MySQL у пользователя root. Ничего не помогало, в том числе официальная документация по сбросу пароля. В процессе шло что-то не так и даже если команды какие-то выполнялись то результата нужного не получал.

Видимо преимущественно оказалось, что проблема была в том, что при выполнении команд из под сеанса пользователя система переназначает параметр socketpath.

Поэтому в первую очередь в файле конфигурации MySQL нужно прописать принудительно корректный путь до сокета.

Итак, перезапускаем MySQL

Выводим список сокетов и ищем где располагается mysqld.sock когда он запускается системой

У меня он расположен в /run/mysqld/mysqld.sock

Открываем конфигурационный файл (мне удобнее через gedit, уж простите, можете использовать свой редактор)

Вставляете или заменяете параметр socket и сохраняете изменения

Затем в терминале вводите команду

После чего запускаем MySQL от пользователя root

Откроется консоль, вбиваем команду и выполняем


Запуск mysql с отключением контроля прав и смена пароля пользователя root

Все, смена пароля пользователя произведена. Можно писать exit и выходить из консоли.

Пробуйте зайти под пользователем

Заходим под пользователем root под пользователем с полными правами

Удаляем пользователя root

Создаем нового пользователя с паролем newpassword

Назначаем пользователю полные права

Обновляем данные о правах пользователей

Выходим из консоли MySQL через команду exit.

И пробуем залогиниться из под обычного пользователя

Вбиваем пароль и вход должен закончиться успешно. Выходим в терминал командой exit.

Возможно, что можно просто где-то в правах разрешить пользователю root входить не из под суперпользователя, но у меня нет времени искать данное решение


Пересоздание пользователя root в MySQL с назначением полных прав

1) Останавливаем текущую службу MySQL:

sudo service mysql stop

2) Создаем каталог /var/run/mysqld который будет использоваться процессом MySQL для хранения и доступа к файлу сокета, а также даем необходимые права:

sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld

3) Запускаем MySQL со следующими параметрами:

sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

4) Убеждаемся, что процесс запущен:

jobs
[1]+ Запущен sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

mysql -u root

6) Затем сбрасываем пароль root следующей последовательностью запросов:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> USE mysql;
Database changed

mysql> UPDATE user SET authentication_string=PASSWORD("123") WHERE User='root';
Query OK, 1 row affected, 1 warning (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 1

mysql> UPDATE user SET plugin="mysql_native_password" WHERE User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> quit
Bye

Мы установили пароль "123" для пользователя "root".

7) Завершаем текущий mysqld процесс:

sudo pkill mysqld
[1]+ Завершён sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking

8) Запускаем службу MySQL:

sudo service mysql start

9) Теперь мы можем войти, используя только что установленный пароль для рута:

mysql -u root --password=123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.22-0ubuntu18.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Важно: В версии Ubuntu 20.04 дефолтная конфигурация MySQL или MariaDB позволяет получить доступ к базе данных (с правами администратора) без ввода пароля, если мы устанавливаем соединение с сервером БД под пользователем root . В этом случае нам нет необходимости сбрасывать пароль. Чтобы проверить была ли конфигурация аутентификации по умолчанию изменена, вводим команду sudo mysql. Если получаем ошибку access denied, то прибегаем к действиям, указанным с статье.

Если используется MariaDB, то в выводе получим следующее: (разумеется, версия БД может меняться)

Чтобы произвести сброс root-пароля в MySQL или MariaDB, нам необходимо остановить сервер базы данных.

Для MariaDB:

Для MySQL:

После остановки базы данных производим ее перезапуск в безопасном режиме для сброса пароля root.

Зададим переменную окружения MYSQLD_OPTS, используемую в MariaDB при запуске:

Запустим сервер БД:

Корректность запуска сервера смотрим командой:

Теперь подключаемся к базе данных пользователем root без пароля:

Подключившись к консоли MariaDB, меняем пароль root, как показано в Шаге 3 далее.

Чтобы запустить сервер MySQL в этом режиме, изменим конфигурацию systemd для MySQL, чтобы при запуске сервер запустился с дополнительными параметрами.

После выполнения команды будет открыт новый файл в nano-редакторе, где мы будем внесем необходимые параметры запуска сервера MySQL. Изначально файл будет пустым. Добавим следующие строки:

Запускаем сервер MySQL:

и подключаемся пользователем root:

Далее переходим к Шагу 3.

Теперь сброс пароля root в MySQL или MariaDB возможен .

Меняем пароль root для MariaDB

Далее установим механизм аутентификации по умолчанию:

Пароль изменен. Выходим из консоли MariaDB и смотрим Шаг 4 для перезапуска сервера базы данных в штатном режиме.

Меняем пароль root для MySQL

Для MySQL выполняем следующий запрос, заменив new_password на свой пароль. MySQL позволяет использовать настраиваемые механизмы аутентификации, поэтому добавляем инструкцию, указывающую MySQL использовать механизм аутентификации по умолчанию:

Выходим из консоли MySQL и запускаем базу данных в нормальном режиме.

Чтобы перезапустить сервер базы данных в штатном режиме, выполним следующие действия:

Для MariaDB

Удаляем переменную окружения MYSQLD_OPTS:

и перезапускаем сервер MariaDB:

Для MySQL

Удаляем все изменения конфигурации демона systemd для MySQL:

Вывод должен быть примерно таким:

Затем перезагружаем демон systemd:

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

Сбросить пароль root пользователю базы данных MySQL может потребоваться в случае, если потерян доступ к системе управления базами данных.

Требования для сброса пароля

  • Локальный доступ или подключение по SSH к серверу на Ubuntu Linux.
  • Предустановленная система СУБД MySQL с отсутствующим доступом.

Сброс пароля root

План сброса

Определение версии MySQL

Стоит сразу определить установленную версию MySQL, поскольку на разных версиях программы, команды, в дальнейшем, могут отличаться.

Для определения версии MySQL в терминале достаточно ввести команду:

Должен появится похожий вывод:

Строку можно сохранить в текстовом документе, чтобы не забыть версию MySQL.

Остановка сервера

Для отключения привилегий нужно остановить сервер MySQL, введя в терминале команду:

После выполнения команды процесс сервера MySQL будет приостановлен.

Отключение привилегий MySQL сервера

Отключение привилегий СУБД – исключение из процесса загрузки Grant-таблиц, которые хранят данные для авторизации пользователей (пароли и логины). Это позволит выполнить вход в MySQL без авторизации и восстановить пароль root по умолчанию.

Для начала создаётся конфигурационный файл, который изменяет параметры запуска MySQL. Для этого нужно ввести в терминале команду:

В созданный текстовой файл нужно внести следующие строки, которые ограничат загрузку Grant-таблиц и запретят выход в сеть (для обеспечения безопасности):

Для сохранения изменений в файле нужно нажать «CTRL+X», потом «Y» и подтвердить изменения нажатием «Enter».

Для применения изменений в процессе загрузки MySQL, нужно обновить конфигурацию Systemd командой:

Остаётся запустить сервер MySQL с отключенными привилегиями. Для этого в терминале вводится команда:

Изменение пароля root пользователя MySQL

Таблицы привилегий отключены и ничего не мешает выполнить вход в консоль MySQL от имени root пользователя без авторизации.

Для выполнения входа в консоль MySQL нужно ввести команду:

Авторизация должна пройти без введения пароля.

Для того чтобы сменить пароль пользователя root, нужно загрузить Grant-таблицы, введя команду в терминал MySQL:

Изменение пароля для MySQL 5.7.6 и новее

Смена пароля root пользователя в консоли MySQL выполняется последовательным введением следующих команд:

Вместо «MY_NEW_PASSWORD» вводится собственный пароль. Не стоит забывать о безопасности и ставить лёгкие пароли, так как это сыграет на руку злоумышленникам.

Изменения пароля на MySQL 5.7.5 и позднее

Нужно последовательно ввести следующие команды:

В поле «MY_NEW_PASSWORD» вводится собственный пароль.

Завершение

В случае успеха, в обоих случаях, будет получен следующий вывод:

Восстановление привилегий и запуск сервера MySQL

После изменения пароля необходимо восстановить параметры загрузки сервера MySQL, удалив конфигурацию Systemd. Для этого в терминале последовательно вводятся команды:

Далее необходимо перезапустить сервер MySQL со стандартными параметрами. Перезагрузка выполняется следующей командой:

Проверка нового пароля

Проверить новый пароль можно, выполнив вход в консоль MySQL от имени root пользователя:

Как изменить пароль пользователя на новых версиях MySQL

В последних выпусках MySQL была добавлена возможность входа без пароля, если системная учётная запись имеет root доступ.

Чтобы узнать пароль на новых версиях, достаточно в терминале ввести команду, которая запустит MySQL с правами администратора:

При получении ошибки «access denied» стоит переходить к описанному выше способу – «Сброс пароля root».

Если доступ к консоли получен успешно получен, можно выполнить сброс пароля root в Ubuntu для MySQL, последовательно вводя следующие команды:

В поле «new_password» вводится новый пароль для пользователя root.

Для применения изменений нужно перезагрузить таблицы привилегий следующей командой:

Читайте также: