Yeni bir sunucu kuruyorum ve bu sorunla karşılaşmaya devam ediyorum.
MySQL veritabanına root kullanıcısı ile giriş yapmaya çalıştığımda hata alıyorum:
ERROR 1698 (28000): Kullanıcı 'root'@'localhost' için erişim reddedildi;
Terminal (SSH), PHPMyAdmin veya Navicat gibi bir MySQL İstemcisi aracılığıyla bağlanmam fark etmiyor. Hepsi başarısız oluyor.
mysql.user tablosuna baktım ve aşağıdakileri elde ettim:
+------------------+-------------------+
| user | host |
+------------------+-------------------+
| root | % |
| root | 127.0.0.1 |
| amavisd | localhost |
| debian-sys-maint | localhost |
| iredadmin | localhost |
| iredapd | localhost |
| mysql.sys | localhost |
| phpmyadmin | localhost |
| root | localhost |
| roundcube | localhost |
| vmail | localhost |
| vmailadmin | localhost |
| amavisd | test4.folkmann.it |
| iredadmin | test4.folkmann.it |
| iredapd | test4.folkmann.it |
| roundcube | test4.folkmann.it |
| vmail | test4.folkmann.it |
| vmailadmin | test4.folkmann.it |
+------------------+-------------------+
Gördüğünüz gibi, root erişimine sahip olmalıdır.
Bir süredir bu sorunu gidermeye çalıştığım için Sunucu oldukça basit...
Apache, MySQL ve PHP ile Ubuntu 16.04.1 LTS çalıştırıyor, böylece web sitelerini barındırabilir ve iRedMail 0.9.5-1, böylece posta barındırabilir.
iRedMail'i yüklemeden önce MySQL veritabanına giriş yapmak sorunsuz çalışıyor. Ayrıca, sadece iRedMail'i yüklemeyi denedim, ancak daha sonra root da çalışmıyor ...
Birisi bana MySQL giriş sorunumu nasıl çözeceğimi veya mevcut bir MySQL kurulumunun üzerine iRedMail'i nasıl kuracağımı söyleyebilirse. Ve evet Kurulum İpuçları'i denedim ve yapılandırma dosyalarında bu değişkenleri bulamıyorum.
Ubuntu gibi bazı sistemlerde mysql varsayılan olarak UNIX auth_socket plugin kullanmaktadır.
Temel olarak şu anlama gelir: Bunu kullanan db_kullanıcıları, sistem kullanıcısı credentias tarafından "auth" olacaktır. `root' kullanıcınızın bu şekilde ayarlanıp ayarlanmadığını aşağıdakileri yaparak görebilirsiniz:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
Sorguda görebileceğiniz gibi, root
kullanıcısı auth_socket
eklentisini kullanıyor
Bunu çözmenin iki yolu vardır:
mysql_native_password
eklentisini kullanacak şekilde ayarlayabilirsinizile yeni bir
db_kullanıcısı` oluşturabilirsiniz (önerilir)Seçenek 1: __
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
Seçenek 2:__ (YOUR_SYSTEM_USER yerine sahip olduğunuz kullanıcı adını yazın)
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
Eğer 2. seçeneği kullanırsanız mysql'e sistem kullanıcı adınızla bağlanmanız gerekeceğini unutmayın (mysql -u YOUR_SYSTEM_USER
)
Not: Bazı sistemlerde (örneğin Debian stretch) 'auth_socket' eklentisi 'unix_socket' olarak adlandırılır, bu nedenle ilgili SQL komutu şöyle olmalıdır: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
Güncelleme:
andy'nin yorumuna göre mysql 8.x.x, caching_sha2_password
için auth_socket
i güncelledi/değiştirdi Bunu test etmek için mysql 8.x.x ile kurulmuş bir sistemim yok, ancak yukarıdaki adımlar sorunu anlamanıza yardımcı olacaktır. İşte cevap:
MySQL 8.0.4'ten itibaren yapılan bir değişiklik, yeni varsayılan kimlik doğrulama eklentisinin 'caching_sha2_password' olmasıdır. Yeni 'YOUR_SYSTEM_USER' bu auth eklentisine sahip olacaktır ve artık bash kabuğundan "mysql -u YOUR_SYSTEM_USER -p" ile giriş yapabilir ve istemde bu kullanıcı için parola girebilirsiniz. UPDATE user SET plugin" adımına gerek yoktur. 8.0.4 varsayılan auth eklentisi güncellemesi için bkz. https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/
Mysql bağlantısını kaldırmanızı öneririm -
UPDATE-Bu Mysql 5.5 sürümü içindir, sürümünüz farklıysa, lütfen ilk satırı buna göre değiştirin
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
Ve Tekrar Yükleyin Ancak bu sefer kendiniz bir root şifresi belirleyin. Bu çok fazla çaba harcamanızı önleyecektir.
sudo apt-get update
sudo apt-get install mysql-server
MySQL'e root kullanıcısı ile erişmek istiyorsunuz ancak root'a doğru şifreyi vermiyorsunuz.
root** için yeni bir parola belirlemeniz gerekiyorsa, MySQL'in sitesinde bunun nasıl yapılacağına dair harika belgeler bulunmaktadır: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
İşlemi burada göstermeyeceğim çünkü MySql belgeleri yukarıdaki bağlantıda açık ve nettir.