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

134

Я инженер-электротехник, который в основном играет с энергосистемой вместо программирования. Недавно я изучил руководство по установке программного пакета на Ubuntu. На самом деле я вообще не знаю о mySQL. На моем Ubuntu я выполнил следующие установки.

sudo apt-get update
sudo apt-get install mysql-server-5.5
sudo apt-get install mysql-client-5.5
sudo apt-get install mysql-common
sudo apt-get install glade
sudo apt-get install ntp

Тогда я делаю

me@ubuntu:~/Desktop/iPDC-v1.3.1/DBServer-1.1$ mysql -uroot -proot <"Db.sql"

В результате появилось следующее сообщение об ошибке.

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Как я могу его исправить и продолжить?

  • 1
    Это не похоже на программирование, связанное со мной. Я пометил его для миграции в SuperUser
Теги:

19 ответов

110
Лучший ответ

Примечание. Для MySQL 5. 7+ см. Ответ @Lahiru на этот вопрос. Это содержит более актуальную информацию.

Для MySQL <5.7:

Пароль root по умолчанию пуст (то есть пустая строка), а не root. Таким образом, вы можете просто войти как:

mysql -u root

Вы, очевидно, должны изменить свой пароль root после установки

mysqladmin -u root password [newpassword]

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

  • 0
    Спасибо за быстрый ответ. Не могли бы вы объяснить, что -proot <"Db.sql часть -proot <"Db.sql ?
  • 4
    @FarticlePilter Флаг -p указывает пароль, поэтому после изменения пароля root вы должны сделать следующее: mysql -u root -p[newpassword] . < [filename] использует ввод std для выполнения файла SQL по пути, указанному через предоставленные вами учетные данные пользователя.
Показать ещё 12 комментариев
115

Мне удалось решить эту проблему, выполнив этот оператор

sudo dpkg-reconfigure mysql-server-5.5

Что изменит пароль root.

  • 7
    Как раз то, что мне было нужно ... но не у всех есть версия 5.5 сервера. использовать dpkg --get-selections | grep sql чтобы получить вашу версию
  • 1
    @Balmipour какая должна быть эквивалентная команда для проверки версии sql в Rhel 6.x
Показать ещё 5 комментариев
55

Вы должны сбросить пароль! шаги для Mac OSX (проверено и работает) и Ubuntu

Прекратить использование MySQL

sudo service mysql stop

или же

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

Запустите его в безопасном режиме:

$ sudo mysqld_safe --skip-grant-tables --skip-networking

(над строкой целая команда)

Это будет текущая команда до завершения процесса, поэтому откройте другое окно оболочки/терминала и войдите без пароля:

$ mysql -u root

mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';

Согласно комментарию @IberoMedia, для более новых версий MySQL поле называется authentication_string:

mysql> UPDATE mysql.user SET authentication_string =PASSWORD('password') WHERE User='root';

Запустите MySQL, используя:

sudo service mysql start

или же

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

Ваш новый пароль - "пароль".

  • 2
    Пожалуйста, НЕ так! Ответ @ Divz является более безопасным. Цитирование документа о --skip-grant-tables: Это позволяет любому подключаться без пароля и со всеми привилегиями [...] Поскольку это небезопасно, [...] используйте --skip-grant-tables вместе с --skip-networking для предотвращения подключения удаленных клиентов. о, а также, этот не работал для меня. Вот почему я пришел сюда: p
  • 0
    так что ваше высказывание использует это "sudo mysqld_safe --skip-grant-tables --skip-network"
Показать ещё 7 комментариев
28

если проблема все еще существует, попробуйте принудительно изменить проход

/etc/init.d/mysql stop

mysqld_safe --skip-grant-tables &

mysql -u root

Настройка нового пароля пользователя root root

use mysql;
update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
flush privileges;
quit;

Остановить сервер MySQL:

/etc/init.d/mysql stop

Запустите сервер MySQL и протестируйте его:

mysql -u root -p
  • 1
    Спасибо. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) также преследовал мой сервер. «mysqld_safe» также не удался, пока я не сделал «killall mysqld» ПОСЛЕ вашего шага 1.
  • 0
    Пожалуйста, НЕ так! Ответ @ Divz является более безопасным. Цитирование документа о --skip-grant-tables: Это позволяет любому подключаться без пароля и со всеми привилегиями [...] Поскольку это небезопасно, [...] используйте --skip-grant-tables вместе с --skip-networking для предотвращения подключения удаленных клиентов. о, а также, этот не работал для меня. Вот почему я пришел сюда: p
Показать ещё 3 комментария
16

При первоначальном запуске сервера происходит следующее, учитывая, что каталог данных сервера пуст:

  • Инициализируется сервер.
  • Сертификат SSL и ключевые файлы создаются в каталоге данных.
  • Плагин validate_password установлен и включен.
  • Создана учетная запись суперпользователя 'root' @'localhost'. Пароль для суперпользователя устанавливается и сохраняется в файле журнала ошибок.

Чтобы открыть его, используйте следующую команду:

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

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

shell> mysql -uroot -p 

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass5!'; 
  • 7
    Это выглядело многообещающе, но это не работает для меня. Когда я запускаю sudo grep 'temporary password' /var/log/mysqld.log я получаю /var/log/mysqld.log: No such file or directory
  • 3
    Попробуйте sudo grep 'temporary password' /var/log/mysql/error.log . Решение @Lahiru сработало для меня.
Показать ещё 2 комментария
14

Это происходит, когда ваш пароль отсутствует.

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

  1. Остановите MySQL Server (в Linux):

    sudo systemctl stop mysql
    
  2. Запустите базу данных без загрузки таблиц грантов или включения сетей:

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

    Амперсанд в конце этой команды заставит этот процесс работать в
    фон, так что вы можете продолжать использовать свой терминал и запустить #mysql -u root, он не будет запрашивать пароль.

    Если вы получаете ошибку, как показано ниже:

    2018-02-12T08: 57: 39.826071Z mysqld_safe Каталог '/var/run/mysqld' для UNIX
    Файл сокета не существует. mysql -u root ERROR 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет
    '/var/run/mysqld/mysqld.sock' (2) [1] + Выход 1

  3. Сделать сервисный каталог MySQL.

    sudo mkdir /var/run/mysqld
    

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

    sudo chown mysql: /var/run/mysqld
    
  4. Выполните ту же команду на шаге 2, чтобы запустить mysql в фоновом режиме.

  5. Запустите mysql -u root, вы получите консоль mysql без ввода пароля.

    Запустите эти команды

    FLUSH PRIVILEGES;
    

    Для MySQL 5.7.6 и новее

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

    Для MySQL 5.7.5 и старше

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

    Если команда ALTER USER не работает, используйте:

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

Теперь выход

  1. Чтобы остановить экземпляр запущен вручную

    sudo kill 'cat /var/run/mysqld/mysqld.pid'
    
  2. Перезапустите MySQL

    sudo systemctl start mysql
    
  • 0
    В моем случае я должен изменить Шаг 6, так как sudo kill `sudo cat /var/run/mysqld/mysqld.pid`
  • 0
    Это тот, который работал для меня. На шаге 5 выполните 1. используйте USER 2. Для изменения пароля используйте -> update user set authentication_string = PASSWORD ("password"), где User = 'root';
13

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

mysql -u root -p 

после чего он запрашивает у вас пароль

Enter password: 

а затем я ввел пароль, который я использовал. Все это

  • 0
    Забавно, что это помогло после нескольких дней исследований.
  • 0
    Приятно знать @girish_vr
Показать ещё 1 комментарий
10

Использую Ubuntu-16.04: установлен mysql - 5.7. У меня была та же проблема: вход в систему запрещен для пользователя root.

Попробовал следующие шаги:

  1. dpkg --get-selections | grep mysql dpkg --get-selections | grep mysql (чтобы получить версию mysql).

  2. dpkg-reconfigure mysql-server-5.7

  3. mysql -u root -p

Без -p это не побуждает вас спрашивать пароль. Войдя в систему, вы можете создать пользователя с паролем, выполнив следующие действия:

CREATE USER 'your_new_username'@'your-hostname' IDENTIFIED BY 'your-password';

GRANT ALL PRIVILEGES ON *.* to 'your_new_username'@'your-hostname' WITH GRANT OPTION;

Выход из рута и логин с того, что вы дали выше.

mysql -u <your_new_username> -p

По какой-то причине все еще просто печатать mysql не работает. СОВСЕМ. Я предлагаю сделать это привычкой использовать mysql -u <name> -p.

6

Я столкнулся с этой очень раздражающей проблемой и нашел много ответов, которые не работали. Лучшее решение, с которым я столкнулся, было полностью удалить mysql и переустановить его. При переустановке вы устанавливаете пароль root, и это решает проблему.


sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

Я нашел этот код в другом месте, поэтому я не беру на себя ответственность за него. Но это работает. Чтобы установить mysql после его удаления, я думаю, что у digital Ocean есть хорошее руководство. Оформите мою суть для этого.
https://gist.github.com/JamesDaniel/c02ef210c17c1dec82fc973cac484096

  • 0
    Работает на Raspberry Pi тоже :)
5

Прочтите официальную документацию: Mysql: Как Reset пароль root

Если у вас есть доступ к терминалу:

MySQL 5.7.6 и более поздние версии:

$ mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.5 и ранее:

$ mysql
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
  • 1
    Дает: ОШИБКА 1131 (42000): вы используете MySQL в качестве анонимного пользователя, и анонимным пользователям запрещено изменять пароли
  • 1
    Это нормально. Ваш пользователь анонимный. Вам нужно выполнить > mysql -u {your_username}
3

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

mysql -u root -p

Я получил сообщение об ошибке

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Даже при том, что я вводил правильный пароль (временный пароль, который вы получаете при первой установке mysql)

Я правильно понял, когда я набрал пароль при мигании подсказки пароля

3

Я использую mysql-5.7.12-osx10.11-x86_64.dmg в Mac OSX

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

Следуйте инструкциям

  • Перейдите к cd /usr/local/mysql/bin/
  • Введите временный пароль (который будет выглядеть примерно так: "tsO07JF1 = > 3" )
  • Вы должны получить приглашение mysql > .
  • Выполнить, SET PASSWORD FOR 'root'@'localhost' = PASSWORD('{YOUR_PASSWORD}'); Если вы хотите установить свой пароль: "root", тогда команда будет SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
  • Запустить ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
  • Запустить exit
  • Выполнить ./mysql -u root -p
  • Введите свой пароль. В моем случае я бы набрал "root" (без цитаты)
  • Это все.

Для удобства вы должны добавить "/usr/local/mysql/bin" в свой PATH

Теперь из любого места вы можете ввести ./mysql -u root -p и затем ввести пароль, и вы получите приглашение mysql > .

Надеюсь, это поможет.

2

если проблема все еще существует, попробуйте принудительно изменить проход

Остановить сервер MySQL (в Linux):

/etc/init.d/mysql stop

Остановить сервер MySQL (в Mac OS X):

mysql.server stop

Запустите демон mysqld_safe с помощью -skip-grant-tables

mysqld_safe --skip-grant-tables &
mysql -u root

Настройка нового пароля пользователя root root

use mysql;
update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
flush privileges;
quit;

Остановить сервер MySQL (в Linux):

/etc/init.d/mysql stop

Остановить сервер MySQL (в Mac OS X):

mysql.server stop

Запустите службу сервера MySQL и проверьте для входа в систему root:

mysql -u root -p
1

В Ubuntu 16.04 (версия MySQL 5.7.13) я смог решить проблему с помощью следующих шагов:

  • Следуйте инструкциям из раздела B.5.3.2.2 Сброс корневого пароля: Unix и Unix-подобные системы Справочное руководство по MySQL 5.7

  • Когда я пробовал #sudo mysqld_safe --init-file =/home/me/mysql-init, и он не удался. Ошибка была в /var/log/mysql/error.log

    2016-08-10T11: 41: 20.421946Z 0 [Примечание] Выполнено выполнение init_file '/home/me/mysql/mysql-init'. 2016-08-10T11: 41: 20.422070Z 0 [ERROR]/usr/sbin/mysqld: Файл '/home/me/mysql/mysql-init' не найден (Errcode: 13 - Permission denied) 2016-08-10T11: 41: 20.422096Z 0 [ОШИБКА] Отмена

Разрешение файла mysql-init не было проблемой, необходимо отредактировать разрешение аранжировщика

  1. Редактировать #sudo vi/etc/apparmor.d/usr.sbin.mysqld

    ....
      /var/log/mysql/ r,
      /var/log/mysql/** rw,
    
    
    # Allow user init file
      /home/pranab/mysql/* r,
    
      # Site-specific additions and overrides. See local/README for details.
      #include <local/usr.sbin.mysqld>
    }
    
  2. Перезагрузите #sudo/etc/init.d/apparmor

  3. Запустите mysqld_safe, повторите шаг 2 выше. Проверьте /var/log/mysql/error.log убедитесь, что нет ошибки, и mysqld успешно запущен.

  4. Запустите #mysql -u root -p

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

Введите пароль, указанный в mysql-init. Теперь вы можете войти в систему с правами root.

  1. Завершение работы mysqld_safe с помощью #sudo mysqladmin -u root -p shutdown

  2. Запустите обычный mysqld путь #sudo systemctl запустите mysql

1

Только одна строка, и она решила мою проблему.

sudo dpkg-reconfigure mysql-server-5.5
0

На Mac, если у вас есть проблема при входе с первым паролем, который вы дали при установке, возможно, вы можете просто убить процесс mysql и затем попробовать.

Итак: 1- выполните следующую команду, чтобы найти PID mysql:

ps -aef | grep mysql | grep -v grep

2- убить процесс:

kill -15 [process id] 

Затем вы можете войти с помощью первоначального пароля с помощью этой команды:

mysql -uroot -p

Которые просят вас ввести свой пароль. Просто введите первоначальный пароль.

0

Если вы еще не установили пароль, запустите mysql -uroot, он работает для меня.

0

В последних версиях MySQL нет таблицы password в mysql.user.

Итак, вам нужно выполнить ALTER USER. Поместите эту одну строку в файл.

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

И запустите его как файл init (как пользователь root или mysql)

mysqld_safe --init-file=/home/me/mysql-init &

Для запуска сервера mysqld_safe необходимо остановить сервер MySQL.

Кроме того, может возникнуть проблема с разрешениями apparmor для загрузки этого файла инициализации. Подробнее здесь https://blogs.oracle.com/jsmyth/entry/apparmor_and_mysql

0

Пароль по умолчанию по умолчанию будет пустым, поэтому вам нужно изменить пароль, выполнив следующие шаги.

подключиться к mysql

root # mysql

Использовать mysql

mysql > update user set password = PASSWORD ('root'), где User = 'root'; Наконец, перезагрузите привилегии:

mysql > привилегии flush; mysql > quit

Ещё вопросы

Сообщество Overcoder
Наверх
Меню