Uzaktan Bağlantılar Mysql Ubuntu


98

Bazı nedenlerden dolayı, MySQL sunucuma uzaktan bağlanamıyorum. Her şeyi denedim ve hala hatalar alıyorum.

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)

Şimdi koşmayı denedim

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

ve hala hiçbir şey! Neyi yanlış yapıyorum?

EDIT : my.cnfbağlama ipini yorumladı.


MySQL'in hangi sürümünü kullanıyorsunuz?
Steve

Sunucu sürümü: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Cristian Eduardo Lehuede Lyon

bu komut ne döndürür? ubuntu ~ $ sudo lsof -i -P | grep: 3306
apesa

Yanıtlar:


349

MySQL'i localhost dışında herhangi bir şeye maruz bırakmak için aşağıdaki satıra sahip olmanız gerekir

Mysql 5.6 ve altı sürümler için

yorumlanmamış /etc/mysql/my.cnfve bilgisayarlarınıza atanmış IP adresi ve geri döngü değil

Mysql 5.7 ve üzeri sürümler için

yorumlanmamış /etc/mysql/mysql.conf.d/mysqld.cnfve bilgisayarlarınıza atanmış IP adresi ve geri döngü değil

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

Veya bind-address = 0.0.0.0IP'yi belirtmek istemiyorsanız bir ekleyin

Ardından, yeni my.cnf girişiyle MySQL'i durdurun ve yeniden başlatın. Çalıştırdıktan sonra terminale gidin ve aşağıdaki komutu girin.

lsof -i -P | grep :3306

Bu, xxx'lerdeki gerçek IP'nizle buna benzer bir şey geri gelmelidir

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

Yukarıdaki ifade doğru bir şekilde dönerse, uzaktaki kullanıcıları kabul edebileceksiniz. Ancak uzaktaki bir kullanıcının doğru ayrıcalıklarla bağlanması için, o kullanıcının hem localhost hem de '%' içinde olduğu gibi oluşturulmuş olması gerekir.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

sonra,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

ve sonunda,

FLUSH PRIVILEGES; 
EXIT;

Yukarıdaki ile aynı kullanıcı oluşturmadıysanız, yerel olarak oturum açtığınızda temel localhost ayrıcalıklarını devralabilir ve erişim sorunları yaşayabilirsiniz. Myuser'ın sahip olduğu erişimi kısıtlamak istiyorsanız, GRANT deyimi sözdizimini BURADAN okumalısınız. Tüm bunları aşarsanız ve hala sorun yaşıyorsanız, bazı ek hata çıktıları ve my.cnf uygun satırları gönderin.

NOT: lsof geri dönmezse veya bulunamazsa , Linux dağıtımınıza bağlı olarak BURADAN yükleyebilirsiniz . İşlerin yürümesi için lsof'a ihtiyacınız yok, ancak işler beklendiği gibi çalışmadığında son derece kullanışlıdır.


1
Teşekkürler, bu adımları ilk seferde doğru bir şekilde izlememe rağmen, siz gönderirken onları tekrar yaptım ve harika çalıştım!
Cristian Eduardo Lehuede Lyon

15
Mücadele eden herkes için lsof -i -P | grep :3306, bu işe yaramadı, ancak uzaktan bağlantı hala bu onay olmadan iyi çalışıyor, uygun çıktıyı görmüyorsanız dikkate almayın.
Mike S

@Mike Slutsky Not için teşekkürler, cevabımı düzenledim. Zaten kurulu değilse lsof'u kurabilirsiniz.
apesa

2
Birçok sistemde FWIW, (ayrıcalıksız bir kullanıcı olarak oturum açtığınızı varsayarsak) sudo lsof -i -Pçok daha yararlı olacaktır lsof -i -P.
Dan Passaro

2
lsof -i -P | grep :3306hiçbir şey döndürmez!
Green

39

Maymunların mükemmel gönderisinin üstüne birkaç nokta ekleyin:

1) mysql sunucusunun dinlediği ip adresini kontrol etmek için aşağıdaki komutu kullanabilirsiniz.

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) FLUSH PRIVILEGESHerhangi bir nedenle değişikliklerin hemen yürürlüğe girmemesi durumunda hibe tablolarının yüklenmesini zorlamak için kullanın

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

user == mysql'e bağlanmak için kullandığınız kullanıcı ex.root
passwd == mysql'e bağlanmak için kullandığınız şifre

3) sudo ufw enablemysql sunucu makinesinde netfilter güvenlik duvarı etkinse ( ), uzaktan erişim için 3306 numaralı bağlantı noktasını açmak için aşağıdakileri yapın:

sudo ufw allow 3306

ile durumu kontrol et

sudo ufw status

4) Bir uzak bağlantı kurulduktan sonra, komutlar kullanılarak istemci veya sunucu makinesinde doğrulanabilir

netstat -an | grep 3306
netstat -an | grep -i established

3
Bu bütün günümü kurtardı! İçin teşekkürler sudo ufw status!!
Riddhiman Adib

netstat -nlt | grep 3306boş dönüyor
João Pimentel Ferreira

@ João Pimentel Ferreira önce mysql'in çalıştığından emin olun, doğrulamak için "/etc/init.d/mysql status" komutunu kullanın
Jonathan L

8

MySQL yalnızca localhost'u dinler, eğer ona uzaktan erişimi etkinleştirmek istiyorsak, my.cnf dosyasında bazı değişiklikler yapmamız gerekir:

sudo nano /etc/mysql/my.cnf

Bağlantı adresi ve atlama-harici-kilitleme satırlarını yorumlamamız gerekiyor:

#bind-address = 127.0.0.1
# skip-external-locking

Bu değişiklikleri yaptıktan sonra mysql servisini yeniden başlatmamız gerekiyor:

sudo service mysql restart

1
yorum yaptığınızdan emin olunskip-external-locking
calebeaires

1
Skip-external-lock için yorum yapmadım ve hala çalışıyor.
Marcia Ong

/Etc/mysql/mysql.conf.d'de değiştirmek zorunda kaldım
Bartando

benimki bu yer:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Lester

1

Windows üzerinde test yapıyorsanız, 3306 numaralı bağlantı noktasını açmayı unutmayın.


Ah, sen bir dahisin, Linux için Windows alt sistemini kullanıyorsanız bu SÜPER önemlidir, Windows güvenlik duvarı üzerinden gelen trafik için 3306 numaralı bağlantı noktasını açmanız gerekir ve MySQL'in dinleyip dinlemediğini kontrol etmek için yukarıdakilerden hiçbiri alt sistem
Brian Leishman

1

Ubuntu 12 kullanıyorsunuz (oldukça eski olan)

Önce /etc/mysql/mysql.conf.d/mysqld.cnf dosyasını ( /etc/mysql/my.cnf Ubuntu 14.04 ve önceki sürümlerde açın.

[Mysqld] altında Satırı Bulun, bağlantı adresi = 127.0.0.1 ve bunu olarak değiştirin, bağlama adresi = 0.0.0.0 veya yorum yapın

Ardından Ubuntu MysQL Sunucusunu Yeniden Başlatın systemctl restart mysql.service

Artık Ubuntu Sunucusu, MySQL Sunucusuna uzaktan erişime izin verecektir, ancak yine de MySQL kullanıcılarını herhangi bir ana bilgisayardan erişime izin verecek şekilde yapılandırmanız gerekir.

Kullanıcı 'username'@'%'gerekli tüm izinlere sahip olmalıdır

MySQL sunucusunun tüm arayüzleri dinlediğinden emin olmak için netstat komutunu aşağıdaki gibi çalıştırın.

netstat -tulnp | grep mysql

Umarım bu işe yarar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.