Ubuntu mysql сбросить пароль root
Обновлено: 02.07.2024
Очень много времени потратил на поиск решения как же сменить/сбросить пароль в MySQL у пользователя root. Ничего не помогало, в том числе официальная документация по сбросу пароля. В процессе шло что-то не так и даже если команды какие-то выполнялись то результата нужного не получал.
Видимо преимущественно оказалось, что проблема была в том, что при выполнении команд из под сеанса пользователя система переназначает параметр socketpath.
Поэтому в первую очередь в файле конфигурации MySQL нужно прописать принудительно корректный путь до сокета.
Итак, перезапускаем MySQL
Выводим список сокетов и ищем где располагается mysqld.sock когда он запускается системой
У меня он расположен в /run/mysqld/mysqld.sock
Открываем конфигурационный файл (мне удобнее через gedit, уж простите, можете использовать свой редактор)
Вставляете или заменяете параметр socket и сохраняете изменения
Затем в терминале вводите команду
После чего запускаем 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.
Для применения изменений нужно перезагрузить таблицы привилегий следующей командой:
Читайте также: