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