VPS 数据库保姆级教程

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

vps 数据库 教程
(图片来源网络,侵删)

第一部分:准备工作与连接

在开始之前,请确保你的 VPS 已经准备就绪。

  1. 获取 VPS 信息:你的 VPS 的公网 IP 地址、SSH 用户名(通常是 rootubuntu)和密码/SSH 密钥。
  2. 连接 VPS:打开你的终端(Windows 用户可以使用 PuTTY 或 WSL),使用 SSH 命令连接。
    # 替换 YOUR_USER 和 YOUR_VPS_IP
    ssh YOUR_USER@YOUR_VPS_IP
  3. 更新系统:连接成功后,首先更新系统软件包列表,这是一个好习惯。
    sudo apt update && sudo apt upgrade -y

第二部分:安装数据库

我们将分别介绍如何安装 MySQL 和 PostgreSQL,你可以根据自己的需求选择其一或都安装。

方案 A:安装 MySQL

MySQL 是目前最流行的关系型数据库之一,广泛应用于 Web 应用。

  1. 添加 MySQL 官方 APT 仓库 为了安装最新最稳定的版本,我们推荐使用官方仓库。

    vps 数据库 教程
    (图片来源网络,侵删)
    # 下载并添加 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)。

  2. 更新包列表并安装 MySQL 服务器

    sudo apt update
    sudo apt install -y mysql-server

    安装过程会自动启动 MySQL 服务。

  3. 安全配置向导 安装完成后,运行 MySQL 提供的安全脚本非常重要,它会帮你设置 root 密码、移除匿名用户、禁止远程 root 登录等。

    vps 数据库 教程
    (图片来源网络,侵删)
    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 是功能非常强大的开源对象关系型数据库系统,以其稳定性和标准合规性著称。

  1. 添加 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
  2. 更新包列表并安装 PostgreSQL 服务器

    sudo apt update
    sudo apt install -y postgresql-15

    (注意:postgresql-15 是版本号,你可以替换为你想安装的版本,如 1416),安装会自动启动服务。

  3. 设置 PostgreSQL 用户和密码 PostgreSQL 的默认管理用户是 postgres,它与系统用户 postgres 相关联。

    • 切换到 postgres 用户
      sudo -i -u postgres
    • 进入 PostgreSQL 命令行
      psql
    • 设置密码
      ALTER USER postgres WITH PASSWORD 'your_strong_password';
      \q  -- 退出 psql
    • 返回到你的普通用户
      exit

第三部分:数据库基础操作

MySQL 操作

  1. 登录 MySQL

    # 使用你刚才设置的 root 密码登录
    mysql -u root -p
  2. 常用 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 操作

  1. 登录 PostgreSQL

    # 使用你刚才设置的 postgres 用户密码登录
    psql -U postgres -W

    (或者使用 sudo -u postgres psql 登录,此时无需密码)

  2. 常用 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

第四部分:远程访问配置(重要!)

出于安全考虑,数据库默认只允许本地连接,如果你的应用部署在另一台服务器上,你需要允许远程连接。

⚠️ 安全警告: 直接开放数据库到公网有极高的安全风险。强烈建议

  1. 为数据库用户设置一个极其复杂的密码。
  2. 在 VPS 防火墙中只允许来自你应用服务器的 IP 地址访问数据库端口。
  3. 如果可能,使用 VPN 或私有网络连接你的应用和数据库服务器。

配置 MySQL 允许远程访问

  1. 编辑 MySQL 配置文件
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 注释掉 bind-address:找到 bind-address = 127.0.0.1 这一行,在前面加上 将其注释掉。
    # bind-address = 127.0.0.1

    或者,如果你想指定一个 IP(比如你的 VPS 的内网 IP),可以写成 bind-address = YOUR_VPS_PRIVATE_IP

  3. 重启 MySQL 服务
    sudo systemctl restart mysql
  4. 在防火墙中开放端口
    sudo ufw allow 3306/tcp

配置 PostgreSQL 允许远程访问

  1. 编辑 PostgreSQL 配置文件
    sudo nano /etc/postgresql/15/main/postgresql.conf

    (注意:15 是你的版本号)

  2. 修改监听地址:找到 listen_addresses 行,将其修改为 ,表示监听所有网络接口。
    listen_addresses = '*' 
  3. 编辑客户端认证配置文件
    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!

  4. 重启 PostgreSQL 服务
    sudo systemctl restart postgresql
  5. 在防火墙中开放端口
    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/ 替换为你有权限写入的目录。

性能监控

  • 使用 tophtop:查看 mysqldpostgres 进程的 CPU 和内存占用。
    htop
  • 数据库内置命令
    • MySQL: SHOW STATUS;SHOW PROCESSLIST;
    • PostgreSQL: 在 psql 中使用 \d+ 查看表信息,或查询 pg_stat_activity 视图。

第六部分:卸载数据库

如果不再需要,可以彻底卸载。

# 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

总结与最佳实践

  1. 安全第一:永远不要用 root 用户连接生产数据库,为每个应用创建独立的、权限受限的数据库用户。
  2. 防火墙是朋友:不要随意开放数据库端口,使用 VPS 防火墙(如 UFW)严格限制访问来源 IP。
  3. 备份是生命线:制定并执行可靠的备份策略,并定期测试恢复流程。
  4. 定期更新:保持你的数据库软件版本最新,以获取安全补丁和性能改进。
  5. 监控日志:定期查看数据库错误日志,可以提前发现问题。

这份教程涵盖了 VPS 数据库管理的核心内容,希望对你有帮助!如果你在某个步骤遇到问题,可以查阅对应数据库的官方文档或在社区寻求帮助。