PostgreSQL定時備份


# PostgreSQL定時備份
# 版本:PostgreSQL14.0
# 一.如果你在pg_hba.conf中設定了密碼登錄,那么你就需要設置一個默認密碼共psql登錄的時候跳過驗證。如果是root用戶的話就加在/etc/profile文件末尾。如果是其他用戶就加在用戶目錄下.bashrc文件末尾
export PGPASSWORD='默認密碼'
# 二.開啟WAL歸檔日志。
# 需要修改postgresql.conf配置文件:
wal_level = replica;   # 隔離級別
archive_mode = on;    # on打開,off關閉
archive_command = '/bin/date'   # 歸檔備份執行哪個shell指令

# archive_command 詳細說明。
# WAL歸檔是自動的,觸發條件有三個:1.手動強制切換 select pg_switch_wall(); 2.wal日志寫滿后。3.archive_tomeout(但該參數沒在conf中找到該參數配置的位置)
# archive_command配置的就是這三個條件觸發的時候執行的歸檔shell腳本,這里設置/bin/date是不讓它幫忙備份,我們自己來備份,這樣的好處是:定時每天備份、超過一定時間的備份自動刪除。

# 三.編寫我們自己的備份shell腳本
#!/bin/bash  
DATE=$(date '+%Y%m%d');
PG_ARCHIVE=/usr/pgdata/pg_arch         這是我自己的目錄,不用管
PG_DATA=/usr/pgdata             替換你自己的PGDATA目錄
PG_HOME=/root/Backup                替換成你要備份到哪
PG_HOSTNAME=192.168.0.100        服務器地址
PG_PORT=5432                端口

#START BACKUP
echo "START BACKUP..............."
psql -h $PG_HOSTNAME -p $PG_PORT -d postgres -U odoo -c "select pg_start_backup('hot_back')"
cd $PG_HOME
tar -zcvf ${PG_HOME}/pg_hotbackup_$DATE.tar.gz $PG_DATA
psql -h $PG_HOSTNAME -p $PG_PORT -d postgres -U odoo -c "select pg_stop_backup()"
echo "BACKUP  END"

# 四.將腳本加入到定時執行
# 需要安裝crontab
# 查看是否安裝:crontab -v
# 然后執行crontab -e添加任務
crontab -e
# 下面是設定凌晨五點執行dbbackup.sh腳本
0 5 * * * /root/PGDATA_Backup/dbbackup.sh

 

這是單個數據庫的定時備份

#!/bin/bash
flist="/doc/Odoo"            # 這是你需要備份的文件夾
backupdir="/mnt/DBBackup"    # 這是備份后的壓縮文件存放處
dabao="/tmp/bak"             # 這是臨時文件夾
cp -aL $flist $dabao         # 將要備份的目錄copy到臨時文件夾中去
docker exec mysql sh -c 'exec mysqldump -u root -p"這里是密碼,建議用環境變量,別用明文" DBName' > $dabao/DBName.sql        # 從mysql的docker環境中備份數據庫到本地
docker exec postgres sh -c 'pg_dump -U postgres -f /bak/dbs/dbname.sql dbname'                                # 這是psql的docker中備份
docker cp postgres:/bak/databases $dabao/                                                                     # 將docker中的備份文件copy出來
cd $backupdir
tar -cf `date +%F`.tar.gz $dabao              # 將所有備份文件打包
rm -rf $dabao/*                               # 刪除臨時文件

find $backupdir -mtime +7 -exec rm -rf {} \;  # 刪除超過七天的備份文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM