要让 MySQL 5.7 允许所有 IP 地址连接,核心是授权用户远程访问权限 + 解除本地地址绑定(关键配置),以下是完整步骤和 SQL 命令:

一、核心 SQL 命令(授权远程访问)

1. 登录 MySQL 终端

先通过本地登录 MySQL(默认仅允许本地登录):

mysql -u root -p  # 输入 root 密码回车
2. 授权用户(支持所有 IP 访问)
场景1:授权 root 用户(最高权限)允许所有 IP 连接
-- 授权 root 所有权限(所有数据库+所有表),允许任意 IP(%)访问,设置密码(替换为你的密码)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的root密码' WITH GRANT OPTION;
场景2:授权普通用户(推荐,更安全)
-- 授权 testuser 用户,允许所有 IP 访问,仅授予 testdb 数据库的权限(按需调整)
GRANT SELECT, INSERT, UPDATE ON testdb.* TO 'testuser'@'%' IDENTIFIED BY 'testuser的密码';
3. 刷新权限(使授权生效)
FLUSH PRIVILEGES;

二、关键配置:解除本地地址绑定(必做)

仅授权还不够!MySQL 5.7 默认绑定 127.0.0.1(仅本地访问),需修改配置文件解除绑定:

1. 找到 MySQL 配置文件
  • Linux/Mac:/etc/my.cnf/etc/mysql/my.cnf(不同系统路径可能不同)
  • Windows:my.ini(通常在 MySQL 安装目录的 my.inidata/my.ini
2. 修改 bind-address 配置

编辑配置文件,找到 [mysqld] 段落下的 bind-address,修改为:

[mysqld]
bind-address = 0.0.0.0  # 允许所有IP连接
port = 3306  # 确保端口未被修改(默认3306)
3. 重启 MySQL 服务
  • Linux(CentOS 6/7/8):
    # CentOS 7/8
    systemctl restart mysqld
    # CentOS 6
    service mysqld restart
    
  • Windows:
    右键「此电脑」→「管理」→「服务和应用程序」→「服务」→ 找到「MySQL」→ 重启。

三、注意事项(安全必看)

  1. 避免直接开放 root 所有 IP
    建议创建专用普通用户(如场景2),仅授予必要权限,降低风险。
  2. 防火墙放行 3306 端口
    远程连接需确保服务器防火墙(Linux iptables/ufw、Windows 防火墙)放行 3306 端口。
  3. MySQL 5.7 插件兼容问题
    若授权后仍无法连接,可能是 root 用户默认使用 auth_socket 插件(仅允许本地 socket 登录),需修改认证方式:
    -- 切换 root 为 mysql_native_password 插件(兼容远程密码登录)
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的root密码';
    FLUSH PRIVILEGES;
    
  4. 验证是否生效
    从远程机器测试连接:
    mysql -u root -p -h 你的MySQL服务器IP -P 3306
    

四、恢复本地仅访问(如需)

若需收回远程权限,执行:

-- 撤销 root 所有 IP 权限
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%';
FLUSH PRIVILEGES;
-- 删除远程用户(可选)
DROP USER 'root'@'%';

并将 bind-address 改回 127.0.0.1,重启服务。

结合你提供的 Django 数据库配置,以下是创建对应数据库+授权访问的完整 SQL 语句(适配 MySQL 5.7),包含字符集、权限等关键配置:

一、完整执行步骤(登录 MySQL 后执行)

1. 登录 MySQL 终端
mysql -u root -p  # 输入 MySQL 本地 root 密码(默认本地登录)
2. 创建数据库(核心语句)

指定数据库名 mushang_shop,并匹配配置中的 utf8mb4 字符集(支持 emoji 等特殊字符):

-- 创建数据库(不存在则创建),指定字符集和排序规则(MySQL 5.7 推荐 utf8mb4_unicode_ci)
CREATE DATABASE IF NOT EXISTS mushang_shop 
DEFAULT CHARACTER SET utf8mb4 
DEFAULT COLLATE utf8mb4_unicode_ci;
3. 授权 root 用户访问(匹配配置中的 HOST/PASSWORD)

配置中 HOST172.16.40.139USERrootPASSWORD123456,需授权该 IP 的 root 用户访问此数据库:

-- 方式1:仅授权访问 mushang_shop 数据库(推荐,最小权限原则)
GRANT ALL PRIVILEGES ON mushang_shop.* TO 'root'@'172.16.40.139' IDENTIFIED BY '123456' WITH GRANT OPTION;

-- 方式2:授权 root 从 172.16.40.139 访问所有数据库(兼容配置中可能的全库操作)
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.40.139' IDENTIFIED BY '123456' WITH GRANT OPTION;
4. 刷新权限(使授权生效)
FLUSH PRIVILEGES;
5. 可选:验证数据库创建结果
-- 查看数据库列表
SHOW DATABASES;

-- 查看指定数据库的字符集
USE mushang_shop;
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';

二、关键配置说明(匹配 Django 配置)

  1. 字符集utf8mb4 完全匹配配置中 OPTIONS['charset'] = 'utf8mb4',解决普通 utf8 不支持 emoji 的问题;
  2. 授权 IP:精准匹配 HOST: 172.16.40.139,确保 Django 服务能从该 IP 连接 MySQL;
  3. 密码IDENTIFIED BY '123456' 匹配配置中 PASSWORD: 123456
  4. sql_mode:配置中 init_command 是连接时设置 sql_mode,无需在创建数据库时配置(Django 连接后自动执行)。

三、补充:若需允许 root 从任意 IP 访问(兼容后续修改 HOST)

如果后续可能修改 Django 的 HOST 为其他地址,可授权 root 从所有 IP 访问(对应之前开放所有地址的配置):

GRANT ALL PRIVILEGES ON mushang_shop.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

四、注意事项

  1. 执行前确保 MySQL 服务已重启(对应之前开放远程连接的配置);
  2. 确保 172.16.40.139 所在机器能访问 MySQL 服务器的 3306 端口;
  3. MySQL 5.7 若提示 authentication plugin 'caching_sha2_password' 错误,需切换认证方式:
    ALTER USER 'root'@'172.16.40.139' IDENTIFIED WITH mysql_native_password BY '123456';
    FLUSH PRIVILEGES;
    
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐