三、python Django ORM postgresql[数据定时备份、数据恢复]

一、数据定时备份

解释:备份指定数据库,能有效在发生错误时,预防错误,进行恢复

1.基本备份

bash 复制代码
#!/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天的删除

bash 复制代码
#!/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.本地备份+其它服务器备份

bash 复制代码
#!/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地址)执行这行命令需要输入密码(不利于自动化下面介绍自动化方法)

免密

bash 复制代码
ssh-keygen -t rsa
# 一直回车,创建的文件目前在 /当前用户/.ssh
bash 复制代码
ssh-copy-id <username>@<remote_host>
# 将公钥复制到远程主机(该命令不是在远程主机执行)
# 若提示.ssh创建失败,即username没有权限,使用高权限用户登录远程服务器在/home/username/创建/.ssh/目录即可,并将其所有权给username chown username .ssh
测试:ssh username@server_address(直接免密就成功了)

4.自动化任务

cron

bash 复制代码
crontab -e
bash 复制代码
# 写入下面内容,比如定时在北京时间0点执行,每天在0点都会执行
0 0 * * * TZ=Asia/Shanghai bash /path/1.sh

systemd timer

解释:因为博主在自己电脑上怎么用cron都不行,故使用了这个,其效果同cron类型,但效率甚至比cron高出一点点
vim /etc/systemd/system/mytask.service

bash 复制代码
[Unit]
Description=My Task

[Service]
ExecStart=/bin/bash /path/to/your/script.sh

[Install]
WantedBy=default.target

vim /etc/systemd/system/mytask.timer

bash 复制代码
# 下面例子是每天在0点执行
[Unit]
Description=Run my service every Beijing 0 clock

[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true

[Install]
WantedBy=timers.target
bash 复制代码
# 依次执行下面的代码(上面文件有修改都要依次执行下面内容)
sudo systemctl daemon-reload 
sudo systemctl start mytask.timer 
sudo systemctl start mytask.service

查看现有定时任务队列systemctl list-timers
关闭任务systemctl stop mytask.timer

二、数据恢复

解释:对已经经过pg_dump的内容,进行恢复

1.基本恢复

bash 复制代码
createdb dbname
# 此为新建即将存入恢复数据的数据库
# 可能需要先su postgres
bash 复制代码
pg_restore -d dbname < backup.dump
pg_restore为恢复pg_dump -Fc 选项快速创建的备份数据库表;-d dbname为指定上面创建的数据库;backup.dump为备份文件名
相关推荐
学测绘的小杨6 小时前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
zzzzzz31013 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐13 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱1 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot1 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海1 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱1 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽2 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码2 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱2 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理