在一台服务器上部署两个不同的数据库实例是常见需求,以下是详细的操作步骤和注意事项,以 MySQL 和 PostgreSQL 为例:
✅ 一、通用原则
- 使用不同端口:避免端口冲突(如 MySQL 默认 3306,PostgreSQL 默认 5432)。
- 独立的数据目录:每个实例有自己的数据存储路径。
- 独立的配置文件:分别配置参数。
- 系统资源隔离:合理分配内存、CPU,避免互相影响。
🛠️ 二、以 MySQL 部署两个实例为例
方法一:多实例运行(同一版本)
-
准备目录结构
sudo mkdir -p /var/lib/mysql-instance2 sudo chown mysql:mysql /var/lib/mysql-instance2 -
初始化第二个实例
mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir=/var/lib/mysql-instance2 -
创建配置文件
/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 -
启动服务(使用 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
- 连接实例
mysql -u root -S /var/run/mysqld/mysqld-instance2.sock -P 3307
🛠️ 三、以 PostgreSQL 部署两个实例
使用 initdb 创建多个集群
-
创建第二个数据目录
sudo mkdir /var/lib/postgresql/15/main2 sudo chown postgres:postgres /var/lib/postgresql/15/main2 -
初始化数据库集群
sudo -u postgres initdb -D /var/lib/postgresql/15/main2 -
修改配置
postgresql.confport = 5433 data_directory = '/var/lib/postgresql/15/main2' log_file_mode = 0644 -
启动第二个实例(使用自定义服务)
创建服务 /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
🔐 五、安全与管理建议
-
防火墙设置:
sudo ufw allow 3306/tcp # MySQL sudo ufw allow 5432/tcp # PostgreSQL -
权限控制:
- 为每个数据库设置强密码。
- 避免使用 root 远程登录。
-
监控资源使用:
- 使用
htop,iotop,nmon监控 CPU、内存、磁盘 I/O。
- 使用
-
备份策略:
- 分别对两个实例做定期备份。
- 使用
mysqldump和pg_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
如有具体数据库类型或操作系统,可提供更详细的部署方案。
云小栈