Docker 容器中 PostgreSQL 数据库迁移

前言

前段时间用 Miniflux 搭建了一个 RSS 服务,其数据库使用的是 PostgreSQL, 但运行在 Docker 容器中,现在想把数据库迁移到另一台服务器上的 PostgreSQL 中,然后 Miniflux 使用 Database URL 来连接到迁移后的数据库。

详细步骤

1.使用 docker exec 命令进入容器

# 列出所有容器
docker ps -a
# 进入到 postgresql 容器
docker exec -it 68b4 /bin/bash
# 注意:这里的 68b4 是容器的 ID 的前几位

2.使用 pg_dump 备份数据库

# 备份数据库
pg_dump --username=admin \
--host=0.0.0.0 --port=5432 \
--format=plain --file=/var/lib/postgresql/data/backup.sql db_name
# 注意:这里的 admin 是数据库的用户名,db_name 是数据库的名称

# 查看备份文件
cat /var/lib/postgresql/data/backup.sql
# 退出容器
exit

3.将备份文件拷贝到宿主机

docker cp 68b4cbec5817:/var/lib/postgresql/data/backup.sql ~/
# 注意:这里的 68b4cbec5817 是容器的 ID, ~/ 是宿主机的当前用户的 home 目录

4.在新的服务器上创建数据库

这里假设 PostgreSQL 已经安装好了,教程参考 How To Install and Use PostgreSQL on Ubuntu 18.04

# 切换到 postgres 用户
sudo su postgres
# 进入 postgres CLI
psql
# 创建用户
postgres=# CREATE USER username WITH PASSWORD '*****';
# 这里 postgres=# 是 postgresql 的提示符,不需要输入
# 这里 username 是数据库的用户名,***** 是数据库的密码

# 创建数据库
postgres=# CREATE DATABASE dbname OWNER dbuser;
# 这里 dbname 是数据库的名称,dbuser 是刚刚创建的用户名

# 授权
postgres=# GRANT ALL PRIVILEGES ON DATABASE dbname TO dbuser;
# 这里 dbname 是数据库的名称,dbuser 是刚刚创建的用户名

# 查看数据库
postgres=# \l

# 查看用户
postgres=# \du

# 退出 postgres CLI
postgres=# \q

# 退出 postgres 用户
exit

5.将备份文件拷贝到新的服务器

scp ~/backup.sql username@ip:/home/username/
# 注意:这里的 username 是新服务器的用户名,ip 是新服务器的 IP 地址,backup.sql 是备份文件的名称

6.在新的服务器的 PostgreSQL 中导入数据库

# 切换到 postgres 用户
sudo su postgres
# 导入数据库
psql --host=localhost --port=5432 \
--username=miniflux --dbname=minifluxdb \
--file=/home/unbuntu/backup.sql
# 注意:这里的 miniflux 是数据库的用户名,minifluxdb 是数据库的名称,backup.sql 是备份文件的名称

7.配置新的服务器的 PostgreSQL

# 切换到 postgres 用户
sudo su postgres

# 进入 postgres CLI
psql

# 显示 hba_file 文件路径
SHOW hba_file;

# 示例输出
/etc/postgresql/14/main/pg_hba.conf 

# 退出 postgres CLI
\q

# 编辑 hba_file 文件
vim /etc/postgresql/14/main/pg_hba.conf

# 修改监听端口
host    all     all     0.0.0.0/0     md5
host    all     all     ::/0          md5

# 退出保存 
ESC + :wq

# 编辑 postgresql.conf 文件
vim /etc/postgresql/14/main/postgresql.conf

# 修改监听地址
将      listen_address = 'localhost' 
修改为   listen_address = '*'

# 退出保存
ESC + :wq

# 重启 PostgreSQL 服务
systemctl restart postgresql

# 退出 postgres 用户
exit

8.修改 Miniflux 的 Database URL 在 Miniflux 的 Docker-compose 文件中修改数据库的 URL

# 数据库 URL Schema
postgres://DatabaseUserName:DatabasePassword@HostIP:5432/DatabaseName?sslmode=disable

9.重启 Miniflux 服务

docker-compose up -d

最后修改于 2023-02-08


感谢您的支持 :D