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 {} \; # 删除超过七天的备份文件