Mysql.connector для доступа к удаленной базе данных в локальной сети Python 3

Я использовал библиотеку python mysql.connector, чтобы внести изменения в свои локальные базы данных SQL-сервера, используя:

from __future__ import print_function
import mysql.connector as kk

cnx = kk.connect(user='root', password='password123',
                              host='localhost',
                              database='db')
cursor = cnx.cursor(buffered=True)
sql = "DELETE FROM examples WHERE id = 4"
number_of_rows = cursor.execute(sql)
cnx.commit()   
cnx.close()

Это работает нормально, но когда я пробую тот же код с изменением только параметра host, например,

host='xxx.xxx.xxx.xxx'

(где IP - это IP-адрес сервера, подключенного к моей локальной сети.), он не будет обновлять эту конкретную базу данных на этом сервере.

Выведенная ошибка выглядит примерно так:

mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on 'xx.xxx.x.xx' (10060)

Почему это не сработает?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 974
2

Ответы 2

Во-первых, вы должны проверить, может ли ваш локальный IP-адрес получить доступ к вашему удаленному серверу (проверьте, есть ли у вас ограничение IP на вашем сервере), после проверки, использует ли ваша база данных mysql порт по умолчанию или нет. Если нет, вы должны указать порт в своем код.

Я проверил, могу ли я получить доступ к этому удаленному серверу, используя тест ping. Он работает отлично, но я не знаю, как проверить, использует ли моя база данных mysql порт по умолчанию или нет .. Как мне это сделать? Спасибо

Krishnakumar M 01.06.2018 05:29

Если ваш сервер находился в службе хостинга, вы можете проверить параметры mysql в панели управления. Для ping ваш сервер был доступен, но, возможно, не база mysql

Maxence Guyonvarho 01.06.2018 09:18

Я проверил часть порта, там написано 3306. Как мне упомянуть порт? Хорошо, если ping не гарантирует доступ к базе данных mysql, как мне проверить, есть ли у меня доступ?

Krishnakumar M 01.06.2018 11:25

3306 - это порт по умолчанию для mysql, поэтому вам не нужно указывать конкретное соединение. Но на вашем сервере вам необходимо авторизовать вашу базу данных mysql для получения соединения извне. Для этого вам нужно задать вопрос своему хосту, если вы не можете сделать это в панели управления.

Maxence Guyonvarho 01.06.2018 14:19

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

Вы можете проверить это из командной строки, используя:

mysql -u root -p password123 - h xxx.xxx.xxx.xxx db

Если это не сработает, выполните отладку следующим образом:

  1. пинг xxx.xxx.xxx.xxx. Если хост доступен, перейдите к следующему шагу, если нет, то этот IP-адрес заблокирован, недоступен или неверен. Дважды проверьте IP-адрес и убедитесь, что они находятся в одной сети.

  2. Проверьте, запущен ли mysqld на хосте. перезапуск службы mysqld. Если это так, перейдите к следующему шагу, если нет, запустите mysqld. Если он не хочет запускаться, установите его, запустите службу и настройте свою базу данных.

  3. Telnet конкретный порт, чтобы увидеть, заблокирован ли порт. telnet xxx.xxx.xxx.xxx 3306. Если это работает, переходите к следующему шагу. Если это не работает, проверьте свои IPTables и проверьте, открыт ли порт на удаленном хосте.

  4. Добавьте пользователя в mysql на хосте: https://dev.mysql.com/doc/refman/8.0/en/adding-users.html Перезапустите mysqld и повторите команду выше.

«проверьте своего пользователя на удаленном хосте и проверьте, доступен ли IP-адрес и не заблокирован ли порт (брандмауэр)» Как это проверить? Спасибо

Krishnakumar M 01.06.2018 05:30

Другие вопросы по теме