VPS 数据库保姆级教程
本教程假设你已经拥有一台 VPS(例如使用 Ubuntu 22.04 LTS 系统),并且可以通过 SSH 连接到它。

第一部分:准备工作与连接
在开始之前,请确保你的 VPS 已经准备就绪。
- 获取 VPS 信息:你的 VPS 的公网 IP 地址、SSH 用户名(通常是
root或ubuntu)和密码/SSH 密钥。 - 连接 VPS:打开你的终端(Windows 用户可以使用 PuTTY 或 WSL),使用 SSH 命令连接。
# 替换 YOUR_USER 和 YOUR_VPS_IP ssh YOUR_USER@YOUR_VPS_IP
- 更新系统:连接成功后,首先更新系统软件包列表,这是一个好习惯。
sudo apt update && sudo apt upgrade -y
第二部分:安装数据库
我们将分别介绍如何安装 MySQL 和 PostgreSQL,你可以根据自己的需求选择其一或都安装。
方案 A:安装 MySQL
MySQL 是目前最流行的关系型数据库之一,广泛应用于 Web 应用。
-
添加 MySQL 官方 APT 仓库 为了安装最新最稳定的版本,我们推荐使用官方仓库。
(图片来源网络,侵删)# 下载并添加 MySQL 官方仓库密钥 sudo apt-get install -y wget wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
在弹出的配置界面中,确保选择了 "OK" 并保存,这会设置默认的 MySQL 版本(如 MySQL 8.0)。
-
更新包列表并安装 MySQL 服务器
sudo apt update sudo apt install -y mysql-server
安装过程会自动启动 MySQL 服务。
-
安全配置向导 安装完成后,运行 MySQL 提供的安全脚本非常重要,它会帮你设置 root 密码、移除匿名用户、禁止远程 root 登录等。
(图片来源网络,侵删)sudo mysql_secure_installation
你会看到一系列交互式提示:
Enter password for root user: 直接按回车,因为 root 用户还没有密码。Switch to unix_socket authentication?: 输n(No),我们希望使用密码登录。Set root password?: 输y(Yes),然后设置一个强密码并确认。Remove anonymous users?: 输y(Yes)。Disallow root login remotely?: 输y(Yes),这是安全最佳实践。Remove test database and access to it?: 输y(Yes)。Reload privilege tables now?: 输y(Yes)。
方案 B:安装 PostgreSQL
PostgreSQL 是功能非常强大的开源对象关系型数据库系统,以其稳定性和标准合规性著称。
-
添加 PostgreSQL 官方 APT 仓库
# 安装必要的依赖 sudo apt install -y wget ca-certificates # 下载并添加 PostgreSQL 官方仓库密钥 wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - # 添加仓库源 echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
-
更新包列表并安装 PostgreSQL 服务器
sudo apt update sudo apt install -y postgresql-15
(注意:
postgresql-15是版本号,你可以替换为你想安装的版本,如14或16),安装会自动启动服务。 -
设置 PostgreSQL 用户和密码 PostgreSQL 的默认管理用户是
postgres,它与系统用户postgres相关联。- 切换到
postgres用户:sudo -i -u postgres
- 进入 PostgreSQL 命令行:
psql
- 设置密码:
ALTER USER postgres WITH PASSWORD 'your_strong_password'; \q -- 退出 psql
- 返回到你的普通用户:
exit
- 切换到
第三部分:数据库基础操作
MySQL 操作
-
登录 MySQL
# 使用你刚才设置的 root 密码登录 mysql -u root -p
-
常用 SQL 命令
- 查看所有数据库:
SHOW DATABASES;
- 创建新数据库(建议指定字符集和排序规则):
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 删除数据库:
DROP DATABASE myapp_db;
- 选择要操作的数据库:
USE myapp_db;
- 创建新用户并授权(最佳实践:不要直接使用 root 用户给应用):
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'another_strong_password'; GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost'; FLUSH PRIVILEGES; -- 使授权立即生效
- 退出:
EXIT;
- 查看所有数据库:
PostgreSQL 操作
-
登录 PostgreSQL
# 使用你刚才设置的 postgres 用户密码登录 psql -U postgres -W
(或者使用
sudo -u postgres psql登录,此时无需密码) -
常用 SQL 命令
- 查看所有数据库:
\l
- 创建新数据库:
CREATE DATABASE myapp_db;
- 删除数据库:
DROP DATABASE myapp_db;
- 连接到新数据库:
\c myapp_db
- 创建新用户并授权:
CREATE USER myapp_user WITH PASSWORD 'another_strong_password'; GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;
- 退出:
\q
- 查看所有数据库:
第四部分:远程访问配置(重要!)
出于安全考虑,数据库默认只允许本地连接,如果你的应用部署在另一台服务器上,你需要允许远程连接。
⚠️ 安全警告: 直接开放数据库到公网有极高的安全风险。强烈建议:
- 为数据库用户设置一个极其复杂的密码。
- 在 VPS 防火墙中只允许来自你应用服务器的 IP 地址访问数据库端口。
- 如果可能,使用 VPN 或私有网络连接你的应用和数据库服务器。
配置 MySQL 允许远程访问
- 编辑 MySQL 配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- 注释掉 bind-address:找到
bind-address = 127.0.0.1这一行,在前面加上 将其注释掉。# bind-address = 127.0.0.1
或者,如果你想指定一个 IP(比如你的 VPS 的内网 IP),可以写成
bind-address = YOUR_VPS_PRIVATE_IP。 - 重启 MySQL 服务
sudo systemctl restart mysql
- 在防火墙中开放端口
sudo ufw allow 3306/tcp
配置 PostgreSQL 允许远程访问
- 编辑 PostgreSQL 配置文件
sudo nano /etc/postgresql/15/main/postgresql.conf
(注意:
15是你的版本号) - 修改监听地址:找到
listen_addresses行,将其修改为 ,表示监听所有网络接口。listen_addresses = '*'
- 编辑客户端认证配置文件
sudo nano /etc/postgresql/15/main/pg_hba.conf
这文件控制谁可以连接,默认只有本地连接,要允许远程用户从特定 IP 连接,可以添加一行:
# TYPE DATABASE USER ADDRESS METHOD host myapp_db myapp_user 192.168.1.100/32 md5这表示允许 IP 为
168.1.100的机器使用myapp_user用户和md5加密的密码连接到myapp_db数据库。请务必将168.1.100替换为你的应用服务器的真实 IP! - 重启 PostgreSQL 服务
sudo systemctl restart postgresql
- 在防火墙中开放端口
sudo ufw allow 5432/tcp
第五部分:日常管理与维护
服务管理
-
启动/停止/重启服务
# MySQL sudo systemctl start mysql sudo systemctl stop mysql sudo systemctl restart mysql # PostgreSQL sudo systemctl start postgresql sudo systemctl stop postgresql sudo systemctl restart postgresql
-
设置开机自启
sudo systemctl enable mysql sudo systemctl enable postgresql
-
查看服务状态
sudo systemctl status mysql
数据备份(至关重要!)
永远不要忘记备份!
-
MySQL 备份 使用
mysqldump工具。# 备份单个数据库 mysqldump -u root -p myapp_db > myapp_db_backup.sql # 备份所有数据库 mysqldump -u root -p --all-databases > all_databases_backup.sql
备份文件会保存在当前目录下。
-
PostgreSQL 备份 使用
pg_dump工具。# 备份单个数据库 pg_dump -U postgres myapp_db > myapp_db_backup.sql # 使用自定义格式备份(更高效,推荐) pg_dump -U postgres -Fc myapp_db > myapp_db_backup.dump
-
自动化备份(使用 Cron) 你可以设置一个定时任务,每天自动备份。
# 编辑 crontab crontab -e
添加以下行,表示每天凌晨 3 点备份 MySQL 数据库:
0 3 * * * /usr/bin/mysqldump -u root -p'YOUR_ROOT_PASSWORD' myapp_db > /path/to/your/backups/myapp_db_$(date +\%Y\%m\%d).sql注意:将
YOUR_ROOT_PASSWORD替换为你的真实密码,/path/to/your/backups/替换为你有权限写入的目录。
性能监控
- 使用
top或htop:查看mysqld或postgres进程的 CPU 和内存占用。htop
- 数据库内置命令:
- MySQL:
SHOW STATUS;或SHOW PROCESSLIST; - PostgreSQL: 在
psql中使用\d+查看表信息,或查询pg_stat_activity视图。
- MySQL:
第六部分:卸载数据库
如果不再需要,可以彻底卸载。
# MySQL sudo systemctl stop mysql sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* sudo rm -rf /etc/mysql /var/lib/mysql sudo apt autoremove # PostgreSQL sudo systemctl stop postgresql sudo apt-get purge postgresql-15 postgresql-client-15 postgresql-contrib-15 sudo rm -rf /etc/postgresql/15 /var/lib/postgresql/15 sudo apt autoremove
总结与最佳实践
- 安全第一:永远不要用
root用户连接生产数据库,为每个应用创建独立的、权限受限的数据库用户。 - 防火墙是朋友:不要随意开放数据库端口,使用 VPS 防火墙(如 UFW)严格限制访问来源 IP。
- 备份是生命线:制定并执行可靠的备份策略,并定期测试恢复流程。
- 定期更新:保持你的数据库软件版本最新,以获取安全补丁和性能改进。
- 监控日志:定期查看数据库错误日志,可以提前发现问题。
这份教程涵盖了 VPS 数据库管理的核心内容,希望对你有帮助!如果你在某个步骤遇到问题,可以查阅对应数据库的官方文档或在社区寻求帮助。
