加油
努力

如何在一台服务器上部署两个不同的数据库实例?

在一台服务器上部署两个不同的数据库实例是常见需求,以下是详细的操作步骤和注意事项,以 MySQL 和 PostgreSQL 为例:


✅ 一、通用原则

  1. 使用不同端口:避免端口冲突(如 MySQL 默认 3306,PostgreSQL 默认 5432)。
  2. 独立的数据目录:每个实例有自己的数据存储路径。
  3. 独立的配置文件:分别配置参数。
  4. 系统资源隔离:合理分配内存、CPU,避免互相影响。

🛠️ 二、以 MySQL 部署两个实例为例

方法一:多实例运行(同一版本)

  1. 准备目录结构

    sudo mkdir -p /var/lib/mysql-instance2
    sudo chown mysql:mysql /var/lib/mysql-instance2
  2. 初始化第二个实例

    mysqld --initialize-insecure --user=mysql 
        --basedir=/usr 
        --datadir=/var/lib/mysql-instance2
  3. 创建配置文件 /etc/mysql/conf.d/instance2.cnf

    [mysqld@instance2]
    port = 3307
    socket = /var/run/mysqld/mysqld-instance2.sock
    pid-file = /var/run/mysqld/mysqld-instance2.pid
    datadir = /var/lib/mysql-instance2
    log-error = /var/log/mysql/error-instance2.log
    server-id = 2
  4. 启动服务(使用 systemd 模板)

创建服务文件 /etc/systemd/system/mysql@.service

[Unit]
Description=MySQL Instance %i
After=network.target

[Service]
User=mysql
ExecStart=/usr/sbin/mysqld --defaults-group-suffix=@%i
Restart=always

[Install]
WantedBy=multi-user.target

启用并启动:

sudo systemctl enable mysql@instance2
sudo systemctl start mysql@instance2
  1. 连接实例
    mysql -u root -S /var/run/mysqld/mysqld-instance2.sock -P 3307

🛠️ 三、以 PostgreSQL 部署两个实例

使用 initdb 创建多个集群

  1. 创建第二个数据目录

    sudo mkdir /var/lib/postgresql/15/main2
    sudo chown postgres:postgres /var/lib/postgresql/15/main2
  2. 初始化数据库集群

    sudo -u postgres initdb -D /var/lib/postgresql/15/main2
  3. 修改配置 postgresql.conf

    port = 5433
    data_directory = '/var/lib/postgresql/15/main2'
    log_file_mode = 0644
  4. 启动第二个实例(使用自定义服务)

创建服务 /etc/systemd/system/postgresql-second.service

[Unit]
Description=PostgreSQL second instance
After=network.target

[Service]
User=postgres
ExecStart=/usr/lib/postgresql/15/bin/postgres -D /var/lib/postgresql/15/main2
Restart=always

[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl enable postgresql-second
sudo systemctl start postgresql-second

🔄 四、混合部署(MySQL + PostgreSQL)

如果你要部署不同类型的数据库(如 MySQL + PostgreSQL),更简单:

数据库 端口 用户 数据目录
MySQL 3306 mysql /var/lib/mysql
PostgreSQL 5432 postgres /var/lib/postgresql

✅ 直接安装两个数据库系统即可,它们默认使用不同端口和用户,互不干扰。

安装命令(Ubuntu 示例):

# 安装 MySQL
sudo apt install mysql-server

# 安装 PostgreSQL
sudo apt install postgresql postgresql-contrib

🔐 五、安全与管理建议

  1. 防火墙设置

    sudo ufw allow 3306/tcp    # MySQL
    sudo ufw allow 5432/tcp    # PostgreSQL
  2. 权限控制

    • 为每个数据库设置强密码。
    • 避免使用 root 远程登录。
  3. 监控资源使用

    • 使用 htop, iotop, nmon 监控 CPU、内存、磁盘 I/O。
  4. 备份策略

    • 分别对两个实例做定期备份。
    • 使用 mysqldumppg_dump

✅ 总结

方式 是否可行 推荐场景
同类型多实例(如两个 MySQL) 开发测试、读写分离
不同类型数据库(MySQL + PG) ✅✅✅ 应用需要多种数据库支持
Docker 隔离部署 ✅✅✅✅ 最佳实践,推荐生产环境

💡 进阶建议:使用 Docker 可更轻松地隔离多个数据库实例:

docker run --name mysql-db -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -d mysql:8.0
docker run --name postgres-db -e POSTGRES_PASSWORD=pass -p 5432:5432 -d postgres:15

如有具体数据库类型或操作系统,可提供更详细的部署方案。

云服务器