pgsql我们用的是11.服务器使用的centos 7的。pgsql的安装,使用在此就不写了。我们来记录整理一下数据的定时备份和数据恢复
数据定时备份(我们用linux自带的定时器来做)
1.创建文件夹 /backup/sql/log/
/backup/sql/bin
/backup/sql
创建文件 /backup/sql/bin/sql_back.sh
创建文件 /backup/sql/log/back.log
2.chmod +x sql_back.sh
3,#vim /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# 15 01 * * 0 root
0 0 * * 0 root /backup/sql/bin/sql_back.sh # 每周天的凌晨 0点0分执行
15 1 * * * root /backup/sql/bin/sql_back.sh #表示每天1点15分执行备份
我们也可以根据自己的需求把文件放在daily,week等等的直接每天,每周等
4. 重新加载linux的定时任务: service crond restart
5,如果该脚本是doc 格式,需要转换成unix,用该命令: sed -i "s/\r//" sql_back.sh doc的转换成unix。否则执行失败
下面提上sql_back.sh文件:
#!/bin/bash
#备份数据库
#pg_dump -h {ip} -O -p {port} -U {dbUserName} -d db_informat_account_prd > db_informat_account_prd.sql {password}
#PGPASSWORD=pssword pg_dump -h ip-p port-U postgres -d dbname1 > /backup/sql/db_back1.sql
IP='127.0.0.1'
PORT=5432
DUMP=pg_dump
OUT_DIR=/backup/sql/
#LINUX_USER=root #系统用户名
DB_NAME='db1'
DB_NAME2='db2'
DB_USER='postgres'
DB_PASS='xxxxxxx'
DAYS=30
#DAYS=30代表删除30天前的备份,即只保留最近30天的备份
cd $OUT_DIR
DATE=`date +%Y_%m_%d`
#获取当前系统时间
OUT_SQL=$DB_NAME$DATE.sql"
OUT_SQL2=$DB_NAME2$DATE.sql"
TAR_SQL=$DB_NAME$DATE.tar.gz"
TAR_SQL2=$DB_NAME2$DATE.tar.gz
#我们有两个库要备份下来
PGPASSWORD=$DB_PASS $DUMP -h $IP -p $PORT -U $DB_USER -d $DB_NAME > $OUT_SQL
PGPASSWORD=$DB_PASS $DUMP -h $IP -p $PORT -U $DB_USER -d $DB_NAME2 > $OUT_SQL2
tar -zcvf $TAR_SQL $OUT_SQL
tar -zcvf $TAR_SQL2 $OUT_SQL2
#压缩为.tar.gz格式
rm -rf $OUT_SQL
rm -rf $OUT_SQL2
#删除.sql格式的备份文件
#echo "数据库备份任务 - 删除sql文件" $DATE
#chown $LINUX_USER:$LINUX_USER $OUT_DIR/$TAR_SQL#更改备份数据库文件的所有者
find $OUT_DIR -name "db_informat*" -type f -mtime +$DAYS -exec rm {} \;
#echo "数据库备份任务 - 删除七天前的备份文件"$DATE
#删除7天前的备份文件(注意:{} \;中间有空格)
数据恢复
恢复就比较简单,一行命令搞定。主要是将对应的sql文件执行到对应的库
psql -h 127.0.0.1 -U postgres -d db_1 < /backup/sql/.....sql
// 测试一下
tar -xzvf xxxx.tar.gz
su postgres 切换到postgres 用户
删除数据 db
drop database db1;
创建数据库
create database db1 owner postgres;
授权数据库
grant all on database db1 to postgres;
到pgsql的bin 目录
cd /user/pgsql-11/bin
恢复数据库psql
psql -h 127.0.0.1 -U postgres -d db1 < /backup/sql/.....sql
输入密码就可以了