python进行远程连接数据库
python3 利用pymysql模块进行数据库远程连接,但是发现即使代码没有出错误,任然会连接失败。在此过程中出现两个错误,网上寻找一圈解决方案,终于解决问题了。作为刚刚接触python的小白来说,还是很兴奋的。
首先,给出远程连接数据库的代码
import pymysql
#import
#远程登陆数据库
try:
con = pymysql.Connect(
host ='******',#远程登录主机的ip地址
port = 3306,#mysql服务器的端口
user ='root', #mysql的用户
passwd = 'Password',#密码
db = 'databasename' #需要的数据库名称
)
#获取本次的游标
cur = con.cursor()
except pymysql.Error as e :
print("Error %d: %s"%(e.args[0],e.args[1]))
注意:期间加了 try ....except 语句,进行异常捕捉,方便知道出现那些异常
出现问题:
其一:目的主机拒绝访问
分析:目的主机积极拒绝访问,后来经过网上查找。发现数据库的3306端口没有开启,只是本地主机才会登录。当远程登录时,当然是拒绝访问的。
解决方案:
首先查看端口是否打开 netstat -an|grep 3306
此图为开启3306端口的截图,之前显示为. . . 127.0.0.1:3306 . . .
打开mysql配置文件vi /etc/mysql/mysql.conf.d/mysqld.cnf
将bind-address = 127.0.0.1注销
截图最下面一行注销
重启动ubuntu
再次查看端口是否打开 netstat -an|grep 3306
此时端口3306已经打开
其二:继续报错。Access denide for user
分析:数据库通常只是在装数据库服务器本地才会直接链接。不允许远程连接数据库。所以,我们需要远程数据库对本地进行授权:
解决方案:
用root用户登陆数据库,然后:
grant all privileges on *.* to 创建的用户名 @"%" identified by "密码";
flush privileges; * 刷新刚才的内容*
格式:grant 权限 on 数据库教程名.表名 to 用户@登录主机 identified by "用户密码";
@ 后面是访问MySQL的客户端ip地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为
同时也可以为现有的用户设置是否具有远程访问权限。如下:
use mysql;
update db set host = '%' where user = '用户名'; (如果写成 host=localhost 那此用户就不具有远程访问权限)
flush privileges;
grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option;
最后,问题决解了!
给出成功后的截图