Я намагався багато кроків, щоб виправити цю проблему. Є так багато джерел для можливого вирішення цього питання, що важко відфільтрувати сенс з дурниць. Я нарешті знайшов хороше рішення тут :
Крок 1: Визначте версію бази даних
$ mysql --version
Ви побачите такий вихід із MySQL:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
Або такий вихід для MariaDB:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Зверніть увагу, яку базу даних та яку версію ви використовуєте, оскільки ви будете ними користуватися пізніше. Далі вам потрібно зупинити базу даних, щоб мати доступ до неї вручну.
Крок 2: Зупинка сервера баз даних
Щоб змінити кореневий пароль, потрібно заздалегідь вимкнути сервер бази даних.
Ви можете зробити це для MySQL за допомогою:
$ sudo systemctl stop mysql
А для MariaDB з:
$ sudo systemctl stop mariadb
Крок 3: Перезапуск сервера баз даних без перевірки дозволу
Якщо ви запускаєте MySQL та MariaDB, не завантажуючи інформацію про привілеї користувача, це дозволить вам отримати доступ до командного рядка бази даних з привілеями root без надання пароля. Це дозволить вам отримати доступ до бази даних, не знаючи про це.
Для цього вам потрібно зупинити базу даних для завантаження таблиць грантів, в яких зберігається інформація про привілеї користувача. Оскільки це трохи загрожує безпеці, вам слід також пропустити мережу, щоб запобігти підключенню інших клієнтів.
Запустіть базу даних, не завантажуючи таблиці грантів або включивши мережу:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Амперсанд в кінці цієї команди змусить цей процес запуститись у фоновому режимі, щоб ви могли продовжувати використовувати свій термінал.
Тепер ви можете підключитися до бази даних як користувач root, який не повинен запитувати пароль.
$ mysql -u root
Натомість ви відразу побачите підказку оболонки бази даних.
Підказка MySQL
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Підказка MariaDB
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Тепер, коли у вас є кореневий доступ, ви можете змінити кореневий пароль.
Крок 4: Зміна паролю Root
mysql> FLUSH PRIVILEGES;
Тепер ми можемо фактично змінити кореневий пароль.
Для MySQL 5.7.6 та новіших версій, а також MariaDB 10.1.20 та новіших версій використовуйте таку команду:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Для MySQL 5.7.5 і новіших версій , а також MariaDB 10.1.20 і новіших версій використовуйте:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Не забудьте замінити new_password
новим паролем на вибір.
Примітка: Якщо ALTER USER
команда не працює, це зазвичай свідчить про більшу проблему. Однак ви можете спробувати UPDATE ... SET
скинути пароль root.
[ВАЖЛИВО] Це конкретна лінія, яка вирішила мою конкретну проблему:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Не забудьте перезавантажити таблиці грантів після цього.
В будь-якому випадку ви повинні побачити підтвердження того, що команда була успішно виконана.
Query OK, 0 rows affected (0.00 sec)
Пароль змінено, тому тепер ви можете зупинити ручний примірник сервера баз даних і перезапустити його, як це було раніше.
Крок 5: Перезавантажте сервер баз даних звичайно
Підручник проходить ще кілька кроків, щоб перезапустити базу даних, але єдиною частиною, яку я використав, було це:
Для MySQL використовуйте:
$ sudo systemctl start mysql
Для MariaDB використовуйте:
$ sudo systemctl start mariadb
Тепер ви можете підтвердити, що новий пароль було застосовано правильно, запустивши:
$ mysql -u root -p
Тепер команда повинна запросити щойно призначений пароль. Введіть його, і вам слід отримати доступ до підказок бази даних, як очікувалося.
Висновок
Тепер у вас відновлений адміністративний доступ до сервера MySQL або MariaDB. Переконайтесь, що обраний вами новий корінний пароль є надійним та надійним та зберігайте його в безпечному місці.