<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>mariadb on Daan Geijs</title>
    <link>https://www.daangeijs.nl/tags/mariadb/</link>
    <description>Recent content in mariadb on Daan Geijs</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 25 Apr 2023 12:48:00 +0100</lastBuildDate><atom:link href="https://www.daangeijs.nl/tags/mariadb/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Automating MariaDB Backups in Docker with a Shell Script</title>
      <link>https://www.daangeijs.nl/posts/mariadb-backup/</link>
      <pubDate>Tue, 25 Apr 2023 12:48:00 +0100</pubDate>
      
      <guid>https://www.daangeijs.nl/posts/mariadb-backup/</guid>
      <description>Backing up your data regularly is essential, especially for critical applications like Home Assistant running MariaDB in a Docker container. This article will guide you through creating scripts that automate the backup and restoration processes, designed to be flexible by accepting arguments for the password and paths.</description>
      <content:encoded><![CDATA[<h3 id="introduction">Introduction</h3>
<p>Backing up your data regularly is essential, especially for critical applications like Home Assistant running MariaDB in a Docker container. This article will guide you through creating scripts that automate the backup and restoration processes, designed to be flexible by accepting arguments for the password and paths.</p>
<h3 id="prerequisites">Prerequisites</h3>
<ul>
<li>Docker installed and running.</li>
<li>MariaDB container running with your data.</li>
</ul>
<h3 id="backup-script-with-arguments">Backup Script with Arguments</h3>
<p>To make our backup process versatile and reusable, we&rsquo;ll create a shell script that accepts two arguments:</p>
<ol>
<li>MariaDB password</li>
<li>Backup folder path</li>
</ol>
<h4 id="script-creation">Script Creation</h4>
<ol>
<li>Create and open a new script:</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nano /path_to_scripts_folder/backup_mariadb.sh
</span></span></code></pre></div><ol start="2">
<li>Copy and paste the following content:</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="c1"># Check if the right number of arguments are provided</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> <span class="s2">&#34;</span><span class="nv">$#</span><span class="s2">&#34;</span> -ne <span class="m">2</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;Usage: </span><span class="nv">$0</span><span class="s2"> &lt;password&gt; &lt;backup_folder_path&gt;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">PASSWORD</span><span class="o">=</span><span class="nv">$1</span>
</span></span><span class="line"><span class="cl"><span class="nv">BACKUP_PATH</span><span class="o">=</span><span class="nv">$2</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">docker <span class="nb">exec</span> mariadb /usr/bin/mysqldump -u homeassistant --password<span class="o">=</span><span class="nv">$PASSWORD</span> --all-databases <span class="p">|</span> gzip &gt; <span class="s2">&#34;</span><span class="nv">$BACKUP_PATH</span><span class="s2">/database_backup_</span><span class="k">$(</span>date +<span class="se">\%</span>F<span class="k">)</span><span class="s2">.sql.gz&#34;</span>
</span></span></code></pre></div><ol start="3">
<li>
<p>Save and exit the editor.</p>
</li>
<li>
<p>Make the script executable:</p>
</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">chmod +x /path_to_scripts_folder/backup_mariadb.sh
</span></span></code></pre></div><p>Now, run the script, passing the password and backup folder path as arguments:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/path_to_scripts_folder/backup_mariadb.sh your_password /path_to_backup_folder/
</span></span></code></pre></div><h3 id="scheduling-backups-with-crontab">Scheduling Backups with Crontab</h3>
<p>To automate the backup process daily:</p>
<ol>
<li>Open the crontab:</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">crontab -e
</span></span></code></pre></div><ol start="2">
<li>Add the following line to run the script every day at 3 am:</li>
</ol>
<pre tabindex="0"><code>0 3 * * * /path_to_scripts_folder/backup_mariadb.sh your_password /path_to_backup_folder/
</code></pre><h3 id="restoring-the-database-from-backup">Restoring the Database from Backup</h3>
<h4 id="restoration-script-with-arguments">Restoration Script with Arguments</h4>
<p>To simplify the restoration process, we&rsquo;ll create a separate shell script that accepts two arguments:</p>
<ol>
<li>MariaDB password</li>
<li>Path to the backup file you want to restore</li>
</ol>
<h5 id="script-creation-1">Script Creation</h5>
<ol>
<li>Create and open a new script:</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nano /path_to_scripts_folder/restore_mariadb.sh
</span></span></code></pre></div><ol start="2">
<li>Copy and paste the following content:</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="c1"># Check if the right number of arguments are provided</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> <span class="s2">&#34;</span><span class="nv">$#</span><span class="s2">&#34;</span> -ne <span class="m">2</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;Usage: </span><span class="nv">$0</span><span class="s2"> &lt;password&gt; &lt;backup_file_path&gt;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">PASSWORD</span><span class="o">=</span><span class="nv">$1</span>
</span></span><span class="line"><span class="cl"><span class="nv">BACKUP_FILE</span><span class="o">=</span><span class="nv">$2</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">gunzip &lt; <span class="s2">&#34;</span><span class="nv">$BACKUP_FILE</span><span class="s2">&#34;</span> <span class="p">|</span> docker <span class="nb">exec</span> -i mariadb /usr/bin/mysql -u homeassistant --password<span class="o">=</span><span class="nv">$PASSWORD</span>
</span></span></code></pre></div><ol start="3">
<li>
<p>Save and exit the editor.</p>
</li>
<li>
<p>Make the script executable:</p>
</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">chmod +x /path_to_scripts_folder/restore_mariadb.sh
</span></span></code></pre></div><p>Now, run the script, passing the password and the path to the backup file as arguments:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/path_to_scripts_folder/restore_mariadb.sh your_password /path_to_backup_folder/database_backup_YOUR_DATE.sql.gz
</span></span></code></pre></div><h4 id="notes-on-restoration">Notes on Restoration</h4>
<ol>
<li><strong>Backup before restore</strong>: Always take a fresh backup before starting the restoration process. This ensures you have a fallback if the restore doesn&rsquo;t go as planned.</li>
<li><strong>Check Compatibility</strong>: Ensure the MariaDB version you are restoring to is compatible with the version from which you took the backup.</li>
<li><strong>Downtime Considerations</strong>: Depending on the size of your database and the restoration environment&rsquo;s performance, the restoration process might take some time. Plan accordingly.</li>
</ol>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
