Linux 上可以同时安装并运行 MySQL 和 PostgreSQL
在 Linux 上可以同时安装并运行 MySQL 和 PostgreSQL,它们默认使用不同的端口(MySQL: 3306,PostgreSQL: 5432),互不冲突。只要资源(CPU/内存/磁盘)够用、端口不被占用,就能并存。
下面是一套简明操作与注意点(任选与发行版相符的部分):
安装与启动
Debian/Ubuntu
# 查看端口占用(确认 3306/5432)
ss -lntp | egrep ':3306|:5432' || true# 安装 PostgreSQL
sudo apt update
sudo apt install -y postgresql postgresql-contrib# 启动并开机自启
sudo systemctl enable --now postgresql
RHEL/CentOS/Fedora
# 查看端口占用
ss -lntp | egrep ':3306|:5432' || true# 安装 PostgreSQL(包名可能因版本略有差异)
sudo dnf install -y postgresql-server postgresql-contrib# 初始化数据目录(某些发行版需要)
sudo /usr/bin/postgresql-setup --initdb# 启动并开机自启
sudo systemctl enable --now postgresql
初始配置(可选)
# 进入 psql 并设置 postgres 超级用户密码
sudo -u postgres psql
\password postgres
-- 创建业务用户与数据库
CREATE USER myuser WITH PASSWORD 'StrongPass!';
CREATE DATABASE mydb OWNER myuser;
\q
可能遇到的小问题与处理
-
端口冲突(通常不会,与 MySQL 不同端口):
修改 PostgreSQL 端口并重启。- Debian/Ubuntu:
/etc/postgresql/<版本>/main/postgresql.conf
- RHEL/CentOS:
/var/lib/pgsql/data/postgresql.conf
将port = 5432
改为如port = 5433
,然后:
sudo systemctl restart postgresql
- Debian/Ubuntu:
-
外部访问/防火墙:
-
允许远程:编辑
postgresql.conf
(listen_addresses='*'
)与pg_hba.conf
(增加允许的网段),再重启。 -
防火墙放行:
- Ubuntu(ufw):
sudo ufw allow 5432/tcp
- RHEL/CentOS(firewalld):
sudo firewall-cmd --permanent --add-service=postgresql && sudo firewall-cmd --reload
- Ubuntu(ufw):
-
-
资源占用:同机运行两套数据库要关注内存。若机器小,建议先保持 PostgreSQL 默认配置,后续再调整
shared_buffers
、work_mem
等。 -
套接字与数据目录:
- MySQL socket 通常在
/var/run/mysqld/mysqld.sock
,数据目录/var/lib/mysql
- PostgreSQL socket 通常在
/var/run/postgresql/
,数据目录/var/lib/postgresql/...
(Deb/Ub)或/var/lib/pgsql/data
(RHEL)
- MySQL socket 通常在
容器化(可选、更隔离)
若想完全隔离依赖与配置,也可用 Docker/Podman 跑 PostgreSQL:
docker run -d --name pg \-e POSTGRES_PASSWORD=StrongPass! \-e POSTGRES_DB=mydb \-p 5432:5432 \-v pgdata:/var/lib/postgresql/data \postgres:16
这样与系统里的 MySQL 完全分离,升级/回滚更方便。
按照上面步骤装好 PostgreSQL 后,就能在同一台机器上同时使用 MySQL 与 PostgreSQL 了。