Как исправить ошибку 2003 при подключении к базе данных?

Я собрал приложение в формате APK на Python с использованием Kivy и для подключения к базе данных использовал pymysql. На компьютере всё работает корректно, даже при извлечении файлов из сборки, проблема возникает только на телефоне: при запуске приложения появляется ошибка в логе 2003, указывающая на невозможность подключения к базе данных: <br/> 2003, "Can't connect to MySQL server on '77.222.40.238' ([Errno 1] Operation not permitted) <br/> Вместо IP-адреса я пробовал использовать хост, и на ПК всё функционирует, но на эмуляторе и телефоне – нет. <br/> Я также добавлял permission = INTERNET в файле buildozer.spec, но это не дало результата. <br/> <br/> Можете помочь мне решить эту проблему?
  • 22 ноября 2024 г. 20:03
Ответы на вопрос 2
Ошибка 2003 при подключении к MySQL обычно указывает на то, что клиент не может установить соединение с сервером базы данных. В вашем случае проблема возникает только на телефоне и в эмуляторе, что может быть связано с несколькими факторами. Вот что вы можете попробовать для решения этой проблемы:

1. **Проверка интернет-соединения**: Убедитесь, что на вашем мобильном устройстве есть доступ к интернету. Попробуйте открыть веб-сайты через мобильный браузер, чтобы проверить, есть ли соединение.

2. **Проверка разрешений**: Убедитесь, что у вашего приложения есть все необходимые разрешения для доступа к интернету. В вашем `buildozer.spec` у вас должно быть следующее:
   ```plaintext
   android.permissions = INTERNET
   ```

3. **Использование локального IP или DNS**: Если вы используете локальный IP-адрес, он может не работать на мобильном устройстве, так как телефон может находиться в другой сети. Попробуйте использовать публичный IP или DNS для подключения к серверу.

4. **Настройки сервера**: Убедитесь, что сервер MySQL настроен на прием подключений извне. В файле конфигурации MySQL обычно есть параметр `bind-address`, который должен быть настроен на `0.0.0.0`, чтобы разрешить подключения из любых источников.

5. **Проверка брандмауэра**: Проверьте настройки брандмауэра вашего сервера, чтобы убедиться, что он позволяет входящие подключения на порт 3306 (или другой, если вы изменили его).

6. **Проверка версии MySQL**: Убедитесь, что версия MySQL поддерживает ваш клиент и имеет правильные параметры аутентификации и сетевые настройки.

7. **Тестирование с помощью Telnet или другого клиента**: Попробуйте подключиться к серверу MySQL с использованием Telnet или другого клиентского инструмента прямо с вашего устройства, чтобы проверить, доступен ли сервер.

8. **Логи и отладка**: Посмотрите логи вашего сервера MySQL, чтобы понять, почему соединение может быть отклонено. Это может дать полезную информацию о проблеме.

Если после всех перечисленных шагов проблема остается нерешенной, попробуйте создать новый тестовый проект с минимальным кодом, который выполняет только подключение к базе данных. Это поможет вам изолировать проблему и упрощенно её отлаживать.
Немного не по теме, но SQLite использовать лучше. Или обычный http API. 
Вы же не хотите, чтобы хакер извлёк логин и пароль для подключения к базе и делал с ней, а то и с сервером, всё, что ему захочется? Такие уязвимости уже были, на Хабре читал. Также зашили в код приложения данные для подключения к mysql базе и да, их перехватили и всё взломали.
Похожие вопросы