(Linux环境)postgres定时备份和数据迁移

之前介绍通过拷贝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用户
postgres@[local]:5432=#create user test with password ‘test@123’;
CREATE ROLE

# 将数据库权限赋予root用户
postgres@[local]:5432=#GRANT ALL PRIVILEGES ON DATABASE test to test;
GRANT

# 将用户修改成超级用户
postgres@[local]:5432=# ALTER ROLE test WITH SUPERUSER;

你可能感兴趣的:(数据库,postgresql,数据库,linux,运维)