一 问题描述:
在本地无法直接使用本地ip(192.168.3.73)连接数据库,需将主机ip设为127.0.0.1才可连接
127.0.0.1为本地回环地址,专门用于本机网络测试
import pymysql
conn = pymysql.connect(
# host = '127.0.0.1', # 此处使用127.0.0.1正常连接
host = '192.168.3.73', # 此处改为本机的ip地址则如下报错
port = 3306,
user = 'root',
password = '123',
database = 'day48',
charset = 'utf8' # 编码千万不要加-
) # 链接数据库
这是因为在MySQL的权限表中,未添加本机的ip地址,所以用本机ip来连接,会被拒接。
二、解决方案
2.1 查看权限表
# 先查看当前数据库的权限表
mysql> use mysql;
mysql> select host,user from user;
2.2 修改权限表
mysql> update user set host = "192.168.3.73" where user="root";
# 或 使用 update user set host = "%" where user = "root"; 来匹配所有ip地址,即让外部ip均可访问
mysql> select host,user from user;
三、用户表详解
MySQL是一个多用户管理的数据库,可以为不同用户分配不同的权限,分为root用户和普通用户,root用户为超级管理员,拥有所有权限,而普通用户拥有指定的权限。
MySQL是通过权限表来控制用户对数据库访问的,权限表存放在mysql数据库中,主要的权限表有以下几个:user,db,host,table_priv,columns_priv和procs_priv,先带你了解的是user表。
通常用户信息、修改用户的密码、删除用户及分配权限等就是在mysql数据库的user表中。
用户列(用户连接MySQL数据库需要输入的信息)
Host:主机名,双主键之一,值为%时表示匹配所有主机。User:用户名,双主键之一。Password:密码名。
(root,%),表示可以远程登录,并且是除服务器外的其他任何终端,%表示任意IP都可登录。
(root,localhost), 表示可以本地登录,即可以在服务器上登陆,localhost则只允许本地登录。
(root,127.0.0.1 ),表示可以本机登陆,即可以在服务器上登陆
(root,sv01),表示主机名为sv1可以登陆,sv01具体指的哪台机器,可以在cat /etc/hostname查看
(root,::1) , 表示本机可以登陆, 看密码都是相同嘛,具体::1代表意义,待查
参照:https://www.cnblogs.com/liuhaidon/archive/2019/09/12/11511129.html