|
在Go语言开发中,快速搭建本地数据库环境是项目落地的第一步。Linux系统凭借其稳定性和高性能,成为开发者部署数据库的首选平台。本文以Ubuntu/Debian系为例,介绍如何通过极简步骤完成MySQL和PostgreSQL的极速部署,并演示Go程序如何连接这些数据库。
MySQL部署方案
Ubuntu系统可通过APT包管理器一键安装MySQL。执行命令`sudo apt update \u0026\u0026 sudo apt install mysql-server`,安装完成后运行`sudo mysql_secure_installation`进行安全配置,包括设置root密码、移除匿名账户等。通过`sudo systemctl status mysql`验证服务状态,绿色"active (running)"表示安装成功。对于需要远程访问的场景,需修改配置文件`/etc/mysql/mysql.conf.d/mysqld.cnf`中的`bind-address`为0.0.0.0,并开放3306端口防火墙规则。

2026建议图AI生成,仅供参考 PostgreSQL部署方案
PostgreSQL的安装同样简单,执行`sudo apt install postgresql postgresql-contrib`后服务自动启动。默认创建postgres系统用户作为数据库超级用户,通过`sudo -u postgres psql`进入交互终端。如需修改默认端口或允许远程连接,需编辑`/etc/postgresql/[版本]/main/postgresql.conf`和`pg_hba.conf`文件。使用`CREATE USER`和`CREATE DATABASE`命令创建专用账户和数据库,避免直接使用postgres账户开发。
Go连接MySQL实战
在Go项目中使用MySQL需导入`github.com/go-sql-driver/mysql`驱动。连接字符串格式为`用户名:密码@tcp(主机:端口)/数据库名?charset=utf8mb4\u0026parseTime=True`。示例代码: ```go package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/testdb") if err != nil { panic(err) } defer db.Close() // 执行查询操作... } ``` 建议使用连接池管理数据库连接,通过`db.SetMaxOpenConns()`和`db.SetMaxIdleConns()`控制并发连接数。
Go连接PostgreSQL实战
PostgreSQL驱动推荐`github.com/lib/pq`,连接字符串格式为`postgres://用户名:密码@主机:端口/数据库名?sslmode=disable`。完整示例: ```go package main import ( "database/sql" _ "github.com/lib/pq" ) func main() { db, err := sql.Open("postgres", "postgres://user:password@localhost:5432/mydb") if err != nil { panic(err) } defer db.Close() // 执行事务操作... } ``` PostgreSQL特有的数组类型和JSON操作可通过标准SQL语法直接使用,无需额外驱动支持。
性能优化建议
数据库部署后建议进行基础优化:MySQL可通过`my.cnf`调整`innodb_buffer_pool_size`为系统内存的50-70%;PostgreSQL需修改`shared_buffers`和`work_mem`参数。对于开发环境,可安装`mycli`或`pgcli`增强命令行体验。定期使用`mysqlcheck`或`pg_dump`进行数据备份,重要数据建议开启二进制日志或WAL归档。
常见问题排查
连接失败时,首先检查服务是否运行(`sudo systemctl status mysql/postgresql`),其次验证防火墙设置(`sudo ufw status`)。权限错误可通过数据库命令行重新授权,如MySQL的`GRANT ALL PRIVILEGES ON . TO 'user'@'%'`。Go程序报错时,启用`db.SetConnMaxLifetime(0)`可解决部分连接复用问题,但生产环境建议设置合理超时时间。 (编辑:站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|