* 2 principles:
+ Back up the PostgreSQL database, use pg_basebackup
+ Copy the STORAGE (MINIO) files, keeping the XATTR attributes intact.
A= Main - IP 11.153.1.3; B= Backup - IP 11.153.1.10
* Step 0: On server A
postgresql config pg_hba.conf
#!/bin/bash # TYPE DATABASE USER ADDRESS METHOD host replication replicator 11.153.1.10/32 md5
Restart postgresql an query this sql:
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'mypassword';* Step 1:
Copy folder docker supabase from A to B
* Step 2: ssh root no password from server B to server A
2.1. On server A
sudo nano /etc/ssh/sshd_config
Match Address 192.168.1.10
PermitRootLogin yes
Restart service sshd
2.2. On server B
ssh-keygen -t rsa -b 4096
ssh-copy-id root@11.153.1.3
* Step 3: On server B: crontab -e
0 2 * * * /home/B/postgresql_backup_db/backup_and_copy_week.sh
#!/bin/bash ## ENV export PGPASSWORD="mypassword" DAY_OF_WEEK=$(date +"%A") rm -rf /home/B/postgresql_backup_db/$DAY_OF_WEEK mkdir /home/B/postgresql_backup_db/$DAY_OF_WEEK pg_basebackup -h "11.153.1.3" -U replicator -D "/home/B/postgresql_backup_db/$DAY_OF_WEEK" -Ft -z -X stream -P ## minio folder rsync keep xattr: rsync -aX rm -rf /home/B/postgresql_backup_db/storage rsync -avzXP root@11.153.1.3:/home/A/supabase/docker/volumes/storage/ /home/B/postgresql_backup_db/storage
* Step 4: When need backup, on server B
#!/bin/bash rm -rf /home/B/supabase/docker/volumes/db/data/ mkdir /home/B/supabase/docker/volumes/db/data/ tar -xzvf /home/B/postgresql_backup_db/Thursday/base.tar.gz -C /home/B/supabase/docker/volumes/db/data/ tar -xzvf /home/B/postgresql_backup_db/Thursday/pg_wal.tar.gz -C /home/B/supabase/docker/volumes/db/data/pg_wal/ # I don't need: touch /home/B/supabase/docker/volumes/db/data/recovery.signal rm -rf /home/B/supabase/docker/volumes/storage/ # -a keep all meta of file cp -ra /home/B/postgresql_backup_db/storage /home/B/supabase/docker/volumes/
Comments
Post a Comment