做 Android 的服务器数据库,标准做法就一句话:App 不直接连数据库,中间加一层后端接口(REST 或 GraphQL),后端再连 MySQL 之类的数据库,整套东西跑在云服务器上。 下面把选型、装库、写接口、算成本、避坑一次性讲清楚,照着做能少走不少弯路。
先把架构定下来:三层,别省中间那层
Android 客户端直连数据库安全吗
不安全,而且工程上也没法维护,App 安装包能被反编译,你把数据库账号密码写进代码,等于把家门钥匙贴在门上,就算用 IP 白名单,移动端 IP 天天变,根本没法管。
业内专家指出,数据库连接凭证一旦出现在客户端,后续所有权限设计都失去意义,正确链路是这样:
- Android 端:只认 HTTP/HTTPS 接口地址,拿 JSON
- 后端服务:校验登录态、组装 SQL、控制返回字段
- 数据库:只监听内网,安全组不放行公网 3306
这三层里,中间那层是最容易被新手省掉的,也是最不能省的。
一条请求的完整路径长什么样
用户点“加载订单”,App 用 Retrofit 发 GET 请求到 https://api.你的域名.com/orders?page=1,Nginx 收到后转发给本机 8080 端口的后端进程,后端用连接池取出一个数据库连接,执行 SELECT ... WHERE user_id = ?,把结果序列化成 JSON 返回,整条链路里,数据库从来没跟手机直接对话。
想验证这条路通没通,最简单的办法是先在本机用 curl 打接口:
curl -H "Authorization: Bearer <token>" "https://api.example.com/orders?page=1"
返回 200 且结构正常,说明后端和数据库已经接上了,再去调 Android 端。
Android 服务器数据库怎么搭建:从选型到上线的完整路径
数据库选型:先按数据形状挑
| 类型 | 适合场景 | 上手难度 | 备注 |
|---|---|---|---|
| MySQL | 订单、用户、内容等强关系数据 | 低 | 教程最多,云厂商都有一键镜像 |
| PostgreSQL | 需要复杂查询、JSON 字段、地理位置 | 中 | 功能更全,社区同样活跃 |
| MongoDB | 结构不固定的日志、配置、聊天记录 | 中 | 别拿它当关系库用 |
| 云 BaaS(如 Firebase、Supabase) | 原型验证、小团队没后端人手 | 低 | 后期迁移成本要提前想 |
多数中小团队从 MySQL 起步就够了,生态成熟,出问题搜得到答案。
服务器和网络:先买最小配置
一台 2 核 4G 的云服务器,装 MySQL 8 加一个后端进程,撑住早期日活完全够用,买的时候注意三点:系统选 Ubuntu 22.04 或同类长期支持版本;磁盘选 SSD;安全组只放行 22、80、443,3306 一定不要对公网开放。
装库建表:命令照抄就行
登录服务器后按顺序执行:
sudo apt update sudo apt install -y mysql-server sudo mysql_secure_installation
进入 MySQL 建库建表,账号权限给到最小:
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'app_user'@'127.0.0.1' IDENTIFIED BY '强密码放这里'; GRANT SELECT, INSERT, UPDATE, DELETE ON app_db. TO 'app_user'@'127.0.0.1'; FLUSH PRIVILEGES; CREATE TABLE orders ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, amount DECIMAL(10,2) NOT NULL, status TINYINT NOT NULL DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_user_created (user_id, created_at) );
注意 utf8mb4,不然用户昵称里带 emoji 会直接报错,索引那条也别省,列表页按用户查订单基本都靠它。
后端接口:写最小的那套
Java 栈用 Spring Boot 加 MyBatis-Plus,配置文件里把连接地址写成 0.0.1:3306,连接池初始值给 5 到 10 就行,Node 栈用 Express 加 mysql2,同样走本地回环地址,核心是账号只允许 0.0.1 登录,这样即使密码泄露,外网也连不上。
对外暴露:Nginx 加 HTTPS
后端进程监听 8080,Nginx 反代到 443 并配好证书:
sudo apt install -y nginx certbot python3-certbot-nginx sudo certbot --nginx -d api.example.com
Android 9 以后默认禁止明文 HTTP,不配 HTTPS 接口直接调不通。
Android 开发云数据库和自建服务器数据库哪个好
这是被问得最多的一组对比,判断标准其实就两条:你有没有后端人手,以及数据要不要自己攥着。
| 维度 | 云 BaaS | 自建服务器数据库 |
|---|---|---|
| 上手速度 | 半天能跑通 | 一到三天 |
| 月成本 | 免费额度够用,超了按量计费 | 服务器加数据库实例固定支出 |
| 数据控制权 | 平台侧 | 完全自己掌握 |
| 复杂查询 | 受限明显 | 想怎么写怎么写 |
| 迁移成本 | 后期越高 | 一开始就掌握主动权 |
原型阶段用云服务省时间没问题,但只要项目打算长期做、数据涉及用户隐私或交易,自建这套更稳妥,相当一部分团队是先上云 BaaS,做到一定规模再迁,迁移那阵子会比较难受。
Android 服务器数据库多少钱一个月
成本可以拆成三块,按小团队规模粗算:
- 云服务器:入门配置每月几十元到一百多元区间
- 数据库:用同机自建基本不额外花钱,用云数据库实例则要再添一笔
- 带宽与流量:按量或按固定带宽,图片多的项目这块会明显上升
- 其他:域名、证书、对象存储,加起来通常是零头
想压低成本有两个实际动作:静态资源(头像、图片)走对象存储加 CDN,别塞数据库;数据库定期清理软删除数据,磁盘不会无限涨,具体报价各厂商活动差异较大,以控制台实时价格为准。
地域选择:安卓项目数据库部署在简米云还是酷番云
国内项目优先选目标用户集中的地域,用户主要在华东,就选上海或杭州节点,跨地域访问的延迟在体感上是能感觉到的,华北选北京,华南选广州或深圳。
两个现实约束:一是域名备案,服务器在大陆境内必须走 ICP 备案,没备案接口域名解析会被拦;二是数据合规,涉及个人信息的数据存储位置要跟隐私政策写的一致,海外发行的话,节点放到新加坡或法兰克福更合适。
上线之后:三件保命的事
备份,写个定时任务,每天凌晨导出,保留最近七天:
mysqldump -u root -p app_db | gzip > /backup/app_db_$(date +%F).sql.gz
备份文件务必存到另一台机器或对象存储,跟数据库放同一块盘等于没备份。
慢查询,开启慢查询日志,阈值设 1 秒,每周翻一次,发现慢 SQL 用 EXPLAIN 看执行计划,重点看有没有走全表扫描。
监控,至少盯三个指标:数据库连接数、磁盘使用率、接口平均响应时间,连接数打满的表现是整个 App 突然全线超时,提前设告警比事后救火便宜太多。
Q&A:Android 服务器数据库怎么做才不踩坑
小团队没有专职后端,android服务器数据库怎么做最快
用 Spring Boot 单体加 MySQL 单机,一台云服务器全搞定,接口先只做增删改查,别急着上微服务和分库分表,等真有性能瓶颈再拆,过早拆分只会拖慢进度。
App 用户量涨上来之后,数据库要改什么
先加索引和缓存,再考虑读写分离,缓存用 Redis 挡掉高频读请求,多数应用能做到这一步就够用了,据中国信息通信研究院的相关研究,多数性能问题出在慢查询和连接管理上,而不是数据库本身撑不住。
数据库数据被别人拖走,通常是怎么发生的
最常见的是 3306 端口对公网开放加强密码,被扫描到后爆破登录,其次是备份文件放在 Web 目录下能被直接下载,把端口收回内网、账号限定回环地址、备份文件移出网站根目录,这三步能挡掉绝大多数情况。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790393.html


