Navicat ile sunucunuza bağlanamıyor musunuz? SSH üzerinden MySQL root şifresini sıfırlamanın adım adım yolu — FreeBSD ve Linux için, MySQL 5.7 ve 8.0 uyumlu komutlarla.
Navicat, MySQL ve MariaDB veritabanlarını görsel arayüzle yönetmek için en yaygın kullanılan araçlardan biridir. Ancak root şifresini unuttuğunuzda veya şifre değiştiğinde Navicat bağlantı kuramaz ve "Access denied for user 'root'" hatası alırsınız.
Bu rehberde, SSH üzerinden MySQL root şifresini sıfırlayıp Navicat'a yeniden giriş yapmanın adımlarını anlatıyoruz. İşlem hem FreeBSD hem Linux sunucularda uygulanabilir.
Başlamadan Önce: Önemli Uyarılar
Bu işlem sırasında veritabanınız korumasız kalır
Şifre sıfırlama, MySQL'i yetki kontrolü kapalı şekilde (skip-grant-tables) başlatmayı gerektirir. Bu modda şifresiz herkes veritabanına bağlanabilir. Bu yüzden:
- İşlemi mümkün olan en kısa sürede tamamlayın.
- Sunucunuzun 3306 portu dışarıya kapalı olmalıdır. Dışarı açıksa, işlem öncesi güvenlik duvarından kapatın.
- İşlem bittiğinde MySQL'i normal modda yeniden başlatmayı unutmayın.
Önce yedek alın
Veritabanı üzerinde yetki tablolarına müdahale edeceksiniz. Bir hata durumunda geri dönebilmek için işlem öncesi yedek almanız önerilir.
MySQL sürümünüzü öğrenin
Komutlar sürüme göre değişir. Sürümünüzü şu komutla öğrenebilirsiniz:
mysql --version
MySQL 5.6 ile 8.0 arasında şifre değiştirme komutu tamamen farklıdır. Yanlış komut kullanırsanız "You have an error in your SQL syntax" veya "Unknown column 'password'" hatası alırsınız.
Adım 1: MySQL Servisini Durdurun
FreeBSD sunucularda
/usr/local/etc/rc.d/mysql-server stop
Metin2 sunucuları geleneksel olarak FreeBSD üzerinde çalıştığı için, oyun sunucusu işletiyorsanız büyük ihtimalle bu komutu kullanacaksınız.
Linux sunucularda
systemctl stop mysqld
MariaDB kullanıyorsanız servis adı farklı olabilir:
systemctl stop mariadb
Servisin gerçekten durduğunu doğrulayın
ps aux | grep mysqld
Çalışan bir mysqld süreci kalmışsa sonraki adım başarısız olur.
Adım 2: MySQL'i Yetki Kontrolü Kapalı Başlatın
mysqld_safe --skip-grant-tables --skip-networking &
--skip-networking parametresi önemlidir: MySQL'i yalnızca yerel bağlantılara açar, böylece korumasız olduğu süre boyunca dışarıdan erişilemez. Orijinal komutlarda bu parametre genellikle atlanır ama güvenlik açısından eklenmesi gerekir.
Komut çalıştıktan sonra birkaç saniye bekleyin; servisin başlaması zaman alır.
Adım 3: MySQL'e Bağlanın
mysql -u root
Yetki kontrolü kapalı olduğu için şifre sorulmadan giriş yapabilirsiniz. Ardından yetki veritabanını seçin:
use mysql;
Adım 4: Şifreyi Değiştirin
Bu adım MySQL sürümünüze göre değişir. Doğru komutu kullanmak kritiktir.
MySQL 8.0 ve üzeri
Önce yetki tablolarını yeniden yükleyin, sonra şifreyi değiştirin:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YeniSifreniz';
MySQL 8.0'da PASSWORD() fonksiyonu tamamen kaldırılmıştır. Eski rehberlerdeki SET PASSWORD = PASSWORD("...") komutu bu sürümde çalışmaz.
MySQL 5.7
UPDATE user SET authentication_string = PASSWORD('YeniSifreniz') WHERE User = 'root';
5.7 sürümünde password kolonu authentication_string olarak yeniden adlandırılmıştır.
MySQL 5.6 ve öncesi
UPDATE user SET password = PASSWORD('YeniSifreniz') WHERE User = 'root';
Eski sürümlerde klasik password kolonu kullanılır. Çoğu internet rehberi bu komutu verir; sunucunuz yeni sürüm kullanıyorsa hata alırsınız.
MariaDB
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YeniSifreniz';
Adım 5: Değişikliği Uygulayın ve Çıkın
FLUSH PRIVILEGES;
quit
FLUSH PRIVILEGES komutu, yaptığınız değişikliğin bellekteki yetki tablosuna işlenmesini sağlar. Bu adımı atlarsanız şifre değişikliği etkili olmaz.
Adım 6: MySQL'i Normal Modda Yeniden Başlatın
Önce yetki kontrolü kapalı çalışan süreci sonlandırın:
killall mysqld
Ardından servisi normal şekilde başlatın.
FreeBSD
/usr/local/etc/rc.d/mysql-server restart
Linux
systemctl start mysqld
Doğrulama
Yeni şifrenizle bağlanmayı deneyin:
mysql -u root -p
Şifre sorulmalı ve giriş başarılı olmalıdır. Bu aşamada güvenlik duvarında kapattığınız portları eski haline getirmeyi unutmayın.
Navicat'ta Bağlantıyı Güncelleyin
Şifre değiştikten sonra Navicat'taki kayıtlı bağlantınız hâlâ eski şifreyi kullanır. Güncellemek için:
- Navicat'ı açın ve ilgili bağlantıya sağ tıklayıp Edit Connection seçin.
- Password alanına yeni şifrenizi girin.
- Test Connection ile bağlantıyı doğrulayın.
- Başarılıysa kaydedin.
Sık Karşılaşılan Hatalar
"Unknown column 'password' in 'field list'"
MySQL 5.7 veya 8.0 kullanıyorsunuz ama eski komutu çalıştırdınız. Yukarıdaki sürüme uygun komutu kullanın.
"ALTER USER failed" veya "You are using safe update mode"
MySQL 8.0'da skip-grant-tables modunda ALTER USER çalıştırmadan önce FLUSH PRIVILEGES; komutunu vermeniz gerekir. Bu adımı atlamayın.
Servis yeniden başlamıyor
Yetki kontrolü kapalı çalışan eski süreç hâlâ ayakta olabilir. ps aux | grep mysqld ile kontrol edip kalan süreçleri sonlandırın.
Navicat hâlâ bağlanamıyor
Şifre doğruysa sorun ağ tarafında olabilir. Sunucunuzun 3306 portunun Navicat'ın bağlandığı IP adresine açık olduğundan emin olun. Uzaktan bağlantı için root kullanıcısının 'root'@'%' yetkisi de gerekebilir.
Güvenlik Tavsiyesi: Root ile Uzaktan Bağlanmayın
Navicat ile veritabanına bağlanırken root kullanıcısını kullanmak yaygın ama riskli bir alışkanlıktır. Daha güvenli yaklaşım:
- Yalnızca ihtiyaç duyduğunuz veritabanına yetkili ayrı bir kullanıcı oluşturun.
- Uzaktan bağlantıyı yalnızca kendi IP adresinize açın.
- Mümkünse Navicat'ın SSH Tunnel özelliğini kullanın; böylece 3306 portunu dışarıya hiç açmanız gerekmez.
- Root kullanıcısının uzaktan erişimini tamamen kapatın.
SSH tüneli yöntemi, veritabanı portunu internete açmadan Navicat kullanmanızı sağlar ve en güvenli seçenektir.
Metin2 Sunucularında Özel Durum
Metin2 sunucusu işletiyorsanız veritabanı yalnızca bir yönetim aracı değil, oyununuzun kalbidir. Karakterler, envanterler, loncalar ve hesaplar burada tutulur.
Bu nedenle veritabanına müdahale ederken iki noktaya dikkat edin:
- Oyun sunucusunu da durdurun. MySQL kapalıyken çalışan oyun sunucusu hata verir ve veri tutarsızlığı oluşabilir.
- Yoğun olmayan saatte yapın. Oyuncular çevrimiçiyken veritabanını durdurmak veri kaybına yol açabilir.
Metin2 sunucu mimarisi ve veritabanının nasıl çalıştığı hakkında daha fazla bilgi için kanal yapısı ve auth sunucusu yazımıza göz atabilirsiniz. Sunucu ihtiyacınız varsa Metin2 sunucu paketlerimizi inceleyebilirsiniz; MySQL veya MariaDB kurulu olarak teslim ediyoruz.
Özet
MySQL root şifresi sıfırlama işlemi altı adımdan oluşur: servisi durdurmak, yetki kontrolü kapalı başlatmak, bağlanmak, sürüme uygun komutla şifreyi değiştirmek, yetkileri yenilemek ve servisi normal modda yeniden başlatmak.
En kritik nokta MySQL sürümünüze uygun komutu kullanmaktır; internetteki çoğu rehber eski sürüme göre yazılmıştır ve MySQL 8.0'da çalışmaz.
İşlem sırasında takılırsanız veya sunucunuza erişemez hâle gelirseniz, teknik destek ekibimize yazabilirsiniz. Mezuhost müşterisiyseniz bu işlemi sizin adınıza yapabiliriz.
