首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >轻量云服务器如何链接自身mysql数据库?

轻量云服务器如何链接自身mysql数据库?

原创
作者头像
用户10991945
发布于 2026-10-15 16:44:53
发布于 2026-10-15 16:44:53
1400
举报

在轻量云服务器(https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav)上连接自身的 MySQL 数据库,通常有两种场景:

  1. 服务器内部连接:应用(如 PHP、Java、Python)运行在同一台服务器上,通过本地回环地址或 Socket 连接。
  2. 远程工具连接:你坐在电脑前,用 Navicat/DBeaver 等工具通过公网 IP 连接服务器上的 MySQL。

以下是针对这两种场景的详细步骤和配置指南:


场景一:服务器内部连接(推荐,性能最高)

如果应用程序和数据库在同一台机器,不要使用 127.0.0.1 或 localhost 的 TCP 连接,而应使用 Unix Socket。这能绕过 TCP/IP 协议栈,速度更快且更安全。

1. 确认 MySQL 正在运行
代码语言:javascript
复制
sudo systemctl status mysql
# 或者如果是 MariaDB
sudo systemctl status mariadb
2. 获取 Socket 文件路径

默认情况下,Socket 文件位于 /var/run/mysqld/mysqld.sock。你可以用以下命令确认:

代码语言:javascript
复制
mysql -u root -p -e "SHOW VARIABLES LIKE 'socket';"
3. 代码中的连接方式
  • PHP (PDO):$pdo = new PDO('mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=mydb', 'user', 'password');
  • Python (PyMySQL/SQLAlchemy):# PyMySQL pymysql.connect(unix_socket='/var/run/mysqld/mysqld.sock', user='user', password='pass', db='mydb') # SQLAlchemy create_engine('mysql+pymysql://user:pass@localhost/mydb?unix_socket=/var/run/mysqld/mysqld.sock')
  • Java (JDBC):// 注意:某些旧版驱动可能不支持 unix_socket 参数,建议改用 localhost + TCP jdbc:mysql://localhost:3306/mydb?useLocalSessionState=true

💡 提示:如果必须用 TCP 连接(如某些框架限制),使用 127.0.0.1 而不是 localhost。因为在 Linux 中,localhost 默认尝试 Socket,而 127.0.0.1 强制使用 TCP。


场景二:从外部远程连接(开发/运维常用)

如果你想在本地电脑上管理服务器上的 MySQL,需要完成以下三步:授权用户 -> 开放防火墙 -> 安全组放行。

第一步:创建允许远程访问的用户(或在现有用户中授权)

登录 MySQL:

代码语言:javascript
复制
mysql -u root -p

执行 SQL 语句(以创建一个名为 remote_user 的用户为例):

代码语言:javascript
复制
-- 1. 创建用户并设置密码(% 表示允许任何 IP 连接)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'YourStrongPassword';

-- 2. 授予权限(根据需求调整库名)
GRANT ALL PRIVILEGES ON mydb.* TO 'remote_user'@'%';

-- 3. 刷新权限
FLUSH PRIVILEGES;
EXIT;
第二步:修改 MySQL 配置文件,监听所有网卡

编辑 MySQL 配置文件(Ubuntu/Debian 通常在 /etc/mysql/mysql.conf.d/mysqld.cnf,CentOS 在 /etc/my.cnf 或 /etc/my.cnf.d/server.cnf):

代码语言:javascript
复制
[mysqld]
# 找到 bind-address 这一行
# 将其改为 0.0.0.0 表示监听所有接口
bind-address = 0.0.0.0

重启 MySQL 服务:

代码语言:javascript
复制
sudo systemctl restart mysql
第三步:开放云服务器安全组(关键!)

轻量云厂商(阿里云、腾讯云、华为云等)默认拦截外部对 3306 端口的访问。

  1. 登录云控制台。
  2. 找到你的实例 -> 安全组 或 防火墙 设置。
  3. 添加一条入站规则:
    • 端口范围: 3306
    • 源 IP: 建议填写你本地的公网 IP(更安全),或 0.0.0.0/0(允许所有人,不推荐生产环境)。
    • 协议: TCP
第四步:测试连接

在你的本地电脑终端或 Navicat 中:

  • 主机/IP: 服务器的公网 IP
  • 端口: 3306
  • 用户名: remote_user
  • 密码: YourStrongPassword

⚠️ 重要安全警告

  1. 不要暴露 root 账户:永远不要用 root 用户进行远程连接。
  2. 强密码:确保数据库密码足够复杂。
  3. 最小权限原则:只授予应用所需的最小权限(如 SELECT, INSERT, UPDATE),避免 DROP 或 GRANT 权限。
  4. 考虑使用 SSH 隧道:如果担心安全风险,可以不用开放 3306 端口,而是通过 SSH 隧道连接:ssh -L 3307:localhost:3306 user@your-server-ip 然后本地连接 127.0.0.1:3307,这样即使 3306 端口未对外公开,也能安全连接。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 场景一:服务器内部连接(推荐,性能最高)
    • 1. 确认 MySQL 正在运行
    • 2. 获取 Socket 文件路径
    • 3. 代码中的连接方式
  • 场景二:从外部远程连接(开发/运维常用)
    • 第一步:创建允许远程访问的用户(或在现有用户中授权)
    • 第二步:修改 MySQL 配置文件,监听所有网卡
    • 第三步:开放云服务器安全组(关键!)
    • 第四步:测试连接
  • ⚠️ 重要安全警告
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档