一、數據定時備份
解釋:備份指定數據庫,能有效在發生錯誤時,預防錯誤,進行恢復
1.基本備份
#!/bin/bash
sudo -u postgres pg_dump -U postgres -d dbname -Fc > /home/postgres/backup/backup.dump
# sudo -u postgres:先切換到postgres用戶;pg_dump是postgresql數據庫壓縮備份方式;-U指定用戶(默認就是postgres) ;-d指定要備份的數據庫;-Fc該格式可以確保更高的備份效率和恢復速度;> /home/postgres/backup/backup.dump寫入到指定文件位置
2.備份超過7天的刪除
#!/bin/bash
sudo -u postgres pg_dump -U postgres -d dbname -Fc > /home/postgres/backup/backup_$(date +\%Y\%m\%d).dump
find /home/postgres/backup/ -name "backup_*.dump" -mtime +7 -exec rm {} \;
3.本地備份+其它服務器備份
#!/bin/bash
sudo -u postgres pg_dump -U postgres -d dbname -Fc > /home/postgres/backup/backup_$(date +\%Y\%m\%d).dump
find /home/postgres/backup/ -name "backup_*.dump" -mtime +7 -exec rm {} \;
scp /home/postgres/backup/backup_$(date +\%Y\%m\%d).dump user@8.8.8.8:/home/postgres/backup/backup_$(date +\%Y\%m\%d).dump
# 遠程服務器使用scp命令,scp后面第一個參數是傳輸哪個文件,后一個參數是遠程服務器(user是遠程服務器用戶名,8.8.8.8為其ip地址)執行這行命令需要輸入密碼(不利于自動化下面介紹自動化方法)
# scp -r能傳送文件夾
免密
ssh-keygen -t rsa
# 一直回車,創建的文件目前在 /當前用戶/.ssh
ssh-copy-id <username>@<remote_host>
# 將公鑰復制到遠程主機(該命令不是在遠程主機執行)
# 若提示.ssh創建失敗,即username沒有權限,使用高權限用戶登錄遠程服務器在/home/username/創建/.ssh/目錄即可,并將其所有權給username chown username .ssh
測試:ssh username@server_address(直接免密就成功了)
4.自動化任務
cron
crontab -e
# 寫入下面內容,比如定時在北京時間0點執行,每天在0點都會執行
0 0 * * * TZ=Asia/Shanghai bash /path/1.sh
systemd timer
解釋:因為博主在自己電腦上怎么用cron都不行,故使用了這個,其效果同cron類型,但效率甚至比cron高出一點點
vim /etc/systemd/system/mytask.service
[Unit]
Description=My Task[Service]
ExecStart=/bin/bash /path/to/your/script.sh[Install]
WantedBy=default.target
vim /etc/systemd/system/mytask.timer
# 下面例子是每天在0點執行
[Unit]
Description=Run my service every Beijing 0 clock[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true[Install]
WantedBy=timers.target
# 依次執行下面的代碼(上面文件有修改都要依次執行下面內容)
sudo systemctl daemon-reload
sudo systemctl start mytask.timer
sudo systemctl start mytask.service
查看現有定時任務隊列
:systemctl list-timers
關閉任務
:systemctl stop mytask.timer
二、數據恢復
解釋:對已經經過pg_dump
的內容,進行恢復
1.基本恢復
createdb dbname
# 此為新建即將存入恢復數據的數據庫
# 可能需要先su postgres
pg_restore -d dbname < backup.dump
pg_restore為恢復pg_dump -Fc 選項快速創建的備份數據庫表;-d dbname為指定上面創建的數據庫;backup.dump為備份文件名