Не удалось сбросить пароль root (MariaDB) root

Сегодня я хотел создать базу данных в PMA. Он сказал: «Не удается войти на сервер MySQL». Я пробовал через терминал, такую ​​же проблему, и это потому, что мой пароль ошибочен. И я не понимаю, почему.

Я попробовал обычный метод сброса пароля root (пропустить таблицы грантов и сбросить паспорт), но похоже, что он не работает.

Видеть, что:

morgan@rakija:~$ sudo mysqld_safe --skip-grant-tables & [1] 14016 morgan@rakija:~$ 150802 19:07:25 mysqld_safe Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect. 150802 19:07:25 mysqld_safe Logging to '/var/log/mysql/error.log'. 150802 19:07:25 mysqld_safe A mysqld process already exists [1]+ Terminé 1 sudo mysqld_safe --skip-grant-tables morgan@rakija:~$ mysql -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.0.20-MariaDB-0ubuntu0.15.04.1 (Ubuntu) Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> use mysql; Database changed MariaDB [mysql]> update user set password=PASSWORD("newPass") where user='root'; Query OK, 4 rows affected (0.00 sec) Rows matched: 4 Changed: 4 Warnings: 0 MariaDB [mysql]> flush privileges; Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> exit Bye morgan@rakija:~$ sudo service mysql restart morgan@rakija:~$ mysql -uroot -pnewPass ERROR 1698 (28000): Access denied for user 'root'@'localhost' 

4 Solutions collect form web for “Не удалось сбросить пароль root (MariaDB) root”

Я нашел решение, столь же странное, как и сама проблема.

Перезагрузите MySQL / MariaDB, используя --skip-grant-tables (найдите учебники в Интернете). (Не обязательно вообще, прочитайте мои изменения в конце сообщения)

Посмотрите поле plugin в таблицу mysql.user :

 MariaDB [mysql]> SELECT user, plugin FROM user; +------+-------------+ | user | plugin | +------+-------------+ | root | unix_socket | | root | unix_socket | | root | unix_socket | | root | unix_socket | +------+-------------+ 

Мне пришлось сбросить поле плагина каждой записи в пустую строку.

 UPDATE user SET plugin=""; // without WHERE clause 

Кроме того, убедитесь, что пароль определен, потому что иногда он, кажется, стирается (выберите user, password поля user, password ). Если нет, обновите его с помощью:

 UPDATE user SET password=PASSWORD("my_password") WHERE user="root"; 

Параметры привилегий должны быть сохранены явно:

 FLUSH PRIVILEGES; 

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

Это не обязательно отключает соединение через разъем Unix. После восстановления моего MySQL va в PMA я вижу, что соединение установлено через сокет Unix.

EDIT , несколько месяцев спустя: теперь я привык часто возвращаться к этой проблеме, думаю, при каждом обновлении MariaDB (или что-то в этом роде). Поэтому у меня есть лучшее понимание проблемы; Есть плагин UNIX_SOCKET, который позволяет вам входить в учетную запись MariaDB, не создавая пароль, потому что он использует учетные данные оболочки, чтобы доверять вам, без необходимости вводить пароль. На самом деле этот плагин является плагином аутентификации, а не средством связи с SQL-сервером. Таким образом, вы можете безопасно отключить его, если вы не используете unix-сокет в качестве метода входа в систему. Единственное, что я не могу объяснить, – это почему плагин UNIX_SOCKET регулярно устанавливается в каждой учетной записи базы данных без каких-либо действий на моей стороне.

Это имеет хороший побочный эффект: когда вы это делаете, вы можете войти на SQL-сервер, не перезагружая MariaDB с помощью --skip-grant-tables : просто войдите в корневую учетную запись системы, а затем просто подключитесь к mysql -u root без пароля, затем сбросьте поле плагина так, как описано выше.

EDIT 2: подтверждено, это происходит при каждом обновлении MariaDB на Ubuntu.

Из этого ответа, http://ubuntuforums.org/showthread.php?t=2275033&p=13272227#post13272227 .

Mysql пытается аутентифицировать root, используя плагин, а не пароль. Вам нужно отключить использование плагина для root.

 shell$ sudo mysql -u root [mysql] use mysql; [mysql] update user set plugin='' where User='root'; [mysql] flush privileges; [mysql] \q 

Подключите, как описано выше:

 mysqld_safe --skip-grant-tables 

Файл журнала будет показан:

 160518 23:21:01 mysqld_safe Logging to '/usr/local/mysql/data/ab123456.domain.com.err'. 160518 23:21:01 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data 

Список журналов поиска (в данном случае: /usr/local/mysql/data/ab123456.domain.com.err) для правильного сокета:

 cat /usr/local/mysql/data/ab123456.domain.com.err | grep "socket: " Version: '5.5.49-MariaDB' socket: '/tmp/mysql.sock' port: 3306 MariaDB Server 

И использовать его в соединении mysql:

 mysql --socket /tmp/mysql.sock -u root root@ab123456:~# /usr/local/mysql/bin/mysql --socket /tmp/mysql.sock -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 1 Server version: 5.5.49-MariaDB MariaDB Server 

По умолчанию marriadb использует плагин аутентификации «unix_socket» для установки паролей, это должно быть «mysql_native_password», поэтому

Коммутатор базы данных ..

 use mydatabase; 

Сначала посмотрите, что плагин ведьма установлен ..

 SELECT user, plugin FROM user; 

Установите его в "mysql_native_password"

 UPDATE user SET plugin="mysql_native_password"; 

Установить новый пароль …

 update user set authentication_string=password('My@Password'), plugin='mysql_native_password' where user='root'; 
Давайте будем гением компьютера.