### 如何在云服务器上开放 MySQL 端口以允许外部访问 为了实现云服务器上的 MySQL 数据库对外部网络的开放,需要完成以下几个方面的配置: #### 1. 修改防火墙设置 确保云服务器的操作系统防火墙允许通过 MySQL 默认端口 (3306) 的流量。如果使用的是 CentOS 或其他基于 RHEL 的操作系统,可以通过 `firewalld` 来管理防火墙规则。 运行以下命令来永久打开 3306 端口: ```bash sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --reload ``` 验证端口是否已成功开启: ```bash sudo firewall-cmd --list-all | grep ports ``` 上述操作会显示当前防火墙中启用的所有端口号[^4]。 #### 2. 配置安全组规则 大多数云服务商(如腾讯云、阿里云)都提供了一个名为 **安全组** 的功能,用于控制进出虚拟机实例的网络流量。需登录到对应的云服务平台管理界面,编辑该实例的安全组规则,添加一条入站规则,允许 TCP 协议下的 3306 端口被访问。 具体步骤如下: - 登录到云平台控制台; - 进入对应实例的安全组配置页面; - 添加新规则:协议类型设为 “TCP”,端口范围填写为 “3306”,源 IP 地址可以设定成任意 (`0.0.0.0/0`) 表示接受来自任何地方的请求[^1]。 #### 3. 调整 MySQL 绑定地址 默认情况下,MySQL 只监听本地回环接口 (localhost),即仅限于本机内部通信。要让其能够响应外网客户端发起的数据查询需求,则有必要更改绑定地址参数。 编辑 MySQL 主配置文件 `/etc/my.cnf` 或者 `/etc/mysql/my.cnf` ,定位 `[mysqld]` 下面的部分,查找是否存在下面这一项: ```ini bind-address = 127.0.0.1 ``` 将其更改为: ```ini bind-address = 0.0.0.0 ``` 这样做的目的是指示 mysqld 守护进程去侦听所有的 IPv4 接口而不是仅仅局限于 localhost 上的工作模式[^3]。 完成后记得重启 MySQL 服务使改动生效: ```bash sudo systemctl restart mysql.service ``` 或者如果是独立安装版本则可能需要用特定路径启动它比如: ```bash /path/to/installation/bin/mysqld_safe & ``` #### 4. 设置用户权限支持远程连接 即使完成了以上所有准备工作之后,仍然有可能因为缺乏适当授权而无法正常建立链接。因此还需要授予目标账户相应的权限以便可以从互联网范围内对其进行操控。 执行 SQL 查询语句赋予某个具体的用户名及其密码从任一主机连进来的能力: ```sql GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 这里 `'%'` 是通配符代表不限制来源 ip;当然也可以替换为你信任的具体公网 ip 列表中的某一项更加精确地限定许可范围。 --- ### 总结 综上所述,要在云端部署好的 Linux VPS 中公开暴露自己的 Mysql Server 并让它能被外界所触及的话,就需要依次处理好这几个方面的事情——调整 OS 层级防护策略、定制化 IaaS 提供商处定义好的 ACLs、修订数据库引擎自身的约束条件以及最后一步给予恰当的身份认证机制保障安全性的同时满足业务逻辑的需求。 ```python import pymysql.cursors connection = pymysql.connect(host='server_ip', port=3306, user='db_username', password='db_password', database='database_name') try: with connection.cursor() as cursor: sql_query = "SELECT VERSION();" cursor.execute(sql_query) result = cursor.fetchone() finally: connection.close() print(f"MySQL Database Version is {result}") ```