
Tengo un pequeño script de Python para recopilar las calificaciones de las tareas de los estudiantes y de los trabajos de clase en línea de la tabla allstudentsAnswers20BE.
Esto funciona muy bien en mi antigua página web de alojamiento web compartido.
En el nuevo servidor en la nube Ubuntu 20.04, me rechazan la conexión. No tengo experiencia ejecutando un servidor en la nube.
Permití los puertos 33060 y 3306 en UFW
Mi ip de casa no está fija.
Cuando ejecuto mi secuencia de comandos Python, aparece este error al intentar conectarme al servidor en la nube.
pymysql.err.OperationalError: (1130, "183.206.16.30' no puede conectarse a este servidor MySQL")
netstat dice que mysqld está escuchando en 33060 y 3306, así que permití ambos en el firewall ufw
Conectándome al servidor en la nube a través de ssh, ejecuté:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Cambié la línea bind-address a 0.0.0.0 (también probé *)
Reinicié mysql: sudo systemctl restart mysql
Debe haber algo más que deba configurarse, del lado del servidor.
Cualquier consejo sobre lo que podría ser, por favor, realmente necesito que esto funcione.
También obtuve esta información (supongamos que la IP de mi nube es 123.456.789.123):
pedro@ebs-105422:~$ nc -v -w 2 123.456.789.123 3306 ¡
La conexión al puerto 123.456.789.123 3306 [tcp/mysql] fue exitosa! pedro@ebs-105422:~$
¿Esto significa que mysqld está escuchando en 3530? ¿O es ese el PID de mysqld?
pedro@ebs-105422:~$ sudo netstat -tap | grep mysql tcp 0 0 0.0.0.0:mysql 0.0.0.0:* ESCUCHAR 3530/mysqld
tcp6 0 0 [::]:33060 [::]:* ESCUCHAR 3530/mysqld
pedro@ebs-105422:~$
A continuación se muestra mysql en el servidor, confirmando el puerto 3306
mysql> mostrar variables donde nombre_variable en ('nombre de host','puerto');
+---------------+------------+
| nombre_variable | Valor |
+---------------+------------+
| nombre de host | ebs-105422 |
| puerto | 3306 | +---------------+------------+
2 filas en conjunto (0,01 seg)mysql>
Respuesta1
Lo descubrí, esta respuesta es solo para ayudar a cualquiera que pueda tener el mismo problema. Esta forma probablemente no sea tan segura, con 3306 abierto, pero a) solo tengo tarea b) todavía necesitas el nombre de usuario y la contraseña.
Cuando creas un usuario en mysql se ve así, también cuando lo haces vía ssh en el servidor:
CREAR USUARIO 'peter'@'localhost' IDENTIFICADO POR 'contraseña';
CONCEDA TODOS LOS PRIVILEGIOS EN some_db.* A 'peter'@'localhost';
Si desea acceso remoto, debe cambiar los datos del usuario (o crear un nuevo usuario):
RENOMBRAR USUARIO 'peter'@'localhost' A 'peter'@'%';
CONCEDER TODO EN somedb.* A 'peter'@'%';
% aquí aparentemente representa cualquier ip
Luego también vía ssh en el servidor:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
encuentra la recta que tiene
dirección de enlace = 127.0.0.1
cambiar esto a
dirección de enlace = 0.0.0.0
Ctrl X para salir de nano nano le pregunta si desea guardar, presione y, luego ingrese para guardar en el mismo lugar donde abrió /etc/mysql/mysql.conf.d/mysqld.cnf
Luego (en el servidor):
sudo systemctl reiniciar mysql
Después de eso, mi Python funcionó bien desde el shell inactivo:
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)