Подцепляем прод БД на свой компьютер

Иногда надо использовать продовую БД на своей локальной машине.
Например mysql

(далее все описано под мак)

Шаг первый, прокидываем mysql на свой компьютер:

/usr/local/bin/sshpass  -p ПАРОЛЬ  ssh -p22224 -L 3311:127.0.0.1:3306 ubuntu_admin1@200.200.200.200

В последней сборке запретили использовать sshpass, но это можно обойти

Итак, p22224 — это порт удаленной машины

-L 3311:127.0.0.1:3306 — это означает открыть локально порт 3311 с удаленной машины 127.0.0.1:3306

ubuntu_admin1@200.200.200.200 — это куда мы ципляемся

Дальше, в своей программе, которая запущена в докере пишем host.docker.internal или docker.for.mac.host.internal или docker.for.mac.localhost
Все!!!

Docker v 18.03 и выше (с 21 марта 2018 года)

Используйте свой внутренний адрес IP или подключитесь к специальному имени DNS host.docker.internal , которое будет преобразовано во внутренний адрес IP, используемый хостом.

Linux ожидающая поддержки https://github.com/docker/for-linux/issues/264

MacOS с более ранними версиями Docker
Docker для Mac с v 17.12 по v 18.02

То же, что и выше, но вместо этого используйте docker.for.mac.host.internal .

Docker для Mac с v 17.06 по v 17.11

То же, что и выше, но вместо этого используйте docker.for.mac.localhost .

Решение проблемы нашлось тут https://coderoad.ru/24319662/%D0%9A%D0%B0%D0%BA-%D0%BC%D0%BD%D0%B5-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%D1%81%D1%8F-%D0%BA-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D1%83-localhost-%D0%B8%D0%B7%D0%BD%D1%83%D1%82%D1%80%D0%B8-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B0-Docker

macos wine

После 10.15  на macOS нельзя ставить 32битные приложения, они просто не запускаются, а вместе с этим мы потеряли wine

 

Но оказывается все еще можно запустить приложухи (а мне очень не хватало HeidiSQL) через playonmac  https://www.playonmac.com/en/

И да, она работает, правда очень странно как и до этого в wine, но все же

Снимок экрана 2021-08-08 в 23.56.07

Backup/Restore a dockerized PostgreSQL database

Backup your databases

docker exec -t your-db-container pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

Restore your databases

cat your_dump.sql | docker exec -i your-db-container psql -U postgres

с архивированием

docker exec -t your-db-container pg_dumpall -c -U postgres | gzip > /var/data/postgres/backups/dump_date +%d-%m-%Y"_"%H_%M_%S.gz

можно бекапить через докер образ

 pgbackups:
    container_name: Backup
    image: prodrigestivill/postgres-backup-local
    restart: always
    volumes:
      - ./backup:/backups
    links:
      - db:db
    depends_on:
      - db
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_DB=${DB_NAME} 
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_EXTRA_OPTS=-Z9 --schema=public --blobs
      - SCHEDULE=@every 0h30m00s
      - BACKUP_KEEP_DAYS=7
      - BACKUP_KEEP_WEEKS=4
      - BACKUP_KEEP_MONTHS=6
      - HEALTHCHECK_PORT=81

Бонус — репликация

https://medium.com/@2hamed/replicating-postgres-inside-docker-the-how-to-3244dc2305be