O que preciso fazer para permitir acesso remoto ao MySQL no servidor Unbuntu 20.04?

O que preciso fazer para permitir acesso remoto ao MySQL no servidor Unbuntu 20.04?

Eu tenho um pequeno script Python para coletar as pontuações dos trabalhos de casa e das aulas on-line dos alunos na tabela allstudentsAnswers20BE.

Isso funciona muito bem na minha antiga página de hospedagem compartilhada.

No novo servidor em nuvem Ubuntu 20.04, a conexão foi recusada. Não tenho experiência em executar um servidor em nuvem.

Permiti as portas 33060 e 3306 no UFW

Meu ip está em casa não está consertado.

Quando executo meu script Python, recebo este erro ao tentar me conectar ao servidor em nuvem

pymysql.err.OperationalError: (1130, "183.206.16.30' não tem permissão para se conectar a este servidor MySQL")

netstat diz que o mysqld está escutando em 33060 e 3306, então permiti ambos no firewall ufw

Conectando-me ao servidor em nuvem via ssh, executei:

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

Alterei a linha bind-address para 0.0.0.0 (também tentei *)

Eu reiniciei o mysql: sudo systemctl restart mysql

Deve haver algo mais que precisa ser configurado no lado do servidor.

Alguma dica sobre o que pode ser, por favor, eu realmente preciso que isso funcione.

Também recebi esta informação (suponha que meu IP da nuvem seja 123.456.789.123):

pedro@ebs-105422:~$ nc -v -w 2 123.456.789.123 3306
Conexão à porta 123.456.789.123 3306 [tcp/mysql] bem sucedida! pedro@ebs-105422:~$

Isso significa que o mysqld está escutando em 3530? Ou esse é o PID do mysqld?

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

Abaixo está do mysql no servidor, confirmando a porta 3306

mysql> mostra variáveis ​​onde nome_da_variável está ('hostname','port');
+---------------+------------+
| Nome_variável | Valor |
+---------------+------------+
| nome do host | ebs-105422 |
| porto | 3306 | +---------------+------------+
2 linhas no conjunto (0,01 seg)

mysql>

Responder1

Eu descobri, essa resposta é apenas para ajudar quem pode ter o mesmo problema. Este caminho provavelmente não é tão seguro, com 3306 aberto, mas a) só tenho lição de casa b) você ainda precisa do nome de usuário e senha.

Quando você cria um usuário no mysql fica mais ou menos assim, também quando você faz isso via ssh no servidor:

CRIAR USUÁRIO 'peter'@'localhost' IDENTIFICADO POR 'senha';
CONCEDER TODOS OS PRIVILÉGIOS EM some_db.* TO 'peter'@'localhost';

Se desejar acesso remoto, você precisa alterar os dados do usuário (ou criar um novo usuário):

RENOMEAR USUÁRIO 'peter'@'localhost' PARA 'peter'@'%';
GRANT ALL ON somedb.* TO 'peter'@'%';

% aqui aparentemente representa qualquer ip

Depois também via ssh no servidor:

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

encontre a linha que tem

endereço de ligação = 127.0.0.1

mude isso para

endereço de ligação = 0.0.0.0

ctrl X para sair do nano nano pergunta se você deseja salvar, pressione y e digite para salvar no mesmo lugar que você abriu /etc/mysql/mysql.conf.d/mysqld.cnf

Então (no servidor):

sudo systemctl reiniciar mysql

Depois disso, meu Python funcionou bem no shell Idle:

def mysqlRemoteAttn(clas): 
    # To connect remote MySQL database 
    conn = pymysql.connect( 
        host='123.456.789.123',
        port=3306,
        user='myusername',  
        password = 'mypassword', 
        db='allstudentsdb', 
        ) 
      
    cur = conn.cursor()

    sql = f"SELECT studentnr, attn_this_week FROM allstudents{clas}"
    cur.execute(sql)
    output = cur.fetchall()           
            
    # To close the connection 
    conn.close()
    return output

# get the attendance from the webpage MySQL
results = mysqlRemoteAttn(clas)

informação relacionada