# 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 {} \; # 刪除超過七天的備份文件