1. 前言:准备与目标
说明:本文面向初学者,目标是在国外(香港机房)VPS上部署数据库并建立可靠的备份策略。
小分段:a) 假设你能使用SSH连接VPS;b) 假设VPS运行Ubuntu 20.04/22.04;c) 我将同时给出MySQL/MariaDB与PostgreSQL的步骤。
2. 购买与选择VPS(香港机房)
步骤:a) 选择提供商(如Vultr、Linode、Hetzner部分机房、国内代理能买到香港机房的供应商);b) 选配置—建议2 CPU、4GB内存、40GB SSD起步用于中小型数据库;c) 选择镜像:Ubuntu 22.04 LTS;d) 启用IPv4/IPv6与控制台快照权限。
3. 首次登录与基本系统准备
操作命令:a) 使用SSH密钥登录(ssh -i ~/.ssh/id_rsa root@your_vps_ip);b) 更新系统:apt update && apt upgrade -y;c) 添加普通管理员用户:adduser deployer && usermod -aG sudo deployer;d) 配置SSH仅密钥登录:编辑 /etc/ssh/sshd_config 禁用PasswordAuthentication no,重启 sshd。
4. 防火墙与安全基础
步骤:a) 安装ufw:apt install ufw -y;b) 开放SSH和必要端口:ufw allow OpenSSH;c) 如果数据库需要远程访问开放端口(如3306/5432)待配置完再开放;d) 启用ufw:ufw enable;e) 安装fail2ban以防暴力破解(apt install fail2ban -y)。
5. 安装MySQL/MariaDB(以MariaDB举例)
命令与配置:a) apt install mariadb-server -y;b) 启动并设置自启动:systemctl enable --now mariadb;c) 运行安全脚本:mysql_secure_installation(设置root密码、删除匿名账户、禁止远程root、删除测试库);d) 配置允许远程访问:编辑 /etc/mysql/mariadb.conf.d/50-server.cnf,将 bind-address 改为 0.0.0.0(仅在安全网络或通过防火墙/白名单时使用),重启服务。
6. MySQL用户与权限设置
步骤:a) 登录mysql -u root -p;b) 建库建用户:CREATE DATABASE mydb; CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass123!'; GRANT ALL PRIVILEGES ON mydb.* TO 'app'@'%'; FLUSH PRIVILEGES; c) 如果只允许某IP访问,将'%'替换为具体IP。
7. 安装PostgreSQL(可选)
命令与配置:a) apt install postgresql postgresql-contrib -y;b) 编辑 /etc/postgresql/12/main/postgresql.conf 修改 listen_addresses = '*';c) 编辑 pg_hba.conf 添加 host mydb app 203.0.113.4/32 md5(示例);d) systemctl restart postgresql;e) 使用 sudo -u postgres createuser 和 createdb 创建用户与数据库。
8. 远程连接与客户端配置
说明:a) 如果你在本地连接,请用MySQL客户端或TablePlus/HeidiSQL连接;b) 推荐通过SSH隧道连接:ssh -L 3307:127.0.0.1:3306 -i ~/.ssh/id_rsa user@vps_ip 然后本地连接到127.0.0.1:3307,避免直接开放端口;c) 对Postgres同理使用 -L 5433:127.0.0.1:5432。
9. 基本备份策略概念
要点:a) 定期逻辑备份(mysqldump/pg_dump)适合小库;b) 增量/持续备份(MySQL二进制日志/ PostgreSQL WAL)适合大库或需要点-in-time恢复;c) 快照(VPS控制台)用于快速整体恢复;d) 异地备份一定要有(对象存储或另一台VPS)。
10. 实际:MySQL逻辑备份与自动化
操作示例:a) 单库全备:mysqldump -u root -p mydb | gzip > /root/backups/mydb_$(date +%F).sql.gz;b) 编写脚本 /usr/local/bin/mysql_backup.sh:包含删除7天前备份、产生备份并scp到另一台机器或上传到对象存储(用rclone同步到B2/S3);c) 用cron每天夜间运行:crontab -e -> 0 3 * * * /usr/local/bin/mysql_backup.sh >/dev/null 2>&1。
11. 实际:MySQL增量备份(binary logs)
步骤:a) 在 /etc/mysql/mariadb.conf.d/50-server.cnf 启用 log_bin = mysql-bin 并配置 server-id;b) 重启MariaDB并记录当前binlog位置;c) 定期备份binlog文件(rsync或scp到备份服务器);d) 恢复时先恢复最近的全备,再执行 mysqlbinlog 对应日志恢复到指定时间点。
12. PostgreSQL备份与WAL
示例:a) 全备:sudo -u postgres pg_dumpall -f /root/backups/pg_all_$(date +%F).sql;b) WAL归档:在postgresql.conf设置 archive_mode = on 和 archive_command = 'test ! -f /var/lib/postgresql/archive/%f && cp %p /var/lib/postgresql/archive/%f';c) 定期转存archive目录到异地(rsync/rclone);d) 可以使用pg_basebackup做物理备份与流复制。
13. 快照与异地复制(容灾)
做法:a) 在VPS控制台定期创建快照(每日/每周);b) 配合异地备份(将备份文件放到香港之外的对象存储或另一地区VPS);c) 可配置主从复制:MySQL用CHANGE MASTER TO,Postgres用streaming replication;d) 定期恢复演练,确保快照与备份可用。
14. 监控、日志与日常维护
建议:a) 安装监控(Prometheus + Grafana 或简单的UptimeRobot)监控CPU/IO/慢查询;b) 开启慢查询日志并优化索引(mysqld slow_query_log);c) 定期更新系统与数据库版本,备份前先测试恢复流程;d) 记录所有变更并加密备份传输。
15. 常见问题与注意事项
要点:a) 切勿在未限制IP的情况下开启数据库公网端口;b) 密码与证书管理要规范(使用强密码和TLS/SSL);c) 备份策略要包含全备+增量+快照并存,且有异地冗余;d) 定期做恢复演练。
16. Q1:在香港机房部署会有延迟或法律限制吗?
问:在香港机房部署数据库,会不会有高延迟或合规问题?
答:一般香港机房对亚洲区域访问延迟低,适合面向中国香港、华南、东南亚用户。合规方面注意数据是否涉及中国或其他司法区敏感数据,跨境传输要遵守当地法规(例如个人信息保护法),必要时咨询法律或选用合规托管。
17. Q2:备份上传到第三方对象存储安全吗?
问:把备份上传到S3/B2等第三方对象存储安全吗?
答:可以安全,但请加密备份(使用gpg或服务器端加密),使用最小权限的访问密钥,开启版本控制与多区域复制,并定期轮换密钥与审计访问记录。
18. Q3:小白如何快速验证备份可用性?
问:作为初学者,怎样快速确认备份真的能恢复?
答:最简单的验证方法是在另一台测试VPS上做一次完整恢复:解压备份并导入(mysql -u root -p mydb < backup.sql),或使用快照恢复实例并启动服务,检查关键数据和应用能否正常访问。建立恢复演练日程(例如每月一次)。
来源:小白也能学会的vps 国外 香港机房部署数据库与备份策略