MySQL 루트 비밀번호를 재설정 할 수 없습니다. server at ‘localhost’ failed error: ‘Access denied

먼저 Ask Ubuntu에서이 문제에 대한 모든 질문을 읽었으며 공식 문서의 모든 단계를 수행했음을 분명히하겠습니다.

help.ubuntu.com

dev.mysql.com

우분투 16.04.1 LTS를 사용하고 있습니다

누군가가 이미 시도한 것을 제안하기 전에 내가 한 일을 보여줄 것입니다.

root@localhost:/# sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.

MySQL이 올바르게 중지되었습니다.

root@localhost:/# sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 3316
root@localhost:/#

여기서 이것이 작동하는지 여부를 알 수 없으므로 어쨌든 단계를 따릅니다.

root@localhost:/# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
root@localhost:/#

서비스가 시작되지 않아 작동하지 않는 것 같습니다. 다음 단계를 계속할 수 없으므로 다른 방법을 시도하십시오 (퍼지).

사용한 후 :

sudo apt-get --purge remove
sudo apt-get install

다음 단계를 시도하십시오.

root@localhost:/# mysqladmin -u root password MyNewPassword
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
root@localhost:/#

이것도 작동하지 않기 때문에 mysql 웹에서 언급 한 다른 방법을 시도했습니다.

그래서 거기에서 지적한대로 mysql 프로세스를 종료 한 다음 사용합니다.

root@localhost:/# mysqld_safe --init-file=/home/me/mysql-init &
[1] 5267
root@localhost:/# 2017-02-01T12:47:49.250083Z mysqld_safe Logging to syslog.
2017-02-01T12:47:49.252427Z mysqld_safe Logging to '/var/log/mysql/error.log'.

2017-02-01T12:47:49.254765Z mysqld_safe Logging to '/var/log/mysql/error.log'.

2017-02-01T12:47:49.257045Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

[1]+  Salida 1                mysqld_safe --init-file=/home/me/mysql-init
root@localhost:/#

지금은 옵션에서 벗어날 때이므로 Ask Ubuntu에 여기에 언급 된 다른 방법을 시도하십시오.

root@localhost:/# sudo dpkg-reconfigure mysql-server-5.7
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.17, use --force if you still need to run mysql_upgrade
root@localhost:/#

그리고 지금 나는 선택의 여지가 없으므로 어떤 제안이라도 환영합니다.



답변

나는 같은 문제가 있었고이 줄을 실행하여 해결했습니다.

$ sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld

이 줄을 실행하기 전에 :

root@localhost:/# mysqld_safe --init-file=/home/me/mysql-init &

에게이 단계 는 더 잘 작동했습니다.

이 작업을 수행하는 더 깨끗한 방법이 있다고 생각하지만 빠르고 효율적인 해결 방법이었습니다.


답변

내가 시도한 것에 상관없이 mysql을 다시 설치할 수 없었기 때문에 비밀번호를 재설정하고 재설정해야했습니다.

우분투 16.04.1 LTS 에서이 길을 가야했습니다. 나는 시간을 보냈다 이상의 SO뿐만 아니라 AskUbuntu Q & A의, 나는 마침내 함께 일하고있어에 모든 것을 MySQL의 웹 사이트에서 다른 모든 제안을 시도 :

참고 : 이 루트 사용자에 대한 암호를 입력 보였다, 나는 원래 암호가 didnt는 I 있도록 새 비밀번호와 동일한 비밀번호를 입력했습니다.

참고 : 이 더 /var/log/mysqld.log이 없었다에만 /var/log/mysql/error.log

또한이 나를 위해 작동하지 않았다주의 :

sudo dpkg-reconfigure mysql-server-5.7

아니다 않았다

sudo dpkg-reconfigure --force mysql-server-5.5

만들기 MySQL의 서비스 디렉토리.

sudo mkdir /var/run/mysqld

MySQL 사용자에게 서비스 디렉토리에 쓸 수있는 권한을 부여하십시오.

sudo chown mysql: /var/run/mysqld

그때:

  1. 현재 mysqld pid를 죽인다
  2. sudo / usr / sbin / mysqld &로 mysqld를 실행하십시오.
  3. / usr / bin / mysql_secure_installation을 실행하십시오. mysql_secure_installation의

    출력

    root @ my 서버 : ~ # / usr / bin / mysql_secure_installation

    MySQL 서버 배포 보안

    사용자 루트의 비밀번호를 입력하십시오.

    VALIDATE PASSWORD PLUGIN을 사용하여 비밀번호를 테스트하고 보안을 향상시킬 수 있습니다. 암호의 강도를 확인하고 사용자는 충분히 안전한 암호 만 설정할 수 있습니다. VALIDATE PASSWORD 플러그인을 설정 하시겠습니까?

    y의 경우 y | Y를 누르고, 아니오의 다른 키를 : no 기존 암호를 루트로 사용하십시오. root의 비밀번호를 변경 하시겠습니까? ((예 : y | Y, 예 : 다른 키) : y

    새 비밀번호:

    새 비밀번호 재 입력 : 기본적으로 MySQL 설치에는 익명의 사용자가 있으므로 누구나 사용자 계정을 만들지 않고도 MySQL에 로그인 할 수 있습니다. 이것은 테스트 용이며 설치를 좀 더 부드럽게하기위한 것입니다. 프로덕션 환경으로 이동하기 전에 제거해야합니다.

    익명 사용자를 제거 하시겠습니까? (예 : y | Y, 아니오 : 다른 키) : y 성공.

    일반적으로 root는 ‘localhost’에서만 연결할 수 있어야합니다. 이렇게하면 누군가 네트워크에서 루트 암호를 추측 할 수 없습니다.

    원격으로 루트 로그인을 허용하지 않습니까? (예 : y | Y, 아니오 : 다른 키) : y 성공.

    기본적으로 MySQL에는 누구나 액세스 할 수있는 ‘test’라는 데이터베이스가 제공됩니다. 이것은 테스트 용으로 만 사용되며 프로덕션 환경으로 이동하기 전에 제거해야합니다.

    테스트 데이터베이스를 제거하고 액세스 하시겠습니까? (예 : y | Y, 아니오 : 다른 키) : y

    • 테스트 데이터베이스를 삭제하는 중 … 성공

    • 테스트 데이터베이스에서 권한을 제거하는 중 … 성공.

    권한 테이블을 다시로드하면 지금까지의 모든 변경 사항이 즉시 적용됩니다.

    지금 권한 테이블을 다시로드 하시겠습니까? (예 : y | Y, 아니오 : 다른 키) : y 성공.

    다 했어요!


답변

나는 같은 문제가 있었고 그것을 해결했다.

# /etc/init.d/mysql stop
# service mysql stop
# mkdir -p /var/run/mysqld
# chown mysql:mysql /var/run/mysqld
# mysqld_safe --skip-grant-tables &
# mysql -u root
mysql> use mysql;
mysql> update user set authentication_string=password('1234') where user='root';

(여기서 authentication_string비밀번호 필드를 보유합니다.)


답변