giriiş
Birçok web sitesi ve uygulama, web sunucusu ve destekleyici veritabanının tek bir makinede barındırılmasıyla başlar. Ancak zamanla, böyle bir kurulum zahmetli ve ölçeklenmesi zor hale gelebilir. Yaygın bir çözüm, uzak bir veritabanı çalıştırarak ve sunucu ile veritabanının kendi makinelerinde kendi hızlarında büyümesine izin vererek bu işlevleri ayırmaktır.
Kullanıcıların uzaktan MySQL veritabanı kurmaya çalışırken karşılaştıkları en yaygın sorunlardan biri, MySQL örneklerinin yalnızca yerel bağlantıları dinleyecek şekilde yapılandırılmış olmasıdır. Bu, varsayılan MySQL ayarıdır, ancak MySQL'in sunucuya erişilebilen harici bir IP adresini dinleyebilmesi gerektiğinden, uzak bir veritabanı kurmak için işe yaramaz. Bunu etkinleştirmek için mysqld.cnf dosyanızı açın:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfbind-address komutuyla başlayan satıra gidin. Şöyle görünecektir:
. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
. . .Varsayılan olarak bu değer 127.0.0.1 olarak ayarlanmıştır; bu, sunucunun yalnızca yerel bağlantıları dinleyeceği anlamına gelir. Harici bir IP adresine başvurmak için bu yönergeyi değiştirmeniz gerekir. Sorun giderme amacıyla, bu yönergeyi *, :: veya 0.0.0.0 gibi bir joker karakterli IP adresine ayarlayabilirsiniz:
. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
. . .Bu satırı değiştirdikten sonra dosyayı kaydedip kapatın (CTRL + X, Y, nano ile düzenlediyseniz ENTER).
Daha sonra mysqld.cnf dosyasında yaptığınız değişiklikleri uygulamak için MySQL servisini yeniden başlatın:
sudo systemctl restart mysqlUzak ana bilgisayarınızdan veritabanına bağlanmayı planladığınız bir MySQL kullanıcı hesabınız varsa, bu hesabı yerel ana bilgisayar yerine uzak sunucudan bağlanacak şekilde yeniden yapılandırmanız gerekir. Bunu yapmak için MySQL istemcisini MySQL kök kullanıcısı olarak veya başka bir ayrıcalıklı hesapla açın:
sudo mysqlEğer root için parola doğrulaması etkinleştirilmişse, MySQL kabuğuna erişmek için aşağıdaki komutu kullanmalısınız:
mysql -u root -pKullanıcı ana bilgisayarını değiştirmek için RENAME USER MySQL komutunu kullanabilirsiniz. Aşağıdaki komutu çalıştırın ve sammy yerine MySQL kullanıcı hesap adınızı ve remote_server_ip yerine uzak sunucunuzun IP adresini yazdığınızdan emin olun:
RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';Alternatif olarak, aşağıdaki komutla yalnızca uzak ana bilgisayardan bağlanacak yeni bir kullanıcı hesabı oluşturabilirsiniz:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';Ardından, yeni kullanıcıya özel ihtiyaçlarınıza uygun ayrıcalıkları verin. Aşağıdaki örnek, kullanıcıya veritabanları, tablolar ve kullanıcılar oluşturma, değiştirme ve silme konusunda genel ayrıcalıkların yanı sıra sunucudaki herhangi bir tabloya veri ekleme, güncelleme ve silme yetkisi verir. Ayrıca, kullanıcının SELECT ile veri sorgulamasına, REFERENCES anahtar sözcüğüyle yabancı anahtarlar oluşturmasına ve RELOAD ayrıcalığıyla FLUSH işlemleri gerçekleştirmesine olanak tanır. Ancak, kullanıcılara yalnızca ihtiyaç duydukları izinleri vermelisiniz, böylece kullanıcı ayrıcalıklarınızı gerektiği gibi ayarlayabilirsiniz.
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'remote_server_ip' WITH GRANT OPTION;Bundan sonra, FLUSH PRIVILEGES komutunu çalıştırmak iyi bir uygulamadır. Bu, sunucunun önceki CREATE USER ve GRANT komutları sonucunda ayırdığı belleği serbest bırakacaktır:
FLUSH PRIVILEGES;Daha sonra MySQL istemcisinden çıkabilirsiniz:
exitSon olarak, veritabanı sunucunuzda bir güvenlik duvarı yapılandırdığınızı varsayarsak, MySQL trafiğine izin vermek için varsayılan MySQL portu olan 3306 portunu da açmanız gerekecektir.
Veritabanı sunucusuna yalnızca belirli bir makineden erişmek istiyorsanız, aşağıdaki komutla söz konusu makineye uzak veritabanına bağlanmak için özel izin verebilirsiniz. remote_IP_address ifadesini, bağlanmak istediğiniz makinenin gerçek IP adresiyle değiştirdiğinizden emin olun:
sudo ufw allow from remote_IP_address to any port 3306Gelecekte veritabanına başka bilgisayarlardan erişmeniz gerekirse, bu komutu kullanarak geçici olarak erişim izni verebilirsiniz. Sadece ilgili IP adresinizi eklemeyi unutmayın.
Alternatif olarak, aşağıdaki komutla MySQL veritabanınıza herhangi bir IP adresinden bağlantılara izin verebilirsiniz:
sudo ufw allow 3306Bunun ardından veritabanınıza başka bir cihazdan uzaktan erişmeyi deneyin:
mysql -u user -h database_server_ip -pVeritabanınıza erişebiliyorsanız, sorunun yapılandırma dosyanızdaki bind-address yönergesinden kaynaklandığı doğrulanır. Lütfen bind-address yönergesini 0.0.0.0 olarak ayarlamanın güvenli olmadığını unutmayın; çünkü bu, sunucunuza herhangi bir IP adresinden bağlantı kurulmasına izin verir. Öte yandan, veritabanına uzaktan hala erişemiyorsanız, soruna neden olan başka bir sorun olabilir.









