如何在云主机上搭建和管理数据库?

HCRM技术_小炮 云主机 2026-06-29 3 0

在云主机上搭建数据库,其实没你想象的那么难

前阵子有个刚入行的朋友问我:“我想自己搞个小项目,数据库到底该放在哪?用云主机自己做吧,怕搞不定;用云数据库吧,又觉得贵。” 这个问题其实问到了很多人心里的坎儿上,坦白讲,我第一次接触云主机的时候也是一头雾水——什么VPC、安全组、SSH密钥,光是装个MySQL就折腾了两天,但后来发现,只要理清思路,在云主机上搭建数据库不仅省钱,还能让你对整个数据链路有更深的理解。

本文不会堆砌晦涩的术语,我会像聊天一样,把从选购云主机到数据库上线的完整流程拆开揉碎了讲给你听,不管你是前端想学全栈,还是个人开发者想省点银子,这篇文章都应该能帮到你。

第一步:选一台合适的云主机

很多人第一步就卡住了:“内存选多大?CPU要几核?系统用CentOS还是Ubuntu?” 我的建议是:先想清楚你的数据库要服务多少人

个人练手 / 小型博客:1核2GB的配置足够,系统推荐Ubuntu 20.04或22.04,MySQL或MariaDB在这个配置下跑得很顺畅,但注意不要同时开太多应用,否则内存容易爆。

小团队内部工具 / 日活几百的API:2核4GB起步,硬盘建议使用SSD云盘,容量50GB左右,如果预算允许,选“通用型”或“计算型”实例,别贪便宜用“共享型”,因为邻居一闹腾你的数据库IO就惨了。

生产环境 / 用户量几千以上:这时候我会毫不犹豫地推荐4核8GB以上,并且一定要看云厂商的“IOPS”和“吞吐量”指标,数据库是IO密集型应用,内存大能缓存更多数据,远比CPU核心数重要。

还有一个容易被忽略的点:地域选择,如果你的用户主要在国内,就选国内的机房;如果有海外用户,考虑香港或新加坡,别为了便宜选个离用户几千公里的机房,延迟会让你哭。

第二步:连接云主机并做好基本安全

拿到云主机IP和密码/密钥后,别急着装数据库,先做两件事:

1、禁止root直接SSH登录:创建普通用户,赋予sudo权限,然后用密钥登录,这一步能防住99%的暴力破解脚本。

2、更新系统并安装防火墙

   sudo apt update && sudo apt upgrade -y
   sudo ufw allow 22/tcp
   sudo ufw enable

只开放22端口,其他端口后面再逐个开放。

安全组(云厂商控制台里的“防火墙”)也别忘了设置,很多新手在云主机内部配了防火墙,但忘了在控制台放行端口,结果自己连不上,抓耳挠腮半天,正确的做法是:控制台安全组只放行必要端口(22、数据库端口等),且源IP尽量限定你的办公网络

第三步:安装数据库管理系统

这里以最常用的MySQL为例,但MariaDB、PostgreSQL步骤大同小异,别用apt直接装默认源里的版本——多半是老古董,建议添加官方仓库。

安装MySQL 8.0

下载官方APT仓库配置
wget https://dev.mysql.com/get/mysql-apt-config_0.8.26-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.26-1_all.deb
选择MySQL 8.0后确认
sudo apt update
sudo apt install mysql-server -y

安装过程中会提示设置root密码,务必设一个高强度的密码,安装完成后运行安全脚本:

sudo mysql_secure_installation

它会引导你删除匿名用户、禁止root远程登录、删除测试数据库等,全部选“Y”就行。

PostgreSQL 安装(另一种常见选择)

如果你需要更高级的查询优化或地理空间数据,PostgreSQL更适合:

sudo apt install postgresql postgresql-contrib -y
sudo systemctl start postgresql
sudo systemctl enable postgresql

默认用户是postgres,切换到该用户后可以设置密码:

sudo -u postgres psql
\password postgres

第四步:配置让数据库能远程连接(如果必要)

默认安装的MySQL只监听127.0.0.1,这意味着你只能在云主机内部连接,如果你想用本地的Navicat、DBeaver等客户端管理数据库,需要修改配置。

编辑MySQL配置文件(通常是/etc/mysql/mysql.conf.d/mysqld.cnf):

bind-address = 0.0.0.0

重启MySQL:

sudo systemctl restart mysql

然后登录MySQL,为远程访问创建用户:

CREATE USER 'youruser'@'%' IDENTIFIED BY '你的强密码';
GRANT ALL PRIVILEGES ON *.* TO 'youruser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

—千万注意安全! 让数据库暴露在公网是非常危险的,我建议你只对特定IP开放,比如'youruser'@'203.0.113.123',而不是用通配符%,如果实在需要从动态IP访问,可以考虑搭建一个SSH隧道或使用云厂商的内网连接。

防火墙也要放行3306端口(MySQL默认)或5432(PostgreSQL默认):

sudo ufw allow from 你的客户端IP to any port 3306

第五步:备份与监控——别等出事了才想

“备份”这两个字,我在自己吃亏之前根本没当回事,直到有一次误操作删了一张业务表,花了整整一天恢复,才意识到备份就是数据库的裤腰带——不系可能不觉得,但一松就全完了。

最简单的备份方案(适合个人项目)

写一个crontab脚本,每天凌晨自动备份:

#!/bin/bash
mysqldump -u root -p你的密码 --all-databases > /backup/db_$(date +%Y%m%d).sql
保留最近7天的备份
find /backup -name "*.sql" -mtime +7 -delete

然后把备份文件同步到对象存储(比如阿里云OSS、腾讯云COS)或另一台云主机的挂载卷上,别把备份和数据库放同一台机器,否则机器挂了备份也跟着没了。

监控建议

- 安装htop观察内存和CPU

- 安装mysqltuner定期运行,它会给出优化建议

- 在云厂商控制台设置“云监控”,当磁盘使用率超过80%或连接数超过上限时发短信报警

第六步:性能调优——榨干云主机的每一分钱

很多人在云主机上装完数据库就不管了,默认配置其实是针对普通桌面环境的,对于云主机来说并不理想,打开/etc/mysql/mysql.conf.d/mysqld.cnf,手动调整几个参数:

innodb_buffer_pool_size:设为物理内存的60%~70%,比如2GB内存就设1.4G,这个参数对MySQL性能影响最大。

max_connections:默认151,如果你的应用只有一个后端,可以设小一点避免内存浪费;如果有几百个并发,适当调大。

query_cache_type:MySQL 8.0已废弃,不用管了。

slow_query_log:开启慢查询日志,帮你找出拖慢性能的SQL。

调整完记得重启生效,如果你用的是PostgreSQL,shared_bufferswork_memeffective_cache_size是核心参数,原理类似。

一点个人感悟

我刚接触云主机和数据库的时候,总是希望找到一篇“完美教程”,照着敲一遍就能搞定一切,但后来发现,真正的能力不是看会多少命令,而是遇到报错时知道去哪里查、大概是什么方向的问题,Can’t connect to MySQL server on ‘ip’ (10061)”——先看看服务启动了没,再看看防火墙和安全组有没有放行,最后看看bind-address对不对,按这个思路排查,90%的坑都能自己填上。

如果你只是做一个日访问量几百的小项目,真的不用上昂贵的云数据库,自己在云主机上搭好,配合简单的备份和监控,一年省下的钱够你多发几杯奶茶,如果有一天你的业务量暴涨到需要自动扩容、读写分离、跨可用区高可用,那时再考虑迁移到托管数据库也不迟,毕竟,先把事情做出来,远比一开始就追求完美架构重要得多

好了,希望这篇“从零开始的云主机数据库搭建”能让你少走几步弯路,如果你在实践过程中遇到什么奇怪的问题,欢迎评论区留言,大家一起踩坑一起成长。

文章摘自:https://idc.huochengrm.cn/zj/27020.html

评论