(Linux环境)postgres定时备份和数据迁移_linux pgsql二进制文件迁移

63 阅读1分钟

之前介绍通过拷贝pg数据库文件迁移的方式详情看文章:postgresql数据库迁移(拷贝数据库文件方式迁移),这种方式存在弊端是必须将旧库和新库停掉,这会对用户影响比较大。

最近由于原有的服务器性能无法满足现有环境的使用要求,需将业务上的pg库迁移到性能更好的服务器上。这里讨论的是迁移数据,pg库安装暂时忽略,会在其他文章上介绍。另外,为了避免数据库使用受到影响,这里用定时备份的数据迁移到新的数据库上去。
文章主要分两部分:
(1)、备份pg数据,定时备份脚本;
(2)、将备份数据迁移到新的数据库上。

#一、定时备份数据
#备份脚本
#!/bin/bash
#date:2020-06-27
#author:believer 
#discription: Backup database data 
#设置环境变量
#
source /etc/profile > /dev/null 2>&1
#su - postgres
BACKUP_TIME=`date "+%Y%m%d%H%M%S"`
BACKUP_DIR='/data/PGbackup/backupdata'
BACKUP_LOG='/data/PGbackup/log'

if [ ! -d ${BACKUP\_DIR} ];
then
   mkdir -p ${BACKUP\_DIR}
   chmod -R 777 ${BACKUP\_DIR}
fi

if [ ! -d ${BACKUP\_LOG} ];
then
   mkdir -p ${BACKUP\_LOG}
   chmod -R 777 ${BACKUP\_LOG}
fi

for database in cis cas buse test pg_test
do
 pg_dump -h 127.0.0.1 -U postgres $database > ${BACKUP\_DIR}/${database}_${BACKUP\_TIME}.sql
 if [ $? -eq '0' ];
 then
    echo "backup $database successful !" >> ${BACKUP\_LOG}/${database}_${BACKUP\_TIME}_dump.log
 else
    echo "backup $database fail !!!" >> ${BACKUP\_LOG}/${database}_${BACKUP\_TIME}_dump.log
 fi
done
#exit 
#cd ${BACKUP\_DIR}/;tar -zcvf pgdump\_${BACKUP\_TIME}.tar.gz \*.sqli
#定时清理旧的备份文件
cd ${BACKUP\_DIR}/
find ${BACKUP\_DIR}/ -type f -mtime +7 -exec rm -f {} \;
#定时清理日志
cd ${BACKUP\_LOG}/
find ${BACKUP\_LOG}/ -type f -mtime +5 -exec rm -f {} \;
#定时备份数据
[root@docker-test101 ~]# crontab -e
no crontab for root - using an empty one
00 00 * * * sh /home/pgbackup/script/pg_back.sh
[root@docker-test101 ~]# systemctl restart crond

#二、迁移或是恢复数据:
[postgres@test100 ~]$ 
[postgres@test100 ~]$ 
[postgres@test100 ~]$ 
[postgres@test100 ~]$ psql
psql (10.6)
Type "help" for help.

#创建库,纯净的库(一般业务场景都有建库的脚本,可以直接指向建库脚本,这边是手动建库)
postgres@[local]:5432=#create database pg\_test owner postgres;
postgres@[local]:5432=#\l
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 #pg\_test | postgres | UTF8 | zh\_CN.utf8 | zh\_CN.utf8 | 
# postgres | postgres | UTF8 | zh\_CN.utf8 | zh\_CN.utf8 | 
 template0 | postgres | UTF8     | zh_CN.utf8 | zh_CN.utf8 | =c/postgres          +
        |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | zh_CN.utf8 | zh_CN.utf8 | =c/postgres          +           |          |          |            |            | postgres=CTc/postgres
(5 rows)

[postgres@test100 ~]$ psql -U postgres -d pg_test -f pg_test_20200615195538.sql
...
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE TRIGGER
CREATE TRIGGER
CREATE TRIGGER
GRANT

附录PG库的创建用户授权的知识点:
# 创建test用户