CentOS 上用 Golang 连接 MySQL 与 PostgreSQL:安装、示例与排查

小岛来信
小岛来信
发布时间:2026-08-23 | 119人浏览过
原创

前言

在 CentOS 上用 Golang 连接数据库,代码本身往往只有十几行,真正决定能否一次连通的,是 Go 环境、驱动安装和连接串参数是否匹配。下面按实际操作顺序,分别演示 MySQL 与 PostgreSQL 的接入方式,并把默认端口、SSL 设置和常见故障排查点一并整理出来,方便你快速落地和定位问题。

在 CentOS 上让 Go 程序连上数据库,核心并不复杂,真正容易出错的通常是运行环境、驱动依赖和连接串细节。本文按“先装 Go、再装驱动、最后分别连接 MySQL 和 PostgreSQL”的顺序整理步骤,并补上连接成功后的验证方法与排查重点,方便你快速判断问题究竟出在代码、配置还是系统网络层。

先在 CentOS 上准备 Go 环境

如果系统里还没有安装 Golang,可以先下载并解压到 /usr/local,然后把可执行文件目录加入环境变量。原文使用的版本是 go1.16.5,版本号可以按需调整,但不建议使用过旧版本。

wget https://golang.org/dl/go1.16.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.16.5.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc

安装完成后,先执行 go version 确认 Go 已经可以正常使用,再继续后面的数据库连接步骤。

安装 MySQL 和 PostgreSQL 驱动

Go 通过标准库 database/sql 统一操作数据库,但具体连接哪一种数据库,还需要安装对应驱动。这里分别使用:

Go 连接 MySQL 与 PostgreSQL 的依赖和执行流程图
CentOS 上 Go 连接数据库的最小流程用一张流程信息图梳理 CentOS 上从安装 Go 到驱动获取,再到运行验证的最小闭环。
  • MySQL:github.com/go-sql-driver/mysql
  • PostgreSQL:github.com/lib/pq

直接执行下面的命令即可安装:

go get -u github.com/go-sql-driver/mysql
go get -u github.com/lib/pq

如果当前机器网络环境受限,go get 可能会失败,这时需要额外处理依赖下载问题。不过就本文流程而言,重点仍然是先确认驱动名称和安装命令没有写错。

Golang 连接 MySQL:最小示例与连接串说明

准备一个 main.go 文件,先看 MySQL 版本的示例代码。它使用 sql.Open 创建连接句柄,再通过 db.Ping() 主动检查数据库是否真的可达。

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    dsn := "username:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }
    defer db.Close()
    err = db.Ping()
    if err != nil {
        panic(err)
    }
    fmt.Println("Connected to MySQL!")
}

MySQL DSN 里需要替换哪些字段

这段连接串里的几个字段都需要按实际环境修改:

  • username:数据库用户名
  • password:数据库密码
  • localhost:数据库主机地址
  • 3306:MySQL 默认端口
  • dbname:目标数据库名

此外,charset=utf8mb4、parseTime=True、loc=Local 这些参数通常也会保留下来,尤其是在处理中文和时间字段时更实用。

Golang 连接 PostgreSQL:示例代码与 SSL 提醒

如果目标数据库是 PostgreSQL,代码结构基本一致,主要差别在驱动导入路径和连接字符串格式。

MySQL 与 PostgreSQL 连接串关键字段对比图
两类数据库连接串该怎么改把两种数据库连接串的格式、默认端口和 SSL 差异放在一起,便于改配置时快速核对。
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

func main() {
    connStr := "user=username dbname=dbname password=password sslmode=disable"
    db, err := sql.Open("postgres", connStr)
    if err != nil {
        panic(err)
    }
    defer db.Close()
    err = db.Ping()
    if err != nil {
        panic(err)
    }
    fmt.Println("Connected to PostgreSQL!")
}

PostgreSQL 连接串的关键项

和 MySQL 一样,下面这些字段都要换成你的真实配置:

  • user=username:数据库用户名
  • dbname=dbname:数据库名称
  • password=password:数据库密码
  • 端口默认是 5432

需要额外注意的是 sslmode=disable。这个设置适合开发环境快速验证连接,但如果是生产环境,通常应改用 require 或 verify-full,避免直接关闭 SSL 校验。

运行程序并确认连接是否成功

完成代码后,进入 main.go 所在目录,直接执行:

go run main.go

如果连接的是 MySQL,成功时会看到:

Connected to MySQL!

如果连接的是 PostgreSQL,成功时会看到:

Connected to PostgreSQL!

看到这类输出,就说明 Go 程序已经通过驱动成功连上目标数据库。

连不上时优先检查这几项

从实际排查经验看,数据库连接失败并不一定是 Go 代码本身的问题。只要驱动安装正确、连接串填写无误,更多时候问题出在系统环境或服务配置上。

Go 连接数据库失败时的排查顺序图
连接失败时先查哪里连接失败时,优先从服务状态、端口、防火墙和连接参数四个方向依次排查。
  • 确认数据库服务已经启动
  • 确认监听端口是否正确开放
  • 确认防火墙没有拦截对应端口
  • 确认主机地址、用户名、密码和数据库名填写正确

如果你的程序在 sql.Open 阶段没有报错,但 db.Ping() 失败,通常就该优先从网络连通性、权限和数据库服务状态这几个方向入手。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表