Puncte:0

Ce trebuie să fac pentru a permite accesul de la distanță la MySQL pe serverul Unbuntu 20.04?

drapel es

Am un mic script Python pentru a colecta temele elevilor și scorurile online ale cursurilor din tabelul allstudentsAnswers20BE.

Acest lucru funcționează excelent pe vechea mea pagină web de găzduire web partajată.

Pe noul server cloud Ubuntu 20.04, mi se refuză conexiunea. Nu am experiență în rularea unui server cloud.

Am permis porturile 33060 și 3306 în UFW

IP-ul meu este acasă nu este fix.

Când rulez scriptul meu Python, primesc această eroare când încerc să mă conectez la serverul cloud

pymysql.err.OperationalError: (1130, „183.206.16.30” nu este permis să conectați-vă la acest server MySQL")

netstat spune că mysqld ascultă pe 33060 și 3306, așa că le-am permis pe ambele în firewall-ul ufw

Conectându-mă la serverul cloud prin ssh, am rulat:

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

Am schimbat adresa de legătură a liniei la 0.0.0.0 (am încercat și *)

Am repornit mysql: sudo systemctl restart mysql

Trebuie să mai existe ceva care trebuie setat, partea serverului.

Orice sfaturi despre ce ar putea fi, vă rog, chiar am nevoie de asta pentru a funcționa.

Am primit și aceste informații (presupunem că ip-ul meu cloud este 123.456.789.123):

pedro@ebs-105422:~$ nc -v -w 2 123.456.789.123 3306
Conexiunea la portul 123.456.789.123 3306 [tcp/mysql] a reușit! pedro@ebs-105422:~$

Asta înseamnă că mysqld ascultă pe 3530? Sau acesta este PID-ul mysqld??

pedro@ebs-105422:~$ sudo netstat -tap | grep mysql tcp 0 0 0.0.0.0:mysql 0.0.0.0:* ASCULTĂ 3530/mysqld
tcp6 0 0 [::]:33060 [::]:* ASCULTĂ 3530/mysqld
pedro@ebs-105422:~$

Mai jos este de la mysql pe server, confirmând portul 3306

mysql> arată variabilele unde variabile_name în ('hostname','port');
+---------------+------------+
| Nume_variabilă | Valoare |
+---------------+------------+
| numele gazdă | ebs-105422 |
| port | 3306 | +---------------+------------+
2 rânduri în set (0,01 sec)

mysql>

drapel in
Ce utilizator folosești pentru a te conecta la baza de date? Ați confirmat că numele de utilizator este accesibil din exterior?
Pedroski avatar
drapel es
Cum as confirma asta? Tot ce știu este că folosirea pymsql pentru a se conecta la găzduirea mea web partajată funcționează bine, dar pe serverul cloud nu mă pot conecta, indiferent ce încerc. Am setat UFW să permită 3306 și 33060. Am crezut că ar fi bine, dar, din păcate, nicio bucurie.
Pedroski avatar
drapel es
Folosind un truc de tunnel ssh, pot deschide phpMyAdmin pe serverul cloud, mă pot autentifica cu acreditările mele și pot manipula tabelele. Dar ceea ce am nevoie este să iau datele în fiecare săptămână, combinate cu openpyxl, am toate rezultatele pentru toți studenții scrise în Excel în aproximativ 2 secunde!
drapel in
Folosind un tunel SSH, vă conectați cu un cont de utilizator local. Ceva de genul `'pedroski'@'localhost'` pentru MySQL. Conectarea externă ar necesita să creați un cont precum `'pedroski'@'%'`. Fără a ști mai multe despre cum sunt configurate lucrurile, totuși, aceasta este doar o presupunere
Puncte:0
drapel es

Mi-am dat seama, acest răspuns este doar pentru a ajuta pe oricine poate avea aceeași problemă. Probabil că această modalitate nu este atât de sigură, cu 3306 deschis, dar a) am doar teme b) mai aveți nevoie de numele de utilizator și parola.

Când creați un utilizator pe mysql, arată cam așa, de asemenea, când o faceți prin ssh pe server:

CREAȚI UTILIZATOR 'peter'@'localhost' IDENTIFICAT DE 'parolă';
ACORDĂ TOATE PRIVILEGIILE PE some_db.* CĂTRE „peter”@“localhost”;

Dacă doriți acces de la distanță, trebuie să modificați datele utilizatorului (sau să faceți un utilizator nou):

RENUMIRE UTILIZATORUL 'peter'@'localhost' LA 'peter'@'%';
Acordați totul pe somedb.* CĂTRE „peter”@'%';

% aici se pare că reprezintă orice ip

Apoi, de asemenea, prin ssh pe server:

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

găsi linia care are

bind-address = 127.0.0.1

schimba asta in

bind-adresă = 0.0.0.0

ctrl X pentru a ieși din nano nano vă întreabă dacă doriți să salvați, apăsați y, apoi enter pentru a salva în același loc în care ați deschis /etc/mysql/mysql.conf.d/mysqld.cnf

Apoi (pe server):

sudo systemctl reporniți mysql

După aceea, Python-ul meu a funcționat bine din shell-ul Idle:

def mysqlRemoteAttn(clas): 
    # Pentru a conecta baza de date MySQL la distanță 
    conn = pymysql.connect( 
        gazdă='123.456.789.123',
        port=3306,
        user='myusername',  
        parola = 'parola mea', 
        db='allstudentsdb', 
        ) 
      
    cur = conn.cursor()

    sql = f"SELECT studentnr, attn_this_week FROM allstudents{clas}"
    cur.execute(sql)
    ieșire = cur.fetchall()           
            
    # Pentru a închide conexiunea 
    conn.close()
    ieșire de întoarcere

# obțineți prezența de pe pagina web MySQL
rezultate = mysqlRemoteAttn(clas)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.