1. ホーム
  2. データベース
  3. ポストグレスキュー

どのように定期的にLinux上でpostgresqlのデータベースをバックアップする

2022-01-10 16:06:01

データベースが操作されるリスクを避けるために、postgresqlのデータベースのバックアップを毎日行う予定です

1. サーバーのアドレスです。
/{br バックアップサーバーアドレス 10.10.10.101 (架空)
postgresqlのデータベースがあるサーバーのアドレス 10.10.10.100(架空)

バックアップ用のデータベースを別に持っていて、同じサーバーで操作していないため、まず両方のサーバーのネットワークが接続されていることを確認する必要があります。
/{br 私はこれをシェルスクリプトとLinuxに付属するタイムドタスクを使って行いましたが、その手順は以下の通りです。

{シェルスクリプトとLinux独自のタイムドタスクを使って、以下のように行いました。

**

I バックアップ用シェルスクリプトを作成する

**
1. バックアップスクリプトの保存パスを作成します。
mkdir -p /u01/db-bak/2/bak-file

mkdir -p /u01/db-bak/2/bak-file

/u01/db-bak/2/bak-file/allファイルにバックアップ後、/u01/db-bak/2 pgsql.backupにシェルスクリプトを配置したところ、/u01/db-bak/2/bak-file/allファイル
2. シェルスクリプトを準備する
u01/db-bakに移動します。 <未定義

cd /u01/db-bak

バックアップ用シェルスクリプトの作成

vim pgsql-all-backup.sh

シェルスクリプト

#! /binecho "Started performing a backup of the PostgreSql database hrmw! "
echo "backup ing -------------------"
nowtime=$(date +%F+%T)
export PGPASSWORD=123
echo "time:" $nowtime
set timeout 500
/usr/pgsql-11/bin/pg_dump --file "/u01/db-bak/2/bak-file/all/pgsql-all-"$nowtime".backup" --host "10.10. 10.100" --port "5432" --username "postgres" --dbname "hrmw" --verbose --role "postgres" -- format=c --blobs --encoding "UTF8"
echo "Database hrmw Backup ended! "
exit;

nowtime=$(date +%F+%T) -- 現在の時刻
PGPASSWORD='データベースパスワード'

pg_dumpの使用法

~                                                            
Usage:                                                           
 pg_dump [option]... [database name].                                                     
~                                                            
General options:                                                          
 -f, --file=FILENAME Output file or directory name                                                 
 -F, --format=c|d|t|p Output file format (custom, directory, tar                                              
        plaintext (default))                                                 
 -j, --jobs=NUM Performs multiple parallel jobs for backup dumps                                             
 -v, --verbose detail mode                                                   
 -V, --version Output version information and exit                                               
 -Z, --compress=0-9 Compression level of the format being compressed                                                
 --lock-wait-timeout=TIMEOUT Fails after waiting for table lock timeout                                               
 --no-sync write to disk safely without waiting for changes                                               
 -? , --help Show this help, then exit                                                
~                                                            
Control output content options:                                                        
 -a, --data-only Dump data only, do not include schema                                                
 -b, --blobs Include large objects in dumps                                                
 -B, --no-blobs exclude large objects from the dump                                                
 -c, --clean Clear (delete) database objects before re-creating                                           
 -C, --create Include commands in the dump to create the database                                             
 -E, --encoding=ENCODING Dump data encoded in ENCODING form                                              
 -n, --schema=SCHEMA Dump only the schema with the specified name                                                
 -N, --exclude-schema=SCHEMA does not dump named schemas                                                
 -o, --oids Include OIDs in dumps                                                 
 -O, --no-owner In plaintext format, ignore who owns the recovery object
 -s, --schema-only Dump schema only, no data included
 -S, --superuser=NAME Use the specified superuser in plaintext format
 -t, --table=TABLE Dump only the table with the specified name
 -T, --exclude-table=TABLE does not dump tables of the specified name
 -x, --no-privileges Don't dump privileges (grant/revoke)
 --binary-upgrade can only be used by upgrade tools
 --column-inserts Dump data as an INSERT command with column names
 --disable-dollar-quoting Remove dollar (symbol) quotes, use SQL standard quotes
 --disable-triggers Disable triggers during data recovery only
 --enable-row-security Enables row security (only dumps what the user can access)
 --exclude-table-data=TABLE Do not dump data from tables with specified names
 --if-exists Use IF EXISTS when deleting objects
 --inserts dumps data as an INSERT command, not as a COPY command
 --load-via-partition-root Load partitions via the root table
 --no-comments do not dump comments
 --no-publications do not dump releases
 --no-security-labels do not dump security label assignments
 --no-subscriptions no-dump-subscriptions
 --no-synchronized-snapshots Do not use synchronized snapshots in parallel working sets
 --no-tablespaces do not dump tablespace allocation information
 --no-unlogged-table-data No dumping of unlogged table data
 --quote-all-identifiers All identifiers in quotes, even if not keywords
 --section=SECTION Backup named sections (pre-data, data, and post-data)
 --serializable-deferrable etc. until the backup can run without exceptions
 --snapshot=SNAPSHOT Use the given snapshot for the dump
 --strict-names requires each table and/or schema to include a schema to match at least one entity
 --use-set-session-authorization
        Use the SESSION AUTHORIZATION command instead of the
        ALTER OWNER command to set ownership

Linkage options:
 -d, --dbname=DBNAME Backup of database DBNAME
 -h, --host=hostname Hostname of the database server or socket directory
 -p, --port=Port number Port number of the database server
 -U, --username=name Connect as the specified database user
 -w, --no-password Never prompt for a password
 -W, --password force password prompt (automatic)
 --role=ROLENAME Run SET ROLE before dumping

If no database name is provided, then use the PGDATABASE environment variable
value.


**

II 定期的にクリアバックアップするシェルスクリプトを作成する

**
毎日のデータベースのバックアップは、クリーンアップしないとメモリを食うし、手動でやるのは面倒なので、自動でやらせる。

バックアップシェルと同じパスなので、管理が楽です。
1...シェルスクリプトの準備
u01/db-bakへ移動します。 <未定義

cd /u01/db-bak

削除シェルスクリプトの作成

vim delete-pgbak.sh

シェルスクリプトの削除

#! /binecho "Deleting 8-day old database backup file! "
find /u01/db-bak/2/bak-file/all/ -name "pgsql-all*" -mtime +7 -exec rm -rf {} \;
set timeout 1000
echo " 8 days old database backup file deleted! "

**

III 時間指定タスクの設定

**
1. 時間指定タスクの追加

[root@host-10-10-10-101 db-bak]# crontab -e   

毎日23:00にデータベースバックアップスクリプトを実行 毎日23:30に削除スクリプトを実行

30 23 * * * /u01/db-bak/2/delete-pgbak.sh
	
0 23 * * * /u01/db-bak/2/pgsql-all-backup.sh 

2. 時間指定タスクの表示

[root@host-10-10-10-101 db-bak]# crontab -l     
	30 23 * * * /u01/db-bak/2/delete-pgbak.sh
	
	0 23 * * * /u01/db-bak/2/pgsql-all-backup.sh

**

IV 権限を付与する

**
パーミッションの設定 chmod

chmod +x /u01/db-bak/2/*

**

Vテスト用シェルスクリプト

**

[root@host-10-10-10-101 2]# bash pgsql-all-backup.sh
Start executing a backup of the PostgreSql database hrmw!
backup ing -------------------
Time: 2020-12-17+14:47:53
pg_dump: The last built-in OID is 16383
pg_dump: read extension
pg_dump: Identify extension members
pg_dump: Read mode
pg_dump: Read user-defined table
pg_dump: Read user-defined functions
pg_dump: Read user-defined types
pg_dump: Read procedure language
pg_dump: Read user-defined aggregate functions
pg_dump: Read user-defined operators
pg_dump: Read user-defined access methods
pg_dump: Read user-defined operator sets
pg_dump: Read user-defined operators
pg_dump: Read user-defined text search parsers
pg_dump: Read user-defined text search templates
pg_dump: Read user-defined text search dictionaries
pg_dump: Read user-defined text search configuration
pg_dump: Read user-defined external data wrappers
pg_dump: Read user-defined external servers
......
Database hrmw2 End of backup!

[root@host-10-10-10-101 2]# bash delete-pgbak.sh
Deleting 8-day-old database backup file!
 8-day old database backup file deleted!

今回はpostgresqlデータベースのLinux時限バックアップについてです、postgresqlのLinux時限バックアップについては、BinaryDevelopの過去の記事を検索するか、以下の関連記事を引き続きご覧ください、今後ともBinaryDevelopをよろしくお願いします!