Рейтинг:0

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

флаг es

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

Это прекрасно работает на моей старой веб-странице общего веб-хостинга.

На новом облачном сервере Ubuntu 20.04 мне отказывают в соединении. У меня нет опыта работы с облачным сервером.

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

Мой ip дома не закреплен.

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

pymysql.err.OperationalError: (1130, "183.206.16.30" не разрешено подключиться к этому серверу MySQL")

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

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

судо нано /etc/mysql/mysql.conf.d/mysqld.cnf

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

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

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

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

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

pedro@ebs-105422:~$ nc -v -w 2 123.456.789.123 3306
Подключение к порту 123.456.789.123 3306 [tcp/mysql] выполнено успешно! педро@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:* ПРОСЛУШАТЬ 3530/mysqld
tcp6 0 0 [::]:33060 [::]:* ПРОСЛУШАТЬ 3530/mysqld
педро@ebs-105422:~$

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

mysql> показать переменные, где имя_переменной в ('hostname','port');
+---------------+------------+
| Имя_переменной | Значение |
+---------------+------------+
| имя хоста | ebs-105422 |
| порт | 3306 | +---------------+-------------+
2 ряда в сете (0,01 сек)

mysql>

флаг in
Какого пользователя вы используете для подключения к базе данных? Вы подтвердили, что имя пользователя доступно извне?
Pedroski avatar
флаг es
Как бы я это подтвердил? Все, что я знаю, это то, что использование pymsql для подключения к моему общему веб-хостингу работает нормально, но на облачном сервере я не могу подключиться, что бы я ни пытался. Настроил UFW на разрешение 3306 и 33060 Думал, что сойдет, но, увы, не в радость.
Pedroski avatar
флаг es
Используя трюк с туннелированием ssh, я могу открыть phpMyAdmin на облачном сервере, войти в систему, используя свои учетные данные, и манипулировать таблицами. Но что мне нужно, так это получать данные каждую неделю в сочетании с openpyxl, у меня есть все результаты для всех студентов, записанные в Excel примерно за 2 секунды!
флаг in
Используя туннель SSH, вы подключаетесь к локальной учетной записи пользователя. Что-то вроде `'pedroski'@'localhost'` для MySQL. Для внешнего подключения вам потребуется создать учетную запись типа `'pedroski'@'%'`. Однако, не зная больше о том, как все устроено, это всего лишь предположение.
Рейтинг:0
флаг es

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

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

СОЗДАЙТЕ ПОЛЬЗОВАТЕЛЯ 'peter'@'localhost', ИДЕНТИФИЦИРОВАННОГО 'паролем';
ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА some_db.* TO 'peter'@'localhost';

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

ПЕРЕИМЕНОВАТЬ ПОЛЬЗОВАТЕЛЯ 'peter'@'localhost' В 'peter'@'%';
GRANT ALL ON somedb.* TO 'peter'@'%';

% здесь, по-видимому, представляет любой ip

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

судо нано /etc/mysql/mysql.conf.d/mysqld.cnf

найти строку, в которой

адрес привязки = 127.0.0.1

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

адрес привязки = 0.0.0.0

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

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

sudo systemctl перезапустить mysql

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

деф mysqlRemoteAttn ​​(клас): 
    # Для подключения удаленной базы данных MySQL 
    соединение = pymysql.connect( 
        хост = '123.456.789.123',
        порт=3306,
        пользователь = 'мое имя пользователя',  
        пароль = 'мой пароль', 
        БД='allstudentsdb', 
        ) 
      
    курс = соединение.курсор ()

    sql = f"ВЫБЕРИТЕ номер студента, attn_this_week ИЗ всех студентов {класс}"
    cur.execute(sql)
    вывод = cur.fetchall()           
            
    # Чтобы закрыть соединение 
    соединение.закрыть()
    возвратный вывод

# получить посещаемость с веб-страницы MySQL
результаты = mysqlRemoteAttn ​​(клас)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.