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

Иногда надо использовать продовую БД на своей локальной машине.
Например 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

docker mysqldump

Рецепт бекапа mysql  БД, если она работает в докере:
Создаем скрипт:

#!/bin/bash

DATA=`date +"%Y-%m-%d_%H-%M"`

docker exec app-mysql /usr/bin/mysqldump -u bitrix  --triggers  --events --routines --password=PASS1234 bitrix | gzip -9 > "$DATA"-backup.sql.gz

 

Если надо исключить таблицы, которые не нужны, то добавляем флаг --ignore-table=БД.Таблица

 

Для bitrix актуально следующее:

--ignore-table=bitrix.b_stat_referer_list  --ignore-table=bitrix.b_stat_path  --ignore-table=bitrix.b_event_log  --ignore-table=bitrix.b_stat_guest  --ignore-table=bitrix.b_stat_session  --ignore-table=bitrix.b_stat_hit  --ignore-table=bitrix.b_stat_page  --ignore-table=bitrix.b_stat_referer  --ignore-table=bitrix.b_stat_path_cache

От потерь этих таблиц, которые содержат статистику по сайту, никто сильно не пострадает, а бекап с 5гб может уменьшиться до 30мб

 

Перенос docker images

После того, как вы собрали образ, необходимо перетащить это в прод, как правило, там нет доступа к интернету, по этому образы надо переносить архивами.

Команда для создания архива:

docker save mysql:5.6  |  gzip > mysql.tar.gz

После этого у нас будет архив, переносим на сервер и там выполняем команду

 

docker load -i mysql.tar.gz

И чтобы проверить что образ есть, выполняем команду:

docker images

 

Отправка почты из docker контейнера



 RUN apt-get update && \
  apt-get install -y msmtp && \
  apt-get clean && \
  echo "account yandex" >> ~/.msmtprc && \
  echo "logfile ~/.msmtp.log" >> ~/.msmtprc && \
  echo "host smtp.yandex.ru" >> ~/.msmtprc && \
  echo "port 587" >> ~/.msmtprc && \
  echo "from no-reply@serov.eu" >> ~/.msmtprc && \
  echo "keepbcc on" >> ~/.msmtprc && \
  echo "auth on" >> ~/.msmtprc && \
  echo "user no-reply@serov.eu" >> ~/.msmtprc && \
  echo "password Uzum2G9pkZt" >> ~/.msmtprc && \
  echo "tls on" >> ~/.msmtprc && \
  echo "tls_starttls on" >> ~/.msmtprc && \
  echo "tls_certcheck off" >> ~/.msmtprc && \
  chmod 0600 ~/.msmtprc && \
  cp -p ~/.msmtprc /etc/.msmtp_php && \ 
  chown www-data:www-data /etc/.msmtp_php && \ 
  touch /var/log/msmtp.log && \ 
  chown www-data:www-data /var/log/msmtp.log
 

в php.ini

sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a yandex -t"

Другие конфиги



account yandex
 logfile /var/log/msmtp.log
 host smtp.yandex.ru
 port 587
 from mail@yandex.ru
 keepbcc on
 auth on
 user mail@yandex.ru
 password пароль
 tls on
 tls_starttls on





account yahoo
 tls on
 tls_starttls off
 tls_certcheck off
 auth on
 host smtp.mail.yahoo.com
 user user1
 from user1@yahoo.com
 password yourYahooPa5sw0rd





account gmail
 tls on
 tls_certcheck off
 auth on
 host smtp.gmail.com
 port 587
 user user1@gmail.com
 from user1@gmail.com
 password yourgmailPassw0rd



Тестирование:


echo -e "test message" | /usr/bin/msmtp --debug -t -i name@site.ru

docker backup mysql DB

My

docker exec app-mysql /usr/bin/mysqldump -u bitrix --password=tA32KVQ bitrix | gzip -9 > backup.sql.gz

Other


# Backup
docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql

# Restore
cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE

script


#!/bin/bash

DATA=`date +"%Y-%m-%d_%H-%M"`
PATHB=/mnt/backups

# Бэкапим дампом
docker exec container_name /usr/bin/mysqldump -u root --password=rootpass db_name > "$PATHB"/"$DATA"-db_name.sql
# Жмем
/bin/gzip "$PATHB"/"$DATA"-db_name.sql
# Чистим, удаляя файлы старше 10-ти дней
/usr/bin/find "$PATHB" -type f -mtime +10 -exec rm -rf {} \;




rsync для забора с другого ПК

/usr/bin/rsync -av -e "ssh -p 17222 -i /root/.ssh/id_rsa" rsyncuser@162.111.178.155:/mnt/backups/* /backups/mysql

Backup a MySQL local or remote database
Command to backup a local or remote MySQL database using Docker:

$ docker run -it mysql /usr/bin/mysqldump -h [MYSQL_HOST] -u [MYSQL_USER] --password=[MYSQL_PASSWORD] [MYSQL_DATABASE] > backup.sql

Command to backup a local or remote MySQL database using Docker with compression (using gzip):

$ docker run -it mysql /usr/bin/mysqldump -h [MYSQL_HOST] -u [MYSQL_USER] --password=[MYSQL_PASSWORD] [MYSQL_DATABASE] | gzip -9 > backup.sql.gz

Backup a containerized MySQL database
Command to backup a containerized MySQL database creating a compressed file using Docker and gzip:

$ docker exec [MYSQL_CONTAINER] /usr/bin/mysqldump -u [MYSQL_USER] --password=[MYSQL_PASSWORD] [MYSQL_DATABASE] | gzip -9 > backup.sql.gz