MySQL Hatası:: 'root' @ 'localhost' kullanıcısı için erişim reddedildi


265

$ ./mysqladmin -u root -p ' redacted '
Parola girin:

mysqladmin: 'localhost' adresinden sunucuya bağlanma hatası:
'root' @ 'localhost' kullanıcısı için erişim reddedildi (şifre kullanarak: YES) '

Bunu nasıl düzeltebilirim?



1
@clearlight Aynı soru değil, bu yazı mysqladmin mysql içine süper ayrıcalıklar kazanmak ile ilgili bir sorun, diğer yazı soketten basit bir bağlantı ile ilgili bir sorundur.
e-info128

Varsa ~/.my.cnfdosyayı kaldırmayı deneyin .
e-info128

11
Bunun eski olduğunu biliyorum, ancak gelecekteki ziyaretçiler için bunu söylemek istiyorum. MySQL şifrenizi, özellikle root için, komutun kendisine girmeyin, aksi takdirde kabuk geçmişinizde saklanacaktır. Sadece -pseçeneği kendi başına bırakın ve mysql bir şifre isteyecektir.
Scotty C.

Yanıtlar:


359
  1. Aç & Düzenleme /etc/my.cnfveya /etc/mysql/my.cnfsizin dağıtıma bağlı.
  2. ekle skip-grant-tablesaltında[mysqld]
  3. MySQL'i yeniden başlat
  4. Aşağıdaki komutu kullanarak mysql'ye şimdi giriş yapabilmelisiniz mysql -u root -p
  5. Çalıştırmak mysql> flush privileges;
  6. Tarafından yeni şifre belirle ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. /Etc/my.cnf sayfasına geri dön ve skip-grant-tables komutunu kaldır / yorumla
  8. MySQL'i yeniden başlat
  9. Artık yeni şifre ile giriş yapabileceksiniz mysql -u root -p

6
Merhaba, ben de aynı sorunu yaşadım. Yukarıdakileri yaptım ve sorunu çözdüm, ancak her CentOS'u yeniden başlattığımda, tüm adımları tekrar yapmam gerekiyor (mesajı aldım: Kullanıcı 'root' @ 'localhost' için erişim reddedildi (şifre kullanarak: HAYIR) - mysql (veya herhangi bir sql komutu) komutunu çalıştırdığınızda ve her yeniden başlatmada yukarıdaki gibi tekrar tekrar yaparım
Eitan

19
Bunun MariaDB ile çalışmadığı için çok kötü:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER 'root'@'localhost' IDENTIFIED BY 'NewPassword'' at line 1
Philipp Ludwig

11
Bunu @PhilippLudwig çalışmak için buldum. set PASSWORD FOR 'root'@'localhost' = PASSWORD('root');5. adımdan sonra yaptım. İşte komut istemi MariaDB [(none)]> MariaDB [(none)]> set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec)
çıktım şöyle

3
Adım 3 için sudo systemctl restart mariadb
MariaDB'yi

7
Bazı /etc/mysql/my.cnf dosyayı bulabilir
DSinghvi

590

Bulduğum tüm çözümler gerekenden çok daha karmaşıktı ve hiçbiri benim için işe yaramadı. İşte sorunumu çözen çözüm. MySQL'i yeniden başlatmaya veya özel ayrıcalıklarla başlatmaya gerek yok.

sudo mysql

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

Tek bir sorgu ile biz değişiyor auth_plugin için mysql_native_password ve root parolası root (sorguda bunu değiştirmekten çekinmeyin)

Şimdi root ile giriş yapabilmelisiniz. Daha fazla bilgi mysql belgelerinde bulunabilir

( Ctrl + D ile mysql konsolundan çıkın veya exit yazarak )


41
Bunu yapamıyorum ... "SQL sözdiziminizde bir hata var; MariaDB sunucu sürümünüze karşılık gelen elkitabına yakın kullanmak için doğru sözdizimini kontrol edin ...".
TCB13

2
Bu cevap işe yaradı, yanlışlıkla ekledim faydalı cevap oyu, afedersiniz!
taher

25
Ubuntu üzerinde çok iyi çalıştı 18.04
Almino Melo

2
@ TCB13 ve bu sorunla karşılaşan herkes. "Bunu yapamıyorum ..." SQL sözdiziminde bir hata var; yakınında kullanmak için doğru sözdizimi için MariaDB sunucu sürümünüze karşılık gelen kılavuzu kontrol edin ... ". alter komutunu çalıştırmadan önce FLUSH PRIVILEGES kullanın
kodlayıcı


50

Bu sorunu düzeltmek için birçok adım denedim. Bu soruna olası çözümler için, saçmalıktan duyuları filtrelemek zor olan birçok kaynak var. Sonunda burada iyi bir çözüm buldum :

Adım 1: Veritabanı Sürümünü Belirleme

$ mysql --version

MySQL ile böyle bir çıktı göreceksiniz:

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

Veya MariaDB için şu şekilde çıktı alın:

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

Daha sonra kullanacağınız için hangi veritabanını ve hangi sürümü çalıştırdığınızı not edin. Ardından, veritabanına manuel olarak erişebilmek için durdurmanız gerekir.

Adım 2: Veritabanı Sunucusunu Durdurma

Kök parolasını değiştirmek için, veritabanı sunucusunu önceden kapatmanız gerekir.

MySQL için aşağıdakileri yapabilirsiniz:

$ sudo systemctl stop mysql

Ve MariaDB için:

$ sudo systemctl stop mariadb

Adım 3: İzin Sunucusu Olmadan Veritabanı Sunucusunu Yeniden Başlatma

MySQL ve MariaDB'yi kullanıcı ayrıcalıkları hakkında bilgi yüklemeden çalıştırırsanız, şifre girmeden veritabanı komut satırına root ayrıcalıklarıyla erişmenizi sağlar. Bu, bilmeden veritabanına erişmenizi sağlayacaktır.

Bunu yapmak için, veritabanının kullanıcı ayrıcalık bilgilerini depolayan hibe tablolarını yüklemesini durdurmanız gerekir. Bu biraz güvenlik riski taşıdığından, diğer istemcilerin bağlanmasını önlemek için ağı da atlamanız gerekir.

Hibe tablolarını yüklemeden veya ağ oluşturmayı etkinleştirmeden veritabanını başlatın:

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

Bu komutun sonundaki ve işareti bu işlemi arka planda çalıştırır, böylece terminalinizi kullanmaya devam edebilirsiniz.

Şimdi veritabanına root istemek için bağlanabilirsiniz ki bu şifre istememelidir.

$ mysql -u root

Bunun yerine hemen bir veritabanı kabuğu istemi göreceksiniz.

MySQL İstemi

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

mysql>

MariaDB İstemi

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

MariaDB [(none)]>

Artık root erişimine sahip olduğunuza göre, root şifresini değiştirebilirsiniz.

Adım 4: Kök Parolasını Değiştirme

mysql> FLUSH PRIVILEGES;

Şimdi root şifresini değiştirebiliriz.

İçin MySQL 5.7.6 ve daha yeni olarak mariadb 10.1.20 ve daha yeni , aşağıdaki komutu kullanın:

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

İçin MySQL 5.7.5 ve üstü yanı sıra mariadb 10.1.20 ve üzeri kullanım:

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

new_passwordYeni seçtiğiniz şifrenizle değiştirdiğinizden emin olun .

Not: Eğer ALTER USERkomut değil çalışır, bu daha büyük bir sorunun genellikle göstergesidir bu. Ancak, UPDATE ... SETbunun yerine kök parolayı sıfırlamayı deneyebilirsiniz .

[ÖNEMLİ] Bu benim özel sorunumu düzelten belirli bir satırdır:

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

Bundan sonra hibe tablolarını yeniden yüklemeyi unutmayın.

Her iki durumda da, komutun başarıyla yürütüldüğüne dair onay görmelisiniz.

Query OK, 0 rows affected (0.00 sec)

Parola değiştirildi, böylece artık veritabanı sunucusunun manuel örneğini durdurabilir ve eskisi gibi yeniden başlatabilirsiniz.

Adım 5: Veritabanı Sunucusunu Normal Olarak Yeniden Başlatın

Eğitici, veritabanını yeniden başlatmak için bazı diğer adımlara girer, ancak kullandığım tek parça şuydu:

MySQL için şunu kullanın: $ sudo systemctl start mysql

MariaDB için şunları kullanın:

$ sudo systemctl start mariadb

Şimdi yeni parolanın doğru şekilde uygulandığını onaylayabilirsiniz:

$ mysql -u root -p

Komut şimdi yeni atanan parolayı sormalıdır. Girin ve veritabanı istemine beklendiği gibi erişmeniz gerekir.

Sonuç

Artık MySQL veya MariaDB sunucusuna geri yüklenen yönetici erişimine sahipsiniz. Seçtiğiniz yeni kök parolanın güçlü ve güvenli olduğundan emin olun ve güvenli bir yerde saklayın.


1
ALTER USER bildirimi MariaDB 10.2.0'da tanıtıldı.
Benoit Desrosiers

2
Vaov ! bu mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';benim için hayat kurtarıcı oldu!
lucyjosef

36

Yukarıdaki cevapların hiçbiri bu soruna yardımcı olmadı, işte bulduğum çözüm .

İlgili bölüm:

MySQL 5.7 (ve sonraki sürümleri) çalıştıran Ubuntu sistemlerinde, kök MySQL kullanıcısı bir parola yerine auth_socket eklentisini kullanarak kimlik doğrulaması yapacak şekilde ayarlanmıştır. Bu, birçok durumda daha fazla güvenlik ve kullanılabilirlik sağlar, ancak harici bir programın (örn., PhpMyAdmin) kullanıcıya erişmesine izin vermeniz gerektiğinde işleri de karmaşıklaştırabilir.

MySQL'e root olarak bağlanmak için bir şifre kullanmak için, kimlik doğrulama yöntemini auth_socket'tan mysql_native_password olarak değiştirmeniz gerekir. Bunu yapmak için terminalinizden MySQL istemini açın:

sudo mysql

Ardından, her MySQL kullanıcı hesabınızın hangi kimlik doğrulama yöntemini aşağıdaki komutla kullandığını kontrol edin:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Çıktı

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Bu örnekte, root kullanıcısının aslında auth_socket eklentisini kullanarak kimlik doğrulaması yaptığını görebilirsiniz. Kök hesabını bir parolayla kimlik doğrulaması yapacak şekilde yapılandırmak için aşağıdaki ALTER USER komutunu çalıştırın. Parolayı seçtiğiniz güçlü bir parolayla değiştirdiğinizden emin olun ve bu komutun 2. Adımda belirlediğiniz kök parolayı değiştireceğini unutmayın:

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

Ardından, sunucuya hibe tablolarını yeniden yüklemesini ve yeni değişikliklerinizi yürürlüğe koymasını söyleyen FLUSH PRIVILEGES'i çalıştırın:

FLUSH PRIVILEGES;

Kökün artık auth_socket eklentisini kullanarak kimlik doğrulaması yapmadığını doğrulamak için her bir kullanıcı tarafından kullanılan kimlik doğrulama yöntemlerini tekrar kontrol edin:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Çıktı

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Bu örnek çıktıda kök MySQL kullanıcısının artık bir parola kullanarak kimlik doğrulaması yaptığını görebilirsiniz. Bunu kendi sunucunuzda onayladıktan sonra, MySQL kabuğundan çıkabilirsiniz:

exit


27

Ubuntu / Debian kullanıcıları için

( özellikle debian tabanlı olanlar gibi diğer dağıtımlar üzerinde çalışabilir)

Olarak bağlanmak için aşağıdakileri çalıştırın root(şifre olmadan)

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

--defaults-fileHer bağlanmak istediğinizde eklemek istemiyorsanız , ana dizininize rootkopyalayabilirsiniz /etc/mysql/debian.cnf:

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

ve sonra:

sudo mysql

2
Tüm gereken buydu. Görünüşe göre 'root' varsayılan olarak Ubuntu'da 'root' değildir.
Chaim Eliyah

22

Diğerlerinin cevaplarını denedikten sonra, nihayet benim için işe yaradı

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;

Cevabı bu yazıda buldum: https://medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06


2
BU PLUGIN HATTI GERÇEKTEN FAYDALI. Çok sayıda derleme denedim ama bu sadece Ver 14.14 Distrib 5.7.27, Linux için çalıştı (x86_64)
AlexNikonov

3
Bu bana mysql 5.7 de yardımcı oldu. Bu yüzden sadece mariadb için geçerli değil
podarok

Ben sadece MySQL 8 Ubuntu 20.04 üzerinde kullandım ve işe yaradı. skip-grant-table(My.conf veya mysqlkomutta) kullanan diğer yanıtlar işe yaramadı. Bir hizmet hesabı ( askubuntu.com/a/120769/169836 ) kullanarak alabilirim ama UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root';işe yaramadı. Sadece eklenti kısmını kullanırken işler işe yaradı. Teşekkürler ~
hamx0r

16

Yeni linux kullanıcıları için bu göz korkutucu bir görev olabilir. Bunu mysql 8 ile güncellememe izin verin (en son sürüm 12 Eylül 2018'de olduğu gibi 8.0.12'dir)

  1. "/Etc/mysql/mysql.conf.d/" adresinde "mysqld.cnf" yapılandırma dosyasını açın.
  2. [Mysql] metninin sonraki satırına skip-grant-tables ekleyin ve kaydedin.
  3. Mysql hizmetini "sudo service mysql restart" olarak yeniden başlatın. Artık MySQL'inizde herhangi bir kimlik doğrulaması yoktur.
  4. Mysql -u root -p olarak mysql istemcisine (mysql-shell olarak da bilinir) bağlanın . Şu anda girilecek şifre yok.
  5. sql komutunu çalıştır flush ayrıcalıklarını ;
  6. Parolayı şimdi sıfırlayın ALTER USER 'root' @ 'localhost' olarak 'MyNewPassword' KİMLİĞİ olarak sıfırlayın;
  7. Şimdi normal duruma dönelim; "skip-grant-tables" satırını "mysqld.cnf" dosyasından kaldırın ve hizmeti yeniden başlatın.

Bu kadar.


5

MySQL çalışma tezgahınızda sol kenar çubuğuna gidebilir, Yönetim altında "Kullanıcılar ve Ayrıcalıklar" ı seçebilir, Kullanıcı Hesapları altında kök'ü tıklayabilir, sağ kısımda maksimum sorguları, güncellemeleri vb. Artırmak için "Hesap Sınırları" sekmesini tıklayabilirsiniz. ardından "Yönetim Rolleri" sekmesini tıklayın ve hesaba erişim izni vermek için kutuları işaretleyin. Umarım yardımcı olur!


4

Ben kök şifremi OSx MySQL ilk kurulumunda ayarlamak için yaptım. Bir terminal açın.

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

Terminali kapatın ve yeni bir terminal açın. Ve Linux'ta kök parola ayarlamak için aşağıdaki işlemler yapılır.

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

(sudo mysqld_safe --skip-grant-tables: Bu benim için ilk kez işe yaramadı. Ancak ikinci deneme başarılı oldu.)

Ardından MySQL'e giriş yapın

mysql -u root

FLUSH PRIVILEGES;

Şimdi şifreyi değiştirin:

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

MySQL'i yeniden başlatın:

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

3

Debian 10 kapsamındaki durumumda hata

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

tarafından çözüldü (İYİ YOL)

sudo mysql -u root -p mysql

KÖTÜ YOL:

mysql -u root -p mysql

3

Ugh- benim için hiçbir şey işe yaramadı! 5.5.64 mariadb çalıştıran bir CentOS 7.4 makinem var.

Ne yapmam gerekiyordu, yum'dan mariadb kurulumundan hemen sonra;

# systemctl restart mariadb
# mysql_secure_installation

mysql_secure_installationDahil, bir dizi adım yoluyla götürecektir "Set root şifresini? [Y / n]". Sadece "y" deyin ve bir şifre verin. Diğer soruları istediğiniz gibi cevaplayın.

Daha sonra şifrenizi kullanarak

# mysql -u root -p

Hayatta kalacak

# systemctl restart mariadb

Anahtar

Sonra, /bin/mysql_secure_installationkök şifresini nasıl sihirli bir şekilde değiştirebildiğini öğrenmek için kaynak kodunu kontrol ettim ve burada diğer cevapların hiçbiri olamaz. İçe aktarma biti:

do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"

... diyor SET Password=...ve değil SET authentication_string = PASSWORD.... Yani, bu sürüm için uygun prosedür (5.5.64):

login using mysql -u root -p , using the password you already set.
Or, stop the database and start it with:
mysql_safe --skip-grant-tables --skip-networking &

Mysql> komut isteminden:

use mysql;
select host,user,password from user where user = 'root';
(observe your existing passwords for root).
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root' AND host = 'localhost';
select host,user,password from user where user = 'root';
flush privileges;
quit;

çalışan mysqld_safe öldürmek. mariadb'i yeniden başlat. Root olarak giriş: mysql -u -p. Yeni şifrenizi kullanın.

İsterseniz, tüm kök şifreleri bir kerede ayarlayabilirsiniz. Bunun akıllıca olduğunu düşünüyorum:

mysql -u root -p
(login)
use mysql;
select host,user,password from user where user = 'root';
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root';
select host,user,password from user where user = 'root';
flush privileges;
quit;

Bu, tüm kök parolalarda güncellemeler gerçekleştirir: örneğin, "localhost", "127.0.0.1" ve ":: 1" için

Gelecekte, RHEL8'e gittiğimde veya neyiniz varsa, / bin / mysql_secure_installation'ı kontrol etmeyi ve bu işletim sistemi için mariadb'yi yapılandırmış olanların nasıl yaptığını görmeyi hatırlamaya çalışacağım.


2

Eğer benim gibi olan ve her şeyden önerileri başarısız olursa, makinenizde mysql tüm sürümlerini kaldırmak için devam Bu komutu kullanarak kalan tüm MySQL dosyaları aramak sudo find / -name "mysql"ve rm -rf(eğer ilgili dosyaları atlaması gereken ona bağlı mysql adıyla her dosya veya dizin programlama dil kütüphaneleri). Şimdi yeni bir MySQL sürümü yükleyin ve keyfini çıkarın. Not: Tüm verilerinizi kaybedeceksiniz, bu yüzden önce seçeneklerinizi tartın.


1

Yeterli ayrıcalığınız yoksa olabilir. Yazın su, root şifresini girin ve tekrar deneyin.


1

Tamam, bunun eski bir iş parçacığı olduğunu biliyorum, ancak bu sayfaya Google üzerinden yaptığım gibi ulaştıysanız ve yukarıdaki çözümlerin hiçbiri işe yaramadıysa, hatanın ortaya çıkması% 100 aptallıktı. Sunucuya bağlanmadım. Bir kez bağlandığında her şey düzgün yelken oldu.

Kurulumumu bilmeme yardımcı olursa, Sequel Pro kullanıyorum ve NPM paketi mysql kullanarak Düğüm ile bağlanmaya çalışıyorum. Aslında (Sequel Pro'yu çalıştırmak dışında) bağlanmam gerektiğini düşünmedim çünkü bunu zaten uygulamamdan yapıyordum.

resim açıklamasını buraya girin


0

Çözüm: Vazgeç!

Beni dinleyin, MySQL'in boşuna çalışmasına yaklaşık iki gün geçirdim, her zaman izin hatalarıyla sıkıştım, hiçbiri bu konudaki cevaplarla düzeltilmedi. Devam edersem deli olacağımı düşündüğüm noktaya geldi.

Çalıştırmak için sabırsız, sadece 450KB kullanarak, SQLite yükleme komutunu gönderdim ve hemen kelimenin tam anlamıyla çalıştı.

Bir azizin sabrınız yoksa, SQLite ile gidin ve kendinize çok fazla zaman, çaba, acı ve depolama alanı kazandırın ..!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.