MySQL uzaktan bağlantıya nasıl izin verilir


364

Yerel makineme MySQL Community Edition 5.5'i yükledim ve harici kaynaktan bağlanabilmem için uzaktan bağlantılara izin vermek istiyorum.

Bunu nasıl yapabilirim?



1
DigitalOcean kullanıyorsanız, kullanmaya çalışabilirsiniz sudo mysql_secure_installation. Bilginize.
Alan Dong

Kod olmayan metinler için kod biçimlendirmesi kullanmayın. Konu dışı.
Lorne Marquis

@EJP neden? meraktan dürüst soru
René Roth

Yanıtlar:


778

MySQL'de varsayılan olarak buna izin verilir.

Varsayılan olarak devre dışı bırakılan şey uzaktan rooterişimdir. Bunu etkinleştirmek istiyorsanız, bu SQL komutunu yerel olarak çalıştırın:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

Ve sonra aşağıdaki satırı bulun ve genellikle Unix / OSX sistemlerinde yaşayan dosyanızda yorum yapın . Bazı durumlarda dosyanın konumu /etc/mysql/mysql.conf.d/mysqld.cnf) olabilir.my.cnf/etc/mysql/my.cnf

Bir Windows sistemiyse, MySQL kurulum dizininde bulabilirsiniz, genellikle böyle bir şey C:\Program Files\MySQL\MySQL Server 5.5\ ve dosya adı olacaktır my.ini.

Hattı değiştir

 bind-address = 127.0.0.1

için

 #bind-address = 127.0.0.1

Değişikliklerin etkili olması için MySQL sunucusunu ( Unix / OSX ve Windows ) yeniden başlatın .


4
Tamam, dosyanın sonuna binnd-address = 127.0.0.1'i ekledim ve harici ana bilgisayardan navicat kullanarak bağlanmaya çalıştım ve 10060 hatası alıyorum
Leo

7
Hmm, eklemenize gerek yok. Cevabımın dediği gibi, yorum yapmalısın, eklemelisin. Orada varsayılan olarak bir tane var, bu yüzden bunu bulmanız ve # ile ön ek yaparak yorum yapmanız gerekir
mjuarez

7
Hmm, \ MYsql Server 5.5 \ dosyasında my-default.ini adında yalnızca 1 ini dosyası var ve # olmayan tek satır şudur: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo

2
bu cevap mükemmel çalışıyor. thnx @mjuarez - TÜM AYRICALIKLARI ONAYLA . HİBE SEÇENEĞİ İLE 'şifre' İLE TANIMLANAN 'kök' @ '%';
yadavr

66
Dosyayı arayan my.cnfve bind-addressiçinde bir yönerge bulamayanlara , benim durumumda (Ubuntu 16.04.2'de MySQL sürüm 14.14) dosyanın konumunun/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon

49

Yukarıdakilerin hepsini yaptıktan sonra hala rootuzaktan giriş yapamadım , ancak bağlantı noktasına Telnetting bağlantıların kabul 3306edildiğini doğruladı MySQL.

MySQL'deki kullanıcılara bakmaya başladım ve farklı şifreleri olan birden fazla root kullanıcısı olduğunu fark ettim .

select user, host, password from mysql.user;

Yani içinde MySQLben root için tüm şifreleri set tekrar ve nihayet uzaktan olarak giriş olabilir root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;

4
Doğru. Diğer yanıtlardaki adımları uygularken boş parolaya sahip kullanıcı hesapları oluşturulmuş gibi görünüyor. Bu yüzden onlar için şifre eklemeniz gerekir.
chhantyal

1
Kabul edilen cevabı bununla birleştirmem gerekiyordu ve sonra her şey düzgün çalıştı.
James

8
5.7 ve üstü için SQLupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft

Kabul edilen cevap şifreyi belirler ve benim için çalıştı.
MikeKulls

1
Teşekkür ederim, @James gibi, bunu düzeltmek için kabul edilen cevapla birleştirmek zorunda kaldım.
Ben Everard

39

Deneyimlerimden sadece bir not, yapılandırma dosyasını bu yolun altında bulabilirsiniz /etc/mysql/mysql.conf.d/mysqld.cnf.

(Bir süre bu yolu bulmak için mücadele ettim)


1
Bu, hangi dağıtımı kullandığınıza bağlıdır. En iyi yol sadece onu sudo find /etc -iname 'mysql*.cnf'
aramaktır

'Bul' komutunu takdir ediyorum. Komut satırında yeniyim, bu yüzden çok faydalı. Teşekkürler!
Heres2u

Bu unswer bulana kadar /etc/mysq/conf.d/mysql.cnf dosyasını düzenlemek için saatlerce uğraştım.
Gayan Kavirathne

26

Benim durumumda cent OS'de uzak bir mysql sunucusuna bağlanmaya çalışıyordum. Birçok çözümden geçtikten sonra (tüm ayrıcalıkları vermek, ip bağlantılarını kaldırmak, ağ oluşturmayı sağlamak) sorun hala çözülmüyordu.

Anlaşıldığı gibi, çeşitli çözümlere bakarken, iptables ile karşılaştım, bu da mysql portunun 3306 bağlantılarını kabul etmediğini fark etmemi sağladı.

İşte bu sorunu nasıl kontrol ettiğim ve çözdüğüm hakkında küçük bir not.

  • Bağlantı noktasının bağlantıları kabul edip etmediğini kontrol etme:
telnet (mysql sunucusu ip) [portNo]
  • Bağlantı noktasında bağlantılara izin vermek için ip tablo kuralı ekleniyor:
iptables -A GİRİŞ -i eth0 -p tcp -m tcp --port 3306 -j KABUL
  • Üretim ortamı için bunu tavsiye etmem, ancak iptables'larınız düzgün yapılandırılmamışsa, kuralların eklenmesi sorunu çözmeyebilir. Bu durumda aşağıdakiler yapılmalıdır:
hizmet iptables dur

Bu yardımcı olur umarım.


17

MySQL Kullanıcısı için joker uzaktan erişimi ayarlamak üzere lütfen aşağıdaki adımları izleyin.

(1) cmd'yi açın.

(2) C: \ Program Files \ MySQL \ MySQL Server 5.X \ bin yoluna gidin ve bu komutu çalıştırın.

mysql -u kök -p

(3) Kök parolasını girin.

(4) İzin vermek için aşağıdaki komutu yürütün.

'ŞİFRE' İLE TANIMLANMIŞ 'KULLANICI ADI' @ 'IP' ÜZERİNE TÜM AYRINTILARI VERİN;

KULLANICI ADI: MySQL sunucusuna bağlanmak istediğiniz kullanıcı adı.

IP: MySQL sunucusuna erişime izin vermek istediğiniz genel IP adresi.

ŞİFRE: Kullanılan kullanıcı adının şifresi.

Kullanıcının herhangi bir IP adresinden bağlanmasına izin vermek için IP% ile değiştirilebilir.

(5) Komutu ve çıkışı izleyerek önbellekleri yıkayın.

SIVA AYRICALIKLARI;

çıkış; veya \ q

resim açıklamasını buraya girin


3
Bunu yaptıktan sonra, köküm hala erişimini reddetti. Neyi kaçırdım?
teapeng

4. adımda% yerine yerel sistem IP Adresinizi deneyebilirsiniz. İşe yaramalı. % herhangi bir IP Adresi anlamına gelir.
Hiren Parghi

6

MySQL sunucu işleminiz yalnızca 127.0.0.1 veya :: 1'de dinliyorsa, uzaktan bağlanamazsınız. İçinde bir bind-addressayarınız varsa/etc/my.cnf sorunun kaynağı olabilir.

Ayrıca localhostkullanıcı olmayanlar için de ayrıcalıklar eklemeniz gerekir .


Garip, sunucunuz başka bir IP üzerinden nasıl "dinliyor" 127.0.0.1 ?
Pacerier

2
@Pacerier 127.0.0.1 yalnızca geri döngü arayüzüne bağlıdır. Harici bağlantılar çalışmaz. Bir sistemde genellikle her biri özel olarak bağlanması gereken birden çok ağ arabirimi olur veya bind-all 0.0.0.0 adresini kullanabilirsiniz.
tadman

6

MySQL'i yüklediyseniz brew, varsayılan olarak yalnızca yerel arayüzü dinler. Düzenlemeye gerektiğini düzeltmek için /usr/local/etc/my.cnfve değiştirmek bind-addressgelen 127.0.0.1etmek *.

Sonra koş brew services restart mysql.


1
Ubuntu 16.04.4 sunucum için, bağlantı adresi ayarı /etc/mysql/mysql.conf.d/mysqld.cnf konumunda
Frank

Bu sadece demlemek değil, herhangi bir MySQL yalnızca yerel bağlantılara izin vermek için bu varsayılan ayara sahip olacaktır.
nivs1978

6

Uzaktan oturum açma işlemi. Uzaktan giriş varsayılan olarak kapalıdır.Tüm iplere erişim vermek için tüm ip için manuel olarak açmanız gerekir.

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

Spesifik Ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

sonra

flush privileges;

Kullanıcı Ana Makinenizi ve Parolanızı kontrol edebilirsiniz

SELECT host,user,authentication_string FROM mysql.user;

Şimdi göreviniz bunu değiştirmek

bind-address = 127.0.0.1

Bunu şurada bulabilirsiniz:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Eğer orada bulamazsanız, o zaman deneyin

sudo nano /etc/mysql/my.cnf

buna yorum yap

#bind-address = 127.0.0.1

Ardından Mysql'yi yeniden başlatın

sudo service mysql restart

Şimdi uzaktan girişin tadını çıkarın


3

Sadece FYI Ben saatlerce bu sorunla saçımı çıkardı .. sonunda barındırma sağlayıcımı arıyorum ve benim durumumda bir bulut sunucusu kullanarak 1and1 için kontrol panelinde onlar klonlamak ve bağlantı noktası eklemek zorunda ikincil bir güvenlik duvarı var bulundu 3306. Bir kez eklediğimde doğrudan içeri girdim ..


Durumunuza çok özel geliyor. Ağ oluşturma konusunda sonsuz bir bilgi kaynağı değilim, ancak bu çözümün bu sorun için iyi bir şekilde uygulandığından emin misiniz?
Sandy Gifford

2
Ben de bu sorunu yaşadım. Bulutta barındırılan sunucularla ortak,
Matthew Lock

2

Kime ihtiyaç duyduğunda, güvenlik duvarı hizmetiniz çalışıyorsa, güvenlik duvarı bağlantı noktası 3306'nın da açık olup olmadığını kontrol edin.



1

Ve OS X kullanıcıları için, bind-address parametresinin my.ini dosyasında değil, genellikle launchd plist içinde ayarlandığını unutmayın. Yani benim durumumda, ben kaldırıldı <string>--bind-address=127.0.0.1</string>dan /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.


~/Library/LaunchAgents
Plist

1

Geri döngü / yerel adrese (örneğin ) mysqldbir bağlanma adresi ayarlanmışsa 127.0.0.1, uzak ana bilgisayarlardan sunucuya erişilemez, çünkü geri döngü arayüzüne herhangi bir uzak ana bilgisayardan erişilemez.

Herhangi bir ana bilgisayardan bağlantı kabul etmek için bu seçeneği 0.0.0.0( ::IPv4 + 6 için) olarak veya yalnızca bir arabirimde bağlantılara izin vermek istiyorsanız harici olarak erişilebilir başka bir adrese ayarlayın.

Kaynak


1

Uzaktan kök erişimini etkinleştirmek tehlikeli olabilir. Daha kısıtlayıcı izinlere sahip kullanıcı hesapları oluştursaydınız tercih edilirdi. Aşağıdaki üç adım bunu yapmalıdır.

  1. İle başlayan satırın bind-address ...en azından my.ini veya my.cnf dosyanızda yorumlandığından emin olun . Eğer yoksa, devam et. Bu dosyayı C:\ProgramData\MySQL\MySQL Server 8.0Windows'ta bulabilirsiniz .

  2. Daha sonra, bağlantı kurduğunuz kullanıcı hesabının localhostAna Bilgisayar Eşleştirmeleriyle Sınırla alanında olmadığından emin olun. Tavsiye edilmese de, %test alanına bu alanı koyabilirsiniz . Bunu, MySQL Workbench ile sunucuya yerel bir bağlantı açıp menü çubuğundan Sunucu> Kullanıcılar ve Ayrıcalıklar'a gidip bağlanmak istediğiniz kullanıcı hesabını bularak yapabilirsiniz.

"Eşleşen Ana Bilgisayarlarla Sınırla" alanı, yerel olarak bağlanmanıza izin vermeyen bir alandır. Yani kabul edilen bağlantıları bir IP adresi modeliyle sınırlar. İdeal olarak, MySQL sunucusuna statik bir IP adresinden veya alt ağdan erişmeniz gerekir, böylece olabildiğince kısıtlayıcı olabilirsiniz.

  1. Güvenlik duvarınızın MySQL Server uygulamasının istediğiniz bağlantı noktası üzerinden iletişim kurmasına izin vermesi gerektiği açıktır. Sunucunuzla aranızdaki fiziksel ağ ekipmanı, bağlanmak istediğiniz bağlantı noktasında iletişime izin vermelidir. (port 3306 tipik olarak)

1
port (3306) yönlendiriciye yönlendirme size teşekkür etmeme yardımcı oldu.
Kurdish Programmer

Bazen gerçekten basit şeyler: ^) Yardımcı olabileceğim için mutluyum.
Nikola Petrovic

0

bazı zamanlarda pencerelerde pc adını kullanmanız gerekir

ilk adım) mysql yapılandırma dosyasına koy:

mysqld.cnf SET bağlama adresi = 0.0.0.0

(tcp / ip üzerinden bağlantıların yeniden oluşturulmasını sağlamak için)

ikinci adım) mysql, tablo kullanıcıları, windows propierties pc adı ile, kullanıcı ip yapmak

resim açıklamasını buraya girin

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.