Считайте:

./mysqladmin -u root -p** '_redacted_'  

Вывод (включая ввод пароля):

Введите пароль:

mysqladmin: ошибка подключения к серверу на локальном хосте:
'Доступ запрещен для пользователя' root '@' localhost '(с паролем: YES)'

Как исправить?

Ответы (24)

  1. Откройте и отредактируйте / etc / my.cnf или / etc / mysql / my.cnf, в зависимости от вашего дистрибутива.
  2. Добавить skip-grant-tables под [mysqld]
  3. Перезапустить MySQL
  4. Теперь вы сможете войти в MySQL, используя следующую команду mysql -u root -p
  5. Выполнить mysql> flush привилегии;
  6. Установить новый пароль на ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'NewPassword';
  7. Вернитесь в /etc/my.cnf и удалите / прокомментируйте skip-grant-tables
  8. Перезапустить MySQL
  9. Теперь вы сможете войти в систему с новым паролем mysql -u root -p

В вашем MySQL Workbenchвы можете перейти на левую боковую панель, в разделе «Управление» выберите «Пользователи и привилегии», щелкните root в разделе «Учетные записи пользователей», в правом разделе нажмите вкладку «Ограничения учетной записи», чтобы увеличить максимальное количество запросов, обновлений и т. д., а затем щелкните вкладку «Административные роли» и установите флажки, чтобы предоставить учетной записи доступ.

Иногда при установке задается пароль по умолчанию - как , упомянутый в документации. Это можно подтвердить следующей командой.

sudo grep 'temporary password' /var/log/mysqld.log

Если вы похожи на меня и вся информация в предыдущих ответах не удалась, перейдите к удалению всех версий MySQL на вашем компьютере, найдите все оставшиеся файлы MySQL с помощью команды sudo find / - назовите «mysql» и rm -rf каждый файл или каталог с прикрепленным к нему именем «mysql» (файлы, относящиеся к библиотекам языков программирования, следует пропускать).

Теперь установите свежую версию MySQL и наслаждайтесь. NB: вы потеряете все свои данные, поэтому сначала взвесьте свои варианты.

Используйте sudo, чтобы изменить свой пароль:

sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'insert_password';

Источник: Phoenixnap - Доступ запрещен для пользователя root localhost

Фикс для macOS

  1. Установите MySQL из https://downloads.mysql.com/archives/community/ (8.x является последним на сегодняшний день, но убедитесь, что версия совместима с версией macOS)

  2. Укажите пароль для root (пусть будет паролем) во время установки (не забудьте запомнить пароль!)

  3. Выберите Использовать устаревшее шифрование пароля (это то, что я использовал и не пробовал для Использовать надежное шифрование пароля)

  4. Найдите и откройте MySQL.prefPane (используйте инструмент поиска)

    1. Выбрать Конфигурация вкладка
    2. Щелкните Выберите вариант Файл конфигурации
      1. Выберите / private / etc / my.cnf
  5. Из терминала откройте новый или существующий файл с именем / etc / my.cnf (vi /etc/my.cnf) добавьте следующее содержимое:

     [mysqld]
     пропустить-грант-столы
    
  6. Перезапустите mysqld следующим образом:

    1. пс доп. | grep mysql
    2. kill -9 ... (получить идентификаторы всех связанных с MySQL процессов)
  7. mysqld автоматически перезапускается

  8. Убедитесь, что параметр установлен, запустив следующее с терминала:

     пс доп. | grep mysql
    
     > mysql / bin / mysqld ... --defaults-file = / private / etc / my.cnf ... (вывод)
    
  9. Выполните следующую команду для подключения (пусть mysql- -macos -x86_64 будет папкой, в которой установлен MySQL. Чтобы получить фактическую папку, запустите ls / usr / local / и скопируйте имя папки):

     / usr / local / mysql- <версия> -macos <версия> -x86_64 / bin / mysql -uroot -p <корневой-пароль>
    

После того, как я попробовал все остальные ответы, это то, что наконец сработало для меня:

sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;

Я нашел ответ в сообщении блога. Решено: Ошибка «Доступ запрещен для пользователя root '@' localhost '» MySQL - codementor.tech (Medium).

Для новых пользователей Linux это может быть непростой задачей. Позвольте мне обновить это с помощью MySQL 8 (последняя доступная версия - 8.0.12 по состоянию на 2018-09-12)

  1. Откройте файл конфигурации «mysqld.cnf» по адресу «/etc/mysql/mysql.conf.d/".
  2. .
  3. Добавьте skip-grant-tables к следующей строке текста [mysql] и сохраните.
  4. Перезапустите службу MySQL как «sudo service mysql restart». Теперь ваш MySQL свободен от какой-либо аутентификации.
  5. Подключитесь к клиенту MySQL (также известному как mysql-shell) как mysql -u root -p. На данный момент пароль для ввода отсутствует.
  6. Выполнить команду SQL привилегии очистки;
  7. Сбросить пароль сейчас как ALTER USER 'root' @ 'localhost', IDENTIFIED BY 'MyNewPassword';
  8. А теперь вернемся в нормальное состояние; удалите эту строку "skip-grant-tables" из "mysqld.cnf" и перезапустите службу.

Вот и все.

Если вы попали на эту страницу через Google, как это сделал я, и ни одно из предыдущих решений не помогло, то ошибка оказалась стопроцентной глупостью с моей стороны.Я не подключился к серверу. После подключения все прошло гладко.

Если это помогает узнать мои настройки, я использую Sequel Pro и пытаюсь подключиться к нему с помощью Node, используя пакет NPM, mysql. Я не думал, что мне действительно нужно подключаться (кроме запуска Sequel Pro), потому что я уже делал это из своего приложения.

Enter image description here

Я пытался использовать Docker desktop на Mac, чтобы запустить 5.7.35, и эта конфигурация docker-compose.yml позволила ему работать:

В частности это было добавление строки ...

команда: --default-authentication-plugin = mysql_native_password

... это помогло

version: '3.3'
services:
  mysql_db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'your_password'
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - ~/your/volume/path:/var/lib/mysql

Решение: Сдавайся!

Выслушайте меня. Я потратил целых два дня, пытаясь заставить MySQL работать безрезультатно, всегда застревал с ошибками разрешений, ни одна из которых не была исправлена ​​ответами на этот вопрос. Дошло до того, что я подумал, что если продолжу, то сойду с ума.

Из-за терпения заставить его работать, я отправил команду на установку SQLite, используя только 450 КБ, и она с самого начала работала отлично.

Если у вас нет терпения святого, используйте SQLite и сэкономьте много времени, усилий, боли и места для хранения ...!

Все решения, которые я нашел, были намного сложнее, чем необходимо, и ни одно из них не помогло мне. Вот решение, которое решило мою проблему. Нет необходимости перезапускать mysqld или запускать его со специальными привилегиями.

sudo mysql

-- for MySQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

-- for MariaDB
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');

С помощью одного запроса мы меняем auth_plugin на mysql_native_password и устанавливаем пароль root на root (не стесняйтесь менять его в запрос).

Теперь вы можете войти в систему с root-правами. Дополнительную информацию можно найти в документации MySQL или документации MariaDB.

(Выйдите из консоли MySQL с помощью Ctrl + D или набрав exit.)

I tried many steps to get this issue corrected. There are so many sources for possible solutions to this issue that is is hard to filter out the sense from the nonsense. I finally found a good solution here:

Step 1: Identify the database version

mysql --version

You'll see some output like this with MySQL:

mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

Or output like this for MariaDB:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

Make note of which database and which version you're running, as you'll use them later. Next, you need to stop the database so you can access it manually.

Step 2: Stopping the database server

To change the root password, you have to shut down the database server beforehand.

You can do that for MySQL with:

sudo systemctl stop mysql

And for MariaDB with:

sudo systemctl stop mariadb

Step 3: Restarting the database server without permission checking

If you run MySQL and MariaDB without loading information about user privileges, it will allow you to access the database command line with root privileges without providing a password. This will allow you to gain access to the database without knowing it.

To do this, you need to stop the database from loading the grant tables, which store user privilege information. Because this is a bit of a security risk, you should also skip networking as well to prevent other clients from connecting.

Start the database without loading the grant tables or enabling networking:

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

The ampersand at the end of this command will make this process run in the background so you can continue to use your terminal.

Now you can connect to the database as the root user, which should not ask for a password.

mysql -u root

You'll immediately see a database shell prompt instead.

MySQL Prompt

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

mysql>

MariaDB Prompt

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

MariaDB [(none)]>

Now that you have root access, you can change the root password.

Step 4: Changing the root password

mysql> FLUSH PRIVILEGES;

Now we can actually change the root password.

For MySQL 5.7.6 and newer as well as MariaDB 10.1.20 and newer, use the following command:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

For MySQL 5.7.5 and older as well as MariaDB 10.1.20 and older, use:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Make sure to replace new_password with your new password of choice.

Note: If the ALTER USER command doesn't work, it's usually indicative of a bigger problem. However, you can try UPDATE ... SET to reset the root password instead.

[IMPORTANT] This is the specific line that fixed my particular issue:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

Remember to reload the grant tables after this.

In either case, you should see confirmation that the command has been successfully executed.

Query OK, 0 rows affected (0.00 sec)

The password has been changed, so you can now stop the manual instance of the database server and restart it as it was before.

Step 5: Restart the Database Server Normally

The tutorial goes into some further steps to restart the database, but the only piece I used was this:

For MySQL, use:

sudo systemctl start mysql

For MariaDB, use:

sudo systemctl start mariadb

Now you can confirm that the new password has been applied correctly by running:

mysql -u root -p

The command should now prompt for the newly assigned password. Enter it, and you should gain access to the database prompt as expected.

Conclusion

You now have administrative access to the MySQL or MariaDB server restored. Make sure the new root password you choose is strong and secure and keep it in safe place.

В моем случае под Debian 10 ошибка

ОШИБКА 1698 (28000): доступ запрещен для пользователя root @ localhost

было решено с помощью (хороший способ)

sudo mysql -u root -p mysql

Плохой путь:

mysql -u root -p mysql

Для пользователей Ubuntu / Debian

(Может работать в других дистрибутивах, особенно на базе Debian.)

Выполните следующее, чтобы подключиться как root (без пароля)

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

Если вы не хотите добавлять - defaults-file каждый раз, когда вы хотите подключиться как root, вы можете скопировать / etc / mysql / debian. cnf в домашний каталог:

sudo cp /etc/mysql/debian.cnf ~/.my.cnf

А потом:

sudo mysql

Я сделал это, чтобы установить свой пароль root при первоначальной настройке MySQL в OS X. Откройте терминал.

sudo sh -c 'echo / usr / local / mysql / bin> /etc/paths.d/mysql'

Закройте терминал и откройте новый терминал.

А в Linux для установки пароля root работало следующее:

sudo /usr/local/mysql/support-files/mysql.server stop
sudo mysqld_safe --skip-grant-tables

(sudo mysqld_safe --skip-grant-tables: у меня это не сработало в первый раз. Но со второй попытки все прошло успешно.)

Затем войдите в MySQL:

mysql -u root

FLUSH PRIVILEGES;

Теперь смените пароль:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

Перезапустить MySQL:

sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server start

Может случиться, если у вас недостаточно прав.

Наберите su, введите пароль root и повторите попытку.

Ни один из предыдущих ответов не помог мне с этой проблемой, поэтому вот решение, которое я нашел.

Соответствующая часть:

В системах Ubuntu, работающих под управлением MySQL 5.7 (и более поздних версий), пользователь root MySQL по умолчанию настроен на аутентификацию с использованием плагина auth_socket, а не с паролем. Это позволяет повысить безопасность и удобство использования во многих случаях, но также может усложнить ситуацию, когда вам нужно разрешить внешней программе (например, phpMyAdmin) доступ к пользователю.

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

sudo mysql

Затем проверьте, какой метод аутентификации использует каждая из ваших учетных записей MySQL, с помощью следующей команды:

ВЫБРАТЬ пользователя, аутентификационную_строку, плагин, хост ИЗ mysql.user;

Выход

+ ------------------ + ------------------------ ------------------- + ----------------------- + ------ ----- +
| пользователь | Authentication_string | плагин | хост |
+ ------------------ + ------------------------------ ------------- + ----------------------- + ----------- +
| корень | | auth_socket | localhost |
| mysql.session | * ЭТОТ НЕДОСТАТОЧНЫЙ ПАРОЛЬ, ЧТО МОЖЕТ БЫТЬ ЗДЕСЬ | mysql_native_password | localhost |
| mysql.sys | * ЭТОТ НЕДОСТАТОЧНЫЙ ПАРОЛЬ, ЧТО МОЖЕТ БЫТЬ ЗДЕСЬ | mysql_native_password | localhost |
| debian-sys-maint | * CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+ ------------------ + ------------------------------ ------------- + ----------------------- + ----------- +
4 ряда в наборе (0,00 сек)

В этом примере вы можете видеть, что пользователь root действительно аутентифицируется с помощью плагина auth_socket. Чтобы настроить учетную запись root для аутентификации с помощью пароля, выполните следующую команду ALTER USER. Обязательно смените пароль на надежный пароль по вашему выбору и обратите внимание, что эта команда изменит пароль root, который вы установили на шаге 2:

ALTER USER 'root' @ 'localhost' ИДЕНТИФИЦИРОВАН mysql_native_password BY 'password';

Затем запустите FLUSH PRIVILEGES, который сообщает серверу перезагрузить таблицы предоставления и ввести в действие ваши новые изменения:

ПРИВИЛЕГИИ ПРОМЫВКИ;

Проверьте методы аутентификации, используемые каждым из ваших пользователей еще раз, чтобы убедиться, что root больше не аутентифицируется с помощью плагина auth_socket:

ВЫБРАТЬ пользователя, аутентификационную_строку, плагин, хост ИЗ mysql.user;

Выход

+ ------------------ + ------------------------ ------------------- + ----------------------- + ------ ----- +
| пользователь | Authentication_string | плагин | хост |
+ ------------------ + ------------------------------ ------------- + ----------------------- + ----------- +
| корень | * 3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | * ЭТОТ НЕДОСТАТОЧНЫЙ ПАРОЛЬ, ЧТО МОЖЕТ БЫТЬ ЗДЕСЬ | mysql_native_password | localhost |
| mysql.sys | * ЭТОТ НЕДОСТАТОЧНЫЙ ПАРОЛЬ, ЧТО МОЖЕТ БЫТЬ ЗДЕСЬ | mysql_native_password | localhost |
| debian-sys-maint | * CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+ ------------------ + ------------------------------ ------------- + ----------------------- + ----------- +
4 ряда в наборе (0,00 сек)

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

выход

тьфу - у меня ничего не работало! У меня есть машина CentOS 7.4, на которой работает MariaDB 5.5.64.

Пришлось сделать сразу после установки MariaDB из YUM;

systemctl перезапуск mariadb
mysql_secure_installation

Программа mysql_secure_installation проведет вас через ряд шагов, включая «Установить пароль root? [Y / n]». Просто скажите «y» и дайте ему пароль. Ответьте на остальные вопросы, как хотите.

Затем вы можете войти со своим паролем, используя

mysql -u корень -p

Выживет

systemctl перезапуск mariadb

Ключ

Затем я проверил исходный код / bin / mysql_secure_installation, чтобы выяснить, каким образом он мог волшебным образом изменить пароль root, и ни один из других ответов здесь не смог. Бит импорта:

do_query "ОБНОВИТЬ mysql.user SET Password = PASSWORD ('$ esc_pass') WHERE User = 'root';"

... В нем написано SET Password = ..., а не SET authentication_string = PASSWORD .... Итак, правильная процедура для этой версии (5.5.64):

Войдите, используя mysql -u root -p, используя уже установленный пароль.

Или остановите базу данных и запустите ее с:

mysql_safe --skip-grant-tables --skip -etwork &

Из подсказки mysql>:

использовать mysql;
выберите хост, пользователя, пароль от пользователя, где user = 'root';
(соблюдайте существующие пароли для root).
ОБНОВЛЕНИЕ mysql.user set Password = PASSWORD ('your_new_cleartext_password'), где user = 'root' AND host = 'localhost';
выберите хост, пользователя, пароль от пользователя, где user = 'root';
сбросить привилегии;
покидать;

Убить запущенный mysqld_safe. Перезапустите MariaDB. Войдите как root: mysql -u -p. Используйте свой новый пароль.

При желании можно установить сразу все пароли root. Думаю, это разумно:

mysql -u корень -p

(авторизоваться)
используйте mysql;
выберите хост, пользователя, пароль от пользователя, где user = 'root';
ОБНОВЛЕНИЕ mysql.user set Password = PASSWORD ('your_new_cleartext_password'), где user = 'root';
выберите хост, пользователя, пароль от пользователя, где user = 'root';
сбросить привилегии;
покидать;

Это приведет к обновлению всех паролей root: т.е. для «localhost», «127.0.0.1» и «:: 1»

В будущем, когда я перейду на RHEL 8 или что у вас, я постараюсь не забыть проверить / bin / mysql_secure_installation и посмотреть, как ребята это сделали, кто настроил MariaDB для этой ОС.

The '-p' argument doesn't expect a space between the argument name and value.

Instead of

./mysqladmin -u root -p 'redacted'

Use

./mysqladmin -u root -p'redacted'

Or just

./mysqladmin -u root -p

which will prompt you for a password.

По моему опыту, если вы запустите без sudo, это не сработает. Поэтому убедитесь, что ваша команда:

sudo mysql -uroot -p

Я получал ту же ошибку при настройке версии mysql-8 zip. Наконец, переключился на версию installer, которая работала без проблем. Во время установки появляется запрос на установку пароля root. После установки он точно работает.

Enter image description here

Согласно официальной документации MariaDB, в MariaDB 10.4.3 и новее плагин аутентификации unix_socket устанавливается по умолчанию.

Чтобы отключить его и вернуться к предыдущему методу аутентификации mysql_native_password, добавьте строку ниже в раздел [mysqld] файла my.cnf:

[mysqld]
unix_socket=OFF

А потом запустите:

mysql_install_db --auth-root-authentication-method = normal

А потом запустите mysqld

Эта команда будет работать нормально:

mysqladmin -u root password CHANGEME

Для получения дополнительной информации см. Настройка mysql_install_db для возврата к предыдущему методу аутентификации.

После долгих попыток со следующим ответом:

ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');

И аналогичные ответы, мой терминал все еще выдавал мне следующую ошибку:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с ...

Итак, после исследования в сети эта строка решила мою проблему и позволила мне изменить пароль пользователя root:

sudo mysqladmin --user=root password "[your password]"

2022 WebDevInsider