Mysqlnd cannot connect to MySQL using the old insecure authentication

Merhaba arkadaşlar,

Bu yazımızda size; mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication hatası ve çözümü hakkında bilgi vermeye çalışıcam.

mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication hatası nedir ?

Bu hatayı ilk kez görüyorsanız muhtemelen daha önce mysql bağlantı türünden, mysqlnd yani mysql native driver’a geçmemişsinizdir. Php 5.3 ve üst versiyonlarında bildiğiniz gibi mysqli her halukarda kullanabiliyorsunuz hatta bildiğiniz gibi php 5.5.0 versiyonundan itibaren mysql bağlantı türüne desteği keseceğini bildirdi. Bu ne anlama geliyor ? Mysql_connect şeklinde bağlanıp mysql_* şeklindeki sorguları artık çalıştıramayacağınız anlamına geliyor.

Bunu öğrendiniz, serverınıza mysqlnd kurma kararı aldınız ve kurdunuz sitenizi açmaya çalıştığınızda bu hatayla karşılaşma ihtimaliniz yüksek demektir.

Peki çözümü ne ?

Amacımız bu zaten, çözümden bahsetmek :)

Öncelikle server’a ssh ile oturum açıp, my.cnf dosyasını buluyoruz. locate my.cnf komutu yardımıyla my.cnf dosyasının yerini tam olarak bulabilirsiniz.

Bulamazsanız genelde etc’nin içindedir herhangi bir text editör ile açıp (ben nano’yu tercih ediyorum.) nano /etc/my.cnf şeklinde; old_passwords = 1

Satırının başına # koyarak veya satırı silerek kayıt ediyoruz. (Kayıt için sırasıyla Ctrl+x, y tuşuna basıp enterlamanız yeterli)

Ardından mysql’e bağlanıyoruz. komutumuz; mysql -h localhost -u root -pSifre

Burada dikkat etmeniz gereken kısım -pSifre kısmı -p’den sonra boşluk bırakmadan mevcut root şifresini girmeniz gerekmekte.

Bu komutu çalıştırdıktan sonra mysql komut satırına düşmüş olmalısınız.

Artık yapmanız gerekenler sırasıyla; UPDATE mysql.user SET Password = PASSWORD('Sifre') WHERE user = 'root'; Yazıp enterlıyoruz. Not: burada Sifre kısmına ’ işaretlerini silmeden, şifrenizi yazıyorsunuz eğer sunucuda root kullanıcısı dışında kullanıcı yoksa Where kısmını ve sonrasını silebilirsiniz. Son olarak da FLUSH PRIVILEGES;

komutunu çalıştırmanız yeterli. exit komutu ile mysql ekranından çıkıp, service mysqld restart diyerek de mysqlnd ile mysql serverınızı php ile birlikte sorunsuzca kullanabilirsiniz.

Sorunuz olursa, yorumlardan yardımcı olmaya çalışırım.

Kolay gelsin :)