MySQL sunucusu root şifresinin sıfırlanması

Ubuntu Türkiye Wiki sitesinden
Gezinti kısmına atla Arama kısmına atla

MySQL root sunucusu şifresi hatalı girildiğinde ilgili uçbirim genel olarak şu hatalardan birini vermektedir.

ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

ya da

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

Eğer şifre unutulmuşsa yada bu mesajlar herhangi bir nedenle alınıyorsa şifre sıfırlanmalıdır.

Şifre sıfırlama işlemi

Şifre sıfırlama işlemi sırasında sunucu üzerindeki kontrolünüz kaybolacaktır. Bütün bağlantılar root yetkisi ile gerçekleşecektir. Bu yüzden bu işlemlerin yapıldığı süre içerisinde sunucuya ulaşım yollarının kapatılması iyi bir fikir olacaktır.

Şifre sıfırlamak için şu işlemler gerçekleştirilmelidir.

Mysql sunucusu durdurulmalıdır.

sudo /etc/init.d/mysql stop

Mysql sunucusunun alt işlevleri tekrar çalıştırılmalıdır. Bu çalıştırma işleminde --skip-grant-tables option ve --skip-networking & parametreleri kullanılmalıdır. --skip-networking & parametresi ağ desteği olmadan başlamasını sağlayacaktır. Kullanıcı hakları değiştirileceği için bu yöntem güvenlik açısından önemlidir. Bu işlemler için şu komut kullanılmalıdır.

sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

Mysql sunucusunun alt süreçleri çalıştırıldıktan sonra işlemleri yapmak için mysql uçbirimine düşmek gerekir. Bu uçbirime ulaşmak için şu komut kullanılır.

mysql -u root

Root şifresini değiştirmek yada yenilemek için ise şu kod kullanılmalıdır. Şifreniz yazan kısım sizin kendi kullanmak istediğiniz şifre ile değiştirilmelidir.

SET PASSWORD FOR root@'localhost' = PASSWORD('şifreniz');

Eğer herhangi bir bağlantı ile kullanılabilen bir root hesabı varsa ayrıca şu kodda uygulanmalıdır. Şifreniz kısmı yine sizin istediğiniz şifre olarak değiştirilmelidir.

UPDATE mysql.user SET Password=PASSWORD('şifreniz') WHERE User='root';

Alternatif yol

Bir diğer alternatif metot ise şu şekildedir. Yine mysql uçbiriminde şu komutlar verilmelidir. Şifreniz kısmı istediğiniz şifre ile değiştirilmelidir.

USE mysql
UPDATE user SET Password = PASSWORD('şifreniz')
WHERE Host = 'localhost' AND User = 'root';

Eğer herhangi bir bağlantı ile kullanılabilen bir root hesabı varsa ayrıca şu kodda uygulanmalıdır. Şifreniz kısmı yine sizin istediğiniz şifre olarak değiştirilmelidir.

USE mysql
UPDATE user SET Password = PASSWORD('şifreniz')
WHERE Host = '%' AND User = 'root';

Bu iki komutta başarılı olmaları durumunda bir yada iki satır değişiklikle şu çıktıyı döndürecektir.

FLUSH PRIVILEGES;

İşlemin tamamlanması

Bütn bu işlemleri yaptıktan sonra mysql sunucusunun durdurulup tekrar başlatılması gereklidir. Bu işlemi şu iki kod ile gerçekleştirmek mümkündür.

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

Diğer yöntem

Bir diğer metot ise MySQL sunucusunun tekrar kurulmasıdır. Bunun için paketler purge seçeneği ile kaldırılmalıdır. Bu kaldırıp tekrar kurma işlemi şu iki kod ile gerçekleştirilebilir.

sudo apt-get --purge remove mysql-server mysql-common mysql-client
sudo apt-get install mysql-server mysql-common mysql-client

Kurulum sırasında yapılandırılırken yeni şifre bilgisi sorulacaktır. Sorulmazsa şu komutlarla yeni şifre atanabilir. Şifreniz kısmı seçeceğiniz şifre ile değiştirilmelidir.

mysqladmin -u root password şifreniz</nowiki>
sudo /etc/init.d/mysql restart

Kaynakça