Builzore导出APP后,在安卓虚拟机正常运行,且pymysql无报错,但安装到手机后,却出现pymysql报错pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '...' ([Errno 1] Operation not permitted)")
MySQL服务器平时都是正常使用,且外网连接都没有问题,但是打包成APP后,就报错了。
以下为报错信息
你的mysql绑定的ip和端口号是否能通呢?在你手机上,最好代码里加入ping验证保证连接正常
回答引用ChatGPT:
这个错误通常是因为移动设备无法连接到MySQL服务器。请确保您的移动设备可以访问MySQL服务器,并且您在连接MySQL服务器时使用了正确的IP地址和端口号。
另外,如果您使用的是Android设备,请确保您已经在应用程序的AndroidManifest.xml文件中添加了Internet权限。可以通过在AndroidManifest.xml文件中添加以下行来添加Internet权限:
<uses-permission android:name="android.permission.INTERNET" />
如果问题仍然存在,请检查您的代码以确保您正确地配置了MySQL连接。您可以尝试使用命令行或其他工具连接到MySQL服务器以进行测试。如果一切正常,请检查您的移动设备的网络设置以确保您可以连接到MySQL服务器。
要使用命令行或其他工具连接到MySQL服务器进行测试,您可以按照以下步骤进行操作:
打开终端或命令提示符。
输入以下命令以连接到MySQL服务器:
mysql -h 主机名或IP地址 -u 用户名 -p 密码
请替换主机名或IP地址、用户名和密码为您的MySQL服务器的实际值。
如果连接成功,则会显示MySQL服务器的版本信息和MySQL提示符,例如:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 123456
Server version: 5.7.28-0ubuntu0.18.04.4 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
您可以尝试在MySQL提示符下执行一些基本的SQL查询来测试连接。例如,输入以下命令来查看所有数据库:
show databases;
如果连接失败,则会显示错误消息,例如“ERROR 2003 (HY000): Can't connect to MySQL server on '主机名或IP地址' (110)”等。根据错误消息来检查您的连接设置或MySQL服务器的状态。
您也可以使用其他工具,例如MySQL Workbench、Navicat或phpMyAdmin等来连接到MySQL服务器进行测试。这些工具通常具有用户友好的界面和更丰富的功能。
我看你的程序使用到了数据库,你在安卓虚拟机上能够使用,说明你的电脑上能够连接到MySQL数据库,但是你安装到手机上后链接不上,是因为你的手机连接不上MySQL数据库,手机所在的网络和数据库所在的网络是不一样的,你看下你的手机和数据库所在的电脑连接的网络是一样的吗,其次,你的程序中,数据库的连接地址不能是127.0.0.1 要修改为你的数据库所在电脑的实际ip地址,你可以打开cmd窗口,输入ipconfig查看你的数据库所在电脑的实际ip地址。
这个问题的可能原因是您的手机上没有权限连接到 MySQL 服务器。请确保您的手机与 MySQL 服务器处于同一局域网中,而且允许外部设备访问 MySQL 服务器。如果您的 MySQL 服务器在 Linux 系统上运行,则需要为 MySQL 数据库设置防火墙规则或更改 MySQL 的配置文件,以允许来自其他网段的连接。
另外,您需要注意以下几点,以确保应用程序可以正确访问 MySQL 服务器:
检查您的代码是否正确指定了 MySQL 服务器的 IP 地址和端口号;
确认您的 MySQL 账户具有从外部设备连接 MySQL 服务器的权限;
确认您的手机已连接到正确的 Wi-Fi 网络,并可以访问 Internet;
在应用中,使用 try...except 语句来处理连接 MySQL 服务器时可能出现的异常情况,如网络连接失败、服务器宕机等。
最后,将您的应用程序安装到物理设备上时,需要注意您的应用程序是否已经签名,以及是否给予了应用程序访问 MySQL 服务器的权限。
网络通吗
该回答参考ChatGPT:
这个错误提示一般是因为安卓系统的安全机制限制了APP对网络的访问权限。可以尝试在安卓Manifest文件中添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
如果还是无法解决问题,可以尝试使用安卓的日志工具查看更详细的错误信息,以便进一步调试。
安卓虚拟机使用的是电脑的网络,手机运行要用手机接入网络,应该是你的手机和mysql数据库连通有问题
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
该错误通常是因为手机上的安全限制阻止了你的应用程序连接到MySQL服务器。
你可以尝试以下几种方法来解决这个问题:
确保你的手机和MySQL服务器在同一个网络中,并且MySQL服务器可以被访问。
如果你的MySQL服务器在本地计算机上运行,并且你正在使用Android Studio Emulator来测试你的应用程序,请确保使用10.0.2.2:port连接到本地MySQL服务器。其中port为你的MySQL服务器端口号。例如:10.0.2.2:3306。
如果你使用的是云服务器上的MySQL服务器,请检查是否开启了公共IP访问。
确保你的应用程序具有允许连接到互联网的权限。在AndroidManifest.xml文件中添加以下代码:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
import urllib.request
def internet_on():
try:
urllib.request.urlopen('http://74.125.224.72', timeout=1)
return True
except urllib.request.URLError as err:
return False
以上是一些可能会出现这个问题的原因,你可以根据你的情况尝试这些方法来解决这个问题。
代码示例(修改要连接的主机和数据库名):
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "username", "password", "database")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print("Database version : %s " % data)
# 关闭数据库连接
db.close()
如果我的回答解决了您的问题,请采纳!
bind-address = 0.0.0.0
import pymysql
conn = pymysql.connect(host='your_mysql_server_ip', port=3306, user='your_username', password='your_password', db='your_database')