■ はじめに
pg_dumpall or pg_dump / pg_restore を使う。 pg_dumpall / pg_dump / pg_restore については、以下の関連記事を参照のこと。
バックアップ・リストア ~ pg_dump / pg_restore ~
https://dk521123.hatenablog.com/entry/2015/04/22/232655
目次
【1】実行環境 【2】バックアップ用のシェルスクリプト 【3】インポート用のシェルスクリプト 【4】トラブル 1)エラー「対向(peer)認証に失敗しました」が表示
【1】実行環境
* OS : Debian8 * DB : PostgreSQL v9.4.15 詳しい設定については、以下の関連記事を参照のこと。
【2】バックアップ用のシェルスクリプト
* 第一引数:出力するディレクトリ
【pg_dumpallを使ったシェル】 postgresql-dumpall-export.sh
#!/bin/bash echo "Starting DB dump! $(date '+%Y-%m-%d %H:%M:%S')" if [ $# -ne 1 ]; then echo "$(basename $0) </path/to/dump/dir>" exit 1 fi dump_dir=$1 mkdir -p $dump_dir chown $DB_USER:$DB_USER $dump_dir su -u $DB_USER -c "pg_dumpall -U postgres -c > ${dump_dir}/backup_pg_dumpall.sql" echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"
【pg_dumpを使ったシェル】 postgresql-dump-export.sh
#!/bin/bash if [ $# -ne 1 ]; then echo "$(basename $0) </path/to/dump/dir>" exit 1 fi echo "Starting DB dump! $(date '+%Y-%m-%d %H:%M:%S')" # Auth DB_USER="postgres"; dump_dir=$1 mkdir -p $dump_dir chown $DB_USER:$DB_USER $dump_dir databases=$(su -l $DB_USER -c "psql -U $DB_USER -t -c 'select datname from pg_database'"); for database in ${databases}; do if [ "${database}" = "template0" -o "${database}" = "template1" -o "${database}" = "postgres" ]; then echo "Skip ${database}." else echo "Dumping ${database}..." su -l $DB_USER -c "pg_dump -b -Ft -U $DB_USER ${database} > ${dump_dir}/${database}.dump"; fi done; echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"
実行
とりあえず、テストのために単体で実行してみる sudo sh postgresql-dumpall-export.sh /tmp/db
【3】インポート用のシェルスクリプト
【pg_dumpallを使った際】 postgresql-dumpall-import.sh
#!/bin/bash echo "Starting DB dump import! $(date '+%Y-%m-%d %H:%M:%S')" # Auth DB_USER="postgres"; if [ $# -ne 1 ]; then echo "$(basename $0) </path/to/dump/file>" exit 1 fi dump_file=$1 psql -d postgres -f ${dump_file} echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"
【pg_dumpを使った際】 postgresql-dump-import.sh
実行
とりあえず、テストのために単体で実行してみる sudo su postgres -c 'sh postgresql-import.sh /tmp/db/backup_pg_dumpall.sql'
【4】トラブル
1)エラー「対向(peer)認証に失敗しました」が表示
シェルスクリプトを実行時に、 エラー「psql: FATAL: ユーザ "postgres" で対向(peer)認証に失敗しました」が表示
解決策
sudo su postgres -c '【実行するコマンド】'
例
sudo su postgres -c 'sh postgresql-dump-export.sh /tmp/db'
参考文献
https://qiita.com/tomlla/items/9fa2feab1b9bd8749584
https://qiita.com/mint/items/83213bb60827f26a9cb1
関連記事
ER図生成ツール ~ SchemaSpy ~
https://dk521123.hatenablog.com/entry/2023/06/29/234745
バックアップ・リストア ~ pg_dump / pg_restore ~
https://dk521123.hatenablog.com/entry/2015/04/22/232655
【Linux】【シェル】【MySQL】MySQLの全DBをエクスポート/インポートするスクリプト
PostgreSQL のインストールおよび設定 ~ Debian編 ~
【Linux】 cronデーモン / crontabコマンド