本示例的应用场景是,宿主机系统是centos7,安装有docker相关环境,在docker中启动postgresql镜像,数据库文件从宿主机目录映射到docker实例中。自动备份的方案是:在宿主机上采用crontab定时调用脚本执行数据库的备份。
具体实施部署如下:
一、创建连接postgresql备份表及数据的用户,并赋予只读权限
1. 在宿主机上执行psql连接到docker上的postgresql数据库
psql -h localhost -p 10000 -U postgres
其中,10030为docker对外暴露的访问postgresql数据库的端口
2. 创建用户dump
create user dump with password 'justfordump';
3. 给用户授权
grant all on database mydatabase to dump;
alter default privileges in schema public grant select on tables to dump;
grant select on all tables in schema public to dump;
grant select on all sequences in schema public to dump;
其中,mydatabase为需要自动备份的数据库名称
4. 连接到mydatabase,给用户授权
\c mydatabase
alter default privileges in schema public grant select on tables to dump;
grant select on all tables in schema public to dump;
grant select on all sequences in schema public to dump;
第一行 \c mydatabase 用于连接到mydatabase数据库,后面两行赋予用户查询表机sequence的权限
二、创建备份脚本
1. 创建备份脚本并copy到指定目录本示例存在在 /var/docker_conf/dump下,脚本名称:dump.sh
#!/usr/bin/sh
export PGPASSWORD=justfordump
pg_dump mydatabase -h localhost -p 10000 -U dump -c | gzip > /var/docker_conf/dump/mydatabase_$(date +%Y%m%d).backup.gz
其中,在脚本中将设置用户dump的访问密码justfordump。
2. 赋予脚本执行权限
chmod +x /var/docker_conf/dump/dump.sh
三、在crontab中加入定时任务
1. 创建一个crontab,用crontab -e指令,加入如下行:
00 21 * * * /var/docker_conf/dump/dump.sh
在每天晚上9点执行备份
2. 重启crontab
service crond restart