<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Discover Docker, K8s and Hashicorp Nomad with Maksym Prokopov: posts tagged backup</title>
<link>https://blog.it-premium.com.ua/tags/backup/</link>
<description>The blog about containerisation, virtual machines and useful shell snippets and findings</description>
<author></author>
<language>en</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>The blog about containerisation, virtual machines and useful shell snippets and findings</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Backup to Hetzner storage box from low-end D-Link NAS</title>
<guid isPermaLink="false">183</guid>
<link>https://blog.it-premium.com.ua/all/backup-to-hetzner-storage-box-from-low-end-d-link-nas/</link>
<pubDate>Fri, 18 Aug 2017 09:55:54 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/backup-to-hetzner-storage-box-from-low-end-d-link-nas/</comments>
<description>
&lt;p&gt;Here is short script you can use to make backups into Hetzner storage box using CIFS aka Windows Share.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mount.cifs //uXXXXXX.your-storagebox.de/backup /mnt/hetzner/ -o user=uXXXXXX,pass=YYYYYYYY
cp -r /mnt/HD/HD_a2/backups2/hourly.0/ /mnt/hetzner/dns-320
umount /mnt/hetzner&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Deadly simple.&lt;/p&gt;
&lt;p&gt;And what I want is to backup everything what has been done by the rsnapshot, that’s why I’ve added following to the crontab&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;...
30 3 * * *  rsnapshot daily &amp;amp;&amp;amp; /mnt/HD/HD_a2/ffp/home/root/backup-hetzner.sh
...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So right after rsnapshot finish its job backup to remote host starts.&lt;/p&gt;
</description>
</item>

<item>
<title>Fully automated docker mysql database backup from remote low-end NAS</title>
<guid isPermaLink="false">182</guid>
<link>https://blog.it-premium.com.ua/all/fully-automated-mysql-database-dump-backup-from-remote-host/</link>
<pubDate>Thu, 17 Aug 2017 10:27:09 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/fully-automated-mysql-database-dump-backup-from-remote-host/</comments>
<description>
&lt;p&gt;The main idea is to have fully automated docker database backup from low end D-Link NAS DNS-320.&lt;/p&gt;
&lt;p&gt;Solution design is following:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;My backup box will copy backup.sh script to the remote coreos-03 host.&lt;/li&gt;
&lt;li&gt;Then remote host copies backup.sh script into database container.&lt;/li&gt;
&lt;li&gt;Backup box executes docker command “docker exec itservice_db_1 backup.sh” on coreos-03 host, which, in turn, executes mysqlbackup. SQL dump is captured directly from command output and then gzipped.&lt;/li&gt;
&lt;li&gt;Rsnapshot saves folder with gzipped SQL dump and rotates old backup folders as necessary.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So, we will need only&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ssh&lt;/li&gt;
&lt;li&gt;tar&lt;/li&gt;
&lt;li&gt;rsnapshot&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is my working implementation:&lt;/p&gt;
&lt;p&gt;script backup.sh&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;#!/bin/bash
## env vars are already in docker container
/usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;script backup-coreos-itservice.sh&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/ffp/bin/scp /ffp/home/root/backup.sh core@coreos-03:/home/core/itservice/backup.sh
/usr/sbin/ssh -C core@coreos-03 &amp;quot;docker cp /home/core/itservice/backup.sh itservice_db_1:/usr/local/bin/backup.sh&amp;quot;
/usr/sbin/ssh -C core@coreos-03 &amp;quot;docker exec itservice_db_1 /usr/local/bin/backup.sh&amp;quot; &amp;gt; latest.sql
/opt/bin/tar czf itservice-sql-dump.tar.gz latest.sql --remove-files&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;rsnapshot.conf&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;...
backup_script/mnt/HD/HD_a2/ffp/home/root/backup-coreos-itservice.shcoreos-03/itservice_db_1
...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;crontab&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;0 */4 * * * rsnapshot hourly
30 3 * * *  rsnapshot daily
0  3 * * 1  rsnapshot weekly
30 2 1 * *  rsnapshot monthly&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Keep in mind, that you will need to generate ssh keys for your backup box and add it to authorized_keys on coreos-03 host, but this is out of scope this article.&lt;/p&gt;
</description>
</item>

<item>
<title>Simple docker mysql backup/restore</title>
<guid isPermaLink="false">169</guid>
<link>https://blog.it-premium.com.ua/all/simple-docker-mysql-backup-restore/</link>
<pubDate>Fri, 13 Jan 2017 09:35:03 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/simple-docker-mysql-backup-restore/</comments>
<description>
&lt;p&gt;&lt;a href="https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb"&gt;https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Backup&lt;/h2&gt;
&lt;p&gt;docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE &gt; backup.sql&lt;/p&gt;
&lt;h2&gt;Restore&lt;/h2&gt;
&lt;p&gt;cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE&lt;/p&gt;
</description>
</item>

<item>
<title>More secure mysqldump for docker container</title>
<guid isPermaLink="false">159</guid>
<link>https://blog.it-premium.com.ua/all/more-secure-mysqldump-for-docker-container/</link>
<pubDate>Tue, 18 Oct 2016 10:58:29 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/more-secure-mysqldump-for-docker-container/</comments>
<description>
&lt;p&gt;In case you have warning message about insecure user and password usage from command line you can do following:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;use mysql_config_editor set &lt;s&gt;login-path=local &lt;/s&gt;host=localhost &lt;s&gt;user=db_user &lt;/s&gt;password executed in container via exec. That will create encrypted file.&lt;/li&gt;
&lt;li&gt;Specify --login-path=local instead of -u user and -p password in your backup script.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have my backups via rsnapshot. This is something like TimeMachine for Mac with handy directory structure and without duplication.&lt;/p&gt;
&lt;p&gt;And my backup script looks like this:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/usr/bin/ssh -i /mnt/HD/HD_a2/ffp/home/root/id_rsa_nexus.key -C core@myipaddress &amp;quot;docker exec itservice_db_1 mysqldump --login-path=local itservice_production&amp;quot; &amp;gt;
 mysqlbackup.sql&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That will create mysql dump on your remote backup host without passing user and password in more secure way.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;docker-compose exec db mysql_config_editor set --login_path=local --host=localhost --user=itservice --password&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;will ask password and save credentials in container.&lt;/p&gt;
&lt;p&gt;Resources: &lt;a href="http://stackoverflow.com/questions/20751352/suppress-warning-messages-using-mysql-from-within-terminal-but-password-written"&gt;http://stackoverflow.com/questions/20751352/suppress-warning-messages-using-mysql-from-within-terminal-but-password-written&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Еще один быстрый скрипт для бекапа mysql из docker</title>
<guid isPermaLink="false">135</guid>
<link>https://blog.it-premium.com.ua/all/esche-odin-bystry-skript-dlya-bekapa-mysql-iz-docker/</link>
<pubDate>Thu, 21 Jul 2016 11:59:16 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/esche-odin-bystry-skript-dlya-bekapa-mysql-iz-docker/</comments>
<description>
&lt;p&gt;Мой предыдущий &lt;a href="http://blog.it-premium.com.ua/all/prostoy-sposob-sdelat-bekap-mysql-v-docker-konteynere/"&gt;способ “просто запусти и залинкуй контейнер”&lt;/a&gt; разбился о проблемы с поддержкой mysql версии 5.7 и выше и то, что docker-compose версии 2 не поддерживает публикацию environment переменных слинкованного контейнера.&lt;/p&gt;
&lt;p&gt;Поэтому пришлось разработать свой, крайне простой способ для выгрузки mysql бекапа из mysql контейнера. Поскольку у mysql свой хитры entrypoint, простая замена CMD не работала.&lt;/p&gt;
&lt;p&gt;Вот работающий код.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;docker run \
    --rm \
    --link container_db_1:db \
    --entrypoint &amp;quot;/usr/bin/mysqldump&amp;quot; mysql:5 -hdb -uroot -proot database &amp;gt; ./backup/mysql-latest.sql&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;обратите внимание, что &gt; ./backup/mysql-latest.sql завернет вывод из контейнера в файл на хосте, а не внутри.&lt;/p&gt;
&lt;p&gt;В качестве образа mysql:5 используйте тот образ, который уже используется в вашем проекте (mysql:5.6, например).&lt;/p&gt;
&lt;p&gt;Чуть позднее сделаю рецепт для ansible.&lt;/p&gt;
</description>
</item>

<item>
<title>История про баг в бекапе confirm/mysql-backup</title>
<guid isPermaLink="false">126</guid>
<link>https://blog.it-premium.com.ua/all/istoriya-pro-bag-v-bekape-confirm-mysql-backup/</link>
<pubDate>Mon, 18 Jul 2016 15:55:01 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/istoriya-pro-bag-v-bekape-confirm-mysql-backup/</comments>
<description>
&lt;p&gt;Прекрасная идея и достойное воплощение &lt;a href="https://blog.confirm.ch/backup-mysql-mariadb-docker-container/"&gt;MySQL бекапов прямо из контейнера&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Разбилась об изменение в дефолтном MySQL 5.7 TIMESTAMP&lt;br /&gt;
&lt;a href="http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html"&gt;http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;О чем и &lt;a href="https://github.com/maxbube/mydumper/issues/6"&gt;отрепортил автору mydumper на github&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Простой способ сделать бекап MySQL в Docker контейнере</title>
<guid isPermaLink="false">124</guid>
<link>https://blog.it-premium.com.ua/all/prostoy-sposob-sdelat-bekap-mysql-v-docker-konteynere/</link>
<pubDate>Thu, 14 Jul 2016 13:38:55 +0100</pubDate>
<author></author>
<comments>https://blog.it-premium.com.ua/all/prostoy-sposob-sdelat-bekap-mysql-v-docker-konteynere/</comments>
<description>
&lt;p&gt;существует такой специальный контейнер confirm/mysql-backup, который создан, что бы делать бекапы&lt;/p&gt;
&lt;p&gt;для этого запустите контейнер с маппингом my_local_backup_dir:/backups и будет создан свежий бекап и положен в вашу my_local_backup_dir.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;docker run --name demo_backup --link demo_db -v /var/demo_backup:/backup -d confirm/mysql-backup&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Для восстановления добавьте ключ окружения MODE=RESTORE&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;docker run --name demo_backup --link demo_db -v /var/demo_backup:/backup -d confirm/mysql-backup -e MODE=RESTORE&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Подробнее здесь &lt;a href="https://blog.confirm.ch/backup-mysql-mariadb-docker-container/"&gt;https://blog.confirm.ch/backup-mysql-mariadb-docker-container/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Рецепт для Ansible&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;- name: backup mysql container
  hosts: coreos
  tasks:
    - name: backup mysql
      docker_container:
        name: mysql-backup
        image: confirm/mysql-backup
        links:
          - mprokopovmichellekievua_db_1
        volumes:
          - /home/core/sql:/backup&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;после выполнения контейнера будет создан бекап следующего вида:&lt;br /&gt;
каталог export-20160714-124628&lt;br /&gt;
в котором будут отдельно файлы схемы и данных по таблицам:&lt;/p&gt;
&lt;p&gt;metadata michelle_wordpress.wp_postmeta-schema.sql.gz michelle_wordpress.wp_term_taxonomy-schema.sql.gz  michelle_wordpress.wp_usermeta.sql.gz&lt;br /&gt;
michelle_wordpress.wp_commentmeta-schema.sql.gz  michelle_wordpress.wp_postmeta.sql.gz michelle_wordpress.wp_term_taxonomy.sql.gz    michelle_wordpress.wp_users-schema.sql.gz&lt;br /&gt;
michelle_wordpress.wp_comments-schema.sql.gz michelle_wordpress.wp_posts-schema.sql.gz michelle_wordpress.wp_termmeta-schema.sql.gz    michelle_wordpress.wp_users.sql.gz&lt;br /&gt;
michelle_wordpress.wp_links-schema.sql.gz michelle_wordpress.wp_posts.sql.gz michelle_wordpress.wp_terms-schema.sql.gz&lt;br /&gt;
michelle_wordpress.wp_options-schema.sql.gz michelle_wordpress.wp_term_relationships-schema.sql.gz  michelle_wordpress.wp_terms.sql.gz&lt;br /&gt;
michelle_wordpress.wp_options.sql.gz michelle_wordpress.wp_term_relationships.sql.gz michelle_wordpress.wp_usermeta-schema.sql.gz&lt;/p&gt;
</description>
</item>


</channel>
</rss>