Что мне нужно сделать, чтобы разрешить удаленный доступ к MySQL на сервере Ubuntu 20.04?

Вопрос или проблема

У меня есть небольшой скрипт на Python для сбора результатов домашнего задания и онлайн-занятий студентов из таблицы allstudentsAnswers20BE.

Он отлично работает на моей старой веб-странице общего хостинга.

На новом облачном сервере Ubuntu 20.04 у меня возникает ошибка “connection refused”.
У меня нет опыта работы с облачным сервером.

Я разрешил порты 33060 и 3306 в UFW.

Мой IP дома не фиксированный.

Когда я запускаю свой скрипт на Python, я получаю эту ошибку при попытке подключения к облачному серверу:

pymysql.err.OperationalError: (1130, “183.206.16.30′ is not allowed to
connect to this MySQL server”)

netstat показывает, что mysqld прослушивает порты 33060 и 3306, поэтому я разрешил оба в брандмауэре ufw.

Подключаясь к облачному серверу через ssh, я выполнил:

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

Я изменил строку bind-address на 0.0.0.0 (я также пробовал *)

Я перезапустил mysql: sudo systemctl restart mysql

Должно быть что-то еще, что нужно настроить на сервере.

Есть ли советы, что это может быть, пожалуйста, мне действительно нужно, чтобы это работало.

Я также получил эту информацию (предположим, мой облачный IP 123.456.789.123):

pedro@ebs-105422:~$ nc -v -w 2 123.456.789.123 3306
Connection to 123.456.789.123 3306 port [tcp/mysql] succeeded!
pedro@ebs-105422:~$

Это означает, что mysqld прослушивает на 3530? Или это PID mysqld?

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

Ниже приведено из mysql на сервере, подтверждающее порт 3306

mysql> show variables where variable_name in (‘hostname’,’port’);
+—————+————+
| Variable_name | Value |
+—————+————+
| hostname | ebs-105422 |
| port | 3306 |
+—————+————+
2 rows in set (0.01 sec)

mysql>

Я разобрался, этот ответ предназначен, чтобы помочь любому, у кого может быть та же проблема. Это, вероятно, не так безопасно, с открытым портом 3306, но a) у меня только домашнее задание, b) все равно нужны имя пользователя и пароль.

Когда вы создаете пользователя в mysql, это выглядит примерно так, также когда вы делаете это через ssh на сервере:

CREATE USER ‘peter’@’localhost’ IDENTIFIED BY ‘password’;
GRANT ALL PRIVILEGES ON some_db.* TO ‘peter’@’localhost’;

Если вы хотите удаленный доступ, вам нужно изменить данные пользователя (или создать нового пользователя):

RENAME USER ‘peter’@’localhost’ TO ‘peter’@’%’;
GRANT ALL ON somedb.* TO ‘peter’@’%’;

% здесь, очевидно, представляет любой IP

Затем также через ssh на сервере:

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

найдите строку, содержащую

bind-address = 127.0.0.1

измените это на

bind-address = 0.0.0.0

ctrl X, чтобы выйти из nano
nano спрашивает, хотите ли вы сохранить, нажмите y, затем enter, чтобы сохранить в том же месте, где вы открыли /etc/mysql/mysql.conf.d/mysqld.cnf

Затем (на сервере):

sudo systemctl restart mysql

После этого мой скрипт на Python работал нормально из оболочки Idle:

def mysqlRemoteAttn(clas): 
    # Подключение к удаленной базе данных MySQL 
    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()           
            
    # Закрытие соединения 
    conn.close()
    return output

# Получение посещаемости с веб-страницы MySQL
results = mysqlRemoteAttn(clas)

Ответ или решение

Чтобы обеспечить удаленный доступ к MySQL на сервере под управлением Ubuntu 20.04, необходимо выполнить несколько важных шагов. Рассмотрим процесс подробно, чтобы избежать ошибок и убедиться, что ваш скрипт на Python сможет беспрепятственно подключиться к базе данных.

Шаг 1: Настройка конфигурации MySQL

  1. Изменение конфигурации MySQL: Откройте файл конфигурации MySQL для редактирования. Используйте команду:

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

    Найдите строку:

    bind-address = 127.0.0.1

    Измените её на:

    bind-address = 0.0.0.0

    Это позволит MySQL принимать подключения с любого IP-адреса. Завершите редактирование и сохраните изменения с помощью Ctrl + X, затем Y и нажмите Enter.

  2. Перезапуск службы MySQL:
    После изменения конфигурации перезапустите MySQL, чтобы изменения вступили в силу:

    sudo systemctl restart mysql

Шаг 2: Настройка политики доступа MySQL

  1. Создание или изменение учетной записи пользователя:
    Откройте сессию MySQL, используя команду:

    mysql -u root -p

    После входа создайте нового пользователя или измените существующего, чтобы он мог подключаться удаленно. Например, если пользователь ‘peter’, выполните:

    RENAME USER 'peter'@'localhost' TO 'peter'@'%';

    % означает, что пользователь сможет подключаться с любого IP-адреса.

  2. Предоставление прав доступа пользователю:
    Выдайте необходимые права пользователю:

    GRANT ALL PRIVILEGES ON some_db.* TO 'peter'@'%';
    FLUSH PRIVILEGES;

    Это обеспечит, что пользователь имеет необходимые привилегии для взаимодействия с базой данных.

Шаг 3: Настройка брандмауэра

  1. Проверка правил UFW:
    Убедитесь, что порты 3306 и 33060 открыты в брандмауэре, чтобы обеспечить доступ к MySQL:
    sudo ufw allow 3306
    sudo ufw allow 33060

    Проверьте статус UFW командой:

    sudo ufw status

Рекомендации по безопасности

Ваш домашний IP-адрес является динамическим, что может вызвать сложности с безопасностью. Рассмотрите возможность использования VPN или других средств для безопасного подключения. Вместо открытия всемирного доступа к MySQL, лучше минимизировать риск доступа, используя надежные политики доступа и обновления программного обеспечения безопасности.

Следуя этим шагам, ваш Python-скрипт должен успешно подключаться к базе данных MySQL на сервере Ubuntu 20.04. Если возникнут дополнительные вопросы, обратитесь к официальной документации MySQL либо проконсультируйтесь с квалифицированным специалистом для получения детальных разъяснений.

Оцените материал
Добавить комментарий

Капча загружается...