【redash】dumpファイルからの復旧/データ移行【Docker】

【redash】Dockerコンテナ内部からdumpデータを取得【シェルスクリプト】


↑dumpデータの取得はこちらで。

dumpデータから redash のレストア/データ移行手順になります。

# コンテナ停止
docker-compose -f docker-compose-redash.yml down --remove-orphans

# PostgreSQLのコンテナのみ起動
docker container run -d -v /path/to/postgres-data:/var/lib/postgresql/data -p 5432:5432 postgres:9.5.6-alpine

# PostgreSQLのコンテナIDを確認
docker ps | grep postgres | awk '{print $1}'

# dumpファイルをコンテナに転送
docker container cp /path/to/redash-backup_$(date +"%Y%m%d").gz [コンテナID]:/usr/local/redash-backup_$(date +"%Y%m%d").gz

# DBの削除
docker container exec [コンテナID] /bin/bash -c 'psql -c "drop database if exists postgres" -U postgres template1'

# DBの作成
docker container exec [コンテナID] /bin/bash -c 'psql -c "create database postgres" -U postgres template1'

# dumpデータのインポート
docker container exec [コンテナID] /bin/bash -c 'zcat /usr/local/redash-backup_$(date +"%Y%m%d").gz | psql -U postgres -d postgres'

# PostgreSQLのコンテナ停止
docker container stop [コンテナID]

# PostgreSQLのコンテナ削除
docker container rm [コンテナID]

# コンテナ起動
docker-compose -f docker-compose-redash.yml up -d

↓redash の構築方法はこちら

【Docker】redashの構築【CentOS7】

【redash】Dockerコンテナ内部からdumpデータを取得【シェルスクリプト】

そういえば redash のバックアップを取得していなかったなと気づきまして。
どうやらコンテナ内部の PostgreSQL の dumpデータを取得するればいいようです。

↓こんな感じのシェルスクリプトをcronで定期実行すればいいですね!

#!/bin/sh

# バックアップディレクトリを定義
BACKUP_DIR=/var/backup
# バックアップファイルを保持する期間を定義
TIME=3

# DBのコンテナIDを取得
CID=$(docker container ls | grep postgres | awk '{print $1}')

# dumpを取得
docker container exec ${CID} /bin/bash -c 'pg_dump -U postgres postgres | gzip > /usr/local/redash-backup.gz'

# ホストにdumpを転送
docker container cp ${CID}:/usr/local/redash-backup.gz ${BACKUP_DIR}/redash-backup_$(date +"%Y%m%d").gz

# dumpのローテート設定
find ${BACKUP_DIR}/ -daystart -name '*.gz' -mtime +${TIME} -delete

↓redashの構築方法はこちら

【Docker】redashの構築【CentOS7】

【Docker】redashの構築【CentOS7】

担当した案件で CentOS7 に redash を導入したんでその時の備忘録になります。
なんか色々と嵌った気がします。

# 必要なパッケージの導入
yum install epel-release -y
yum install docker docker-compose -y

# docker操作用の権限を一般ユーザに追加
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo systemctl restart docker


# docker-compose.ymlファイルを用意
cat <<EOF > docker-compose-redash.yml
version: '2'
services:
  redis:
    image: redis:3.0-alpine
    restart: always

  server:
    image: redash/redash:latest
    command: server
    depends_on:
      - postgres
      - redis
    ports:
      - "5000:5000"
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      REDASH_COOKIE_SECRET: veryverysecret
      REDASH_WEB_WORKERS: 4
    restart: always

  worker:
    image: redash/redash:latest
    command: scheduler
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      QUEUES: "queries,scheduled_queries,celery"
      WORKERS_COUNT: 2
    restart: always

  postgres:
    image: postgres:9.5.6-alpine
    volumes:
      - ~/postgres-data:/var/lib/postgresql/data
    restart: always
EOF

# docker上に環境構築
docker-compose -f docker-compose-redash.yml run --rm server create_db

# docker上のredash起動
docker-compose -f docker-compose-redash.yml up -d

5000ポートで listen するんで、フロントに Nginx を置いてリバプロするのがいいですね。