备份 – 自动备份PostgreSQL数据库的最佳方法是什么?
发布时间:2020-12-13 16:26:05 所属栏目:百科 来源:网络整理
导读:我发现每周备份数据库都很繁琐.我还认为每周备份应该转换为每日备份.如果我不得不这样做,我不想手动完成.每天自动备份PostgreSQL数据库的最佳方法是什么? 与您可以自动执行的任何其他重复性任务相同 – 您编写一个脚本来执行备份,然后设置一个cron作业来运
我发现每周备份数据库都很繁琐.我还认为每周备份应该转换为每日备份.如果我不得不这样做,我不想手动完成.每天自动备份PostgreSQL数据库的最佳方法是什么?
与您可以自动执行的任何其他重复性任务相同 – 您编写一个脚本来执行备份,然后设置一个cron作业来运行它.
像下面这样的脚本,例如: (注意:它必须以postgres用户或具有相同priv的任何其他用户身份运行) #! /bin/bash # backup-postgresql.sh # by Craig Sanders <cas@taz.net.au> # This script is public domain. feel free to use or modify # as you like. DUMPALL='/usr/bin/pg_dumpall' PGDUMP='/usr/bin/pg_dump' PSQL='/usr/bin/psql' # directory to save backups in,must be rwx by postgres user BASE_DIR='/var/backups/postgres' YMD=$(date "+%Y-%m-%d") DIR="$BASE_DIR/$YMD" mkdir -p "$DIR" cd "$DIR" # get list of databases in system,exclude the tempate dbs DBS=( $($PSQL --list --tuples-only | awk '!/template[01]/ && $1 != "|" {print $1}') ) # first dump entire postgres database,including pg_shadow etc. $DUMPALL --column-inserts | gzip -9 > "$DIR/db.out.gz" # next dump globals (roles and tablespaces) only $DUMPALL --globals-only | gzip -9 > "$DIR/globals.gz" # now loop through each individual database and backup the # schema and data separately for database in "${DBS[@]}" ; do SCHEMA="$DIR/$database.schema.gz" DATA="$DIR/$database.data.gz" INSERTS="$DIR/$database.inserts.gz" # export data from postgres databases to plain text: # dump schema $PGDUMP --create --clean --schema-only "$database" | gzip -9 > "$SCHEMA" # dump data $PGDUMP --disable-triggers --data-only "$database" | gzip -9 > "$DATA" # dump data as column inserts for a last resort backup $PGDUMP --disable-triggers --data-only --column-inserts "$database" | gzip -9 > "$INSERTS" done # delete backup files older than 30 days echo deleting old backup files: find "$BASE_DIR/" -mindepth 1 -type d -mtime +30 -print0 | xargs -0r rm -rfv 编辑: 不推荐使用pg_dumpall -D开关(第27行),现在替换为–column-inserts https://wiki.postgresql.org/wiki/Deprecated_Features (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |