如何备份和还原整个 /var/discourse 文件夹?
由于常规的备份和还原过程存在问题,我在想是否可以直接备份整个 /var/discourse 文件夹,并在另一台服务器上复用。以下是我所做的操作……
在生产服务器上:
rsync_opts="\
--recursive \
--links \
--hard-links \
--safe-links \
--owner \
--group \
--perms \
--times \
--delete \
--sparse \
--compress \
--partial \
--rsh=ssh
"
dir=/var/discourse
rsync $rsync_opts "$dir/" root@xx.xx.xx.xx:"/var/production-backup/$dir"
在测试服务器上:
安装 Docker。
rsync --recursive --links --hard-links --safe-links --owner --group --perms --times --delete --sparse --compress --partial /var/production-backup/var/discourse/ /var/discourse
但遇到了 502 Bad Gateway 错误。
正在尝试排查。
cd /var/discourse
./launcher start app
root@whonix-app:/var/www/discourse# service postgresql status
12/main (port 5432): down
root@whonix-app:/var/www/discourse# service postgresql start
[....] 正在启动 PostgreSQL 12 数据库服务器:main[....] 错误:该集群由不存在的用户 ID 116 拥有 [FAIL] ... 失败!
猜测一些修复方法:
chown -R postgres.postgres /etc/postgresql
chown -R postgres.postgres /shared/postgres_*
chown -R postgres.postgres /var/lib/postgresql
chown -R postgres.postgres /var/log/postgresql
chown -R redis.redis /etc/redis/redis.conf
chown -R redis.redis /shared/redis_data
chown -R redis.redis /var/run/redis
chown -R redis.redis /var/lib/redis
chown -R redis.redis /var/log/redis
chgrp -R ssl-cert /etc/ssl/private
但并未奏效。
root@whonix-app:/var/www/discourse# service postgresql start
[....] 正在启动 PostgreSQL 12 数据库服务器:main[....] 错误:/usr/lib/postgresql/12/bin/pg_ctl /usr/lib/postgresql/12/bin/pg_ctl start -D /shared/postgres_data -l /var/log/postgresql/postgresql-12-main.log -s -o -c config_file="/etc/postgresql/12/main/postgresql.conf" 退出状态为 1: 2020-05-25 10:20:10.501 UTC [603] FATAL: 数据库文件与服务器不兼容 2020-05-25 10:20:10.501 UTC [603] DETAIL: 数据目录由 PostgreSQL 版本 10 初始化,与当前版本 12.2 (Debian 12.2-2.pgdg100+1) 不兼容。pg_ctl: 无法启动服务器。请检查日志输出。[FAIL] ... 失败!
为什么会出现这些文件权限问题?
为什么仅仅通过将一个服务器的整个文件夹复制到另一个服务器,PostgreSQL 就从版本 10 更新到了版本 12?我肯定哪里做错了。
能否请您分享如何在一台服务器上备份整个 Discourse 应用并将其迁移到另一台服务器的详细步骤?