<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://znil.net/index.php?action=history&amp;feed=atom&amp;title=Veeam_Backup_MySQL_oder_MariaDB</id>
	<title>Veeam Backup MySQL oder MariaDB - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://znil.net/index.php?action=history&amp;feed=atom&amp;title=Veeam_Backup_MySQL_oder_MariaDB"/>
	<link rel="alternate" type="text/html" href="https://znil.net/index.php?title=Veeam_Backup_MySQL_oder_MariaDB&amp;action=history"/>
	<updated>2026-04-29T08:21:36Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in znilwiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://znil.net/index.php?title=Veeam_Backup_MySQL_oder_MariaDB&amp;diff=10778&amp;oldid=prev</id>
		<title>BLinz: /* Vorwort */</title>
		<link rel="alternate" type="text/html" href="https://znil.net/index.php?title=Veeam_Backup_MySQL_oder_MariaDB&amp;diff=10778&amp;oldid=prev"/>
		<updated>2018-04-20T10:10:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Vorwort&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Vorwort==&lt;br /&gt;
Auf Grundlage von dieser Quelle:&amp;lt;br&amp;gt;&lt;br /&gt;
 https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html&lt;br /&gt;
Hab ich mir folgende Methoden für die Sicherung einer MySQL-Instanz erstellt. In dem Beispiel handelt es sich um einen Zabbix Server unter Ubuntu 16.04., das ganze sollte aber auf quasi jeder Linux-Distribution mit installierten VMware-Tools funktionieren.&amp;lt;br&amp;gt;&lt;br /&gt;
Auf die erste Methode war ich selbst kommen - unter obigen Link gibt es eine Version mit Timeout, bei mir ohne.&lt;br /&gt;
Die 2. Lösung habe ich ergoogelt und die Skripts an meine Bedürfnisse angepasst.&amp;lt;br&amp;gt;&lt;br /&gt;
Die Lorbeeren dafür gebühren [https://www.linkedin.com/in/pascaldimarco/?locale=de_DE Pascal Di Marco]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Methode 1: Cold Backup - Zabbix und Datenbank anhalten==&lt;br /&gt;
Bei dieser Methode passiert folgendes:&lt;br /&gt;
* Die Zabbix-Server und die Datenbank werden vor einem Snapshot angehalten&lt;br /&gt;
* Der Snapshot wird erstellt&lt;br /&gt;
* Die Datenbank und der Zabbix-Server werden wieder gestartet&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:&amp;lt;br&amp;gt;&lt;br /&gt;
 nano /usr/sbin/pre-freeze-script&lt;br /&gt;
mit folgendem Inhalt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo &amp;quot;$(date) pre-freeze start&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
systemctl stop zabbix-server.service&lt;br /&gt;
systemctl stop mysql.service&lt;br /&gt;
echo &amp;quot;$(date) pre-freeze stop&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
und&amp;lt;br&amp;gt;&lt;br /&gt;
 nano /usr/sbin/post-thaw-script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo &amp;quot;$(date) post-thaw start&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
systemctl start mysql.service&lt;br /&gt;
systemctl start zabbix-server.service&lt;br /&gt;
echo &amp;quot;$(date) post-thaw stop&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod 0700 /usr/sbin/pre-freeze-script&lt;br /&gt;
 chmod 0700 /usr/sbin/post-thaw-script&lt;br /&gt;
 chown root:root /usr/sbin/pre-freeze-script&lt;br /&gt;
 chown root:root /usr/sbin/post-thaw-script&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voraussetzung ist das die VMware-Tools installiert sind!&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.&amp;lt;br&amp;gt; &lt;br /&gt;
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:&amp;lt;br&amp;gt;&lt;br /&gt;
:[[Datei:Pre-and-Post-Scripts-001.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn wir uns die Logs ansehen sollte&lt;br /&gt;
* Ein Eintrag in die Datei {{Key|/tmp/snapshot.log}} vorgenommen&lt;br /&gt;
* Der Zabbix-Server gestoppt&lt;br /&gt;
* Der MySQL-Server gestoppt&lt;br /&gt;
* Wieder ein Eintrag in die Datei {{Key|/tmp/snapshot.log}} geschrieben&lt;br /&gt;
* Der MySQL-Server wieder gestartet&lt;br /&gt;
* Der Zabbix-Server wieder gestartet&lt;br /&gt;
werden.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Hinweis| Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!}}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==Methode 2: Hot Backup - Datenbank einfrieren==&lt;br /&gt;
Bei dieser Methode passiert folgendes:&lt;br /&gt;
* Die Datenbank wird vor einem Snapshot auf &amp;quot;READ ONLY&amp;quot; gesetzt - zuvor werden noch alle Daten geschrieben (&amp;quot;FLUSH TABLES&amp;quot;)&lt;br /&gt;
* Der Snapshot wird erstellt&lt;br /&gt;
* Die Datenbank wird wieder für Schreibzugriffe freigegeben&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Unter VMware funktioniert das mit 2 Skripten die wir wie folgt anlegen:&amp;lt;br&amp;gt;&lt;br /&gt;
 nano /usr/sbin/pre-freeze-script&lt;br /&gt;
mit folgendem Inhalt:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# 2018-04-20 Bernhard Linz&lt;br /&gt;
# Original script by Pascal Di Marco, check https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html for more information&lt;br /&gt;
# Log will be write to syslog and(!) to /tmp/snapshot.log&lt;br /&gt;
echo &amp;quot;$0 pre-freeze start&amp;quot; | logger&lt;br /&gt;
echo &amp;quot;-------------------------------------------------------------------------------------&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
echo &amp;quot;$0 $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) pre-freeze start&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
# Set Username and Passwort for MySQL Access. Set mysql_password=&amp;quot;&amp;quot; if no password needed&lt;br /&gt;
mysql_username=&amp;quot;root&amp;quot;&lt;br /&gt;
mysql_password=&amp;quot;ThePassword&amp;quot;&lt;br /&gt;
timeout=300&lt;br /&gt;
&lt;br /&gt;
# ************************************************************************************************&lt;br /&gt;
# No Changes behind this line!&lt;br /&gt;
# ************************************************************************************************&lt;br /&gt;
# Check if username + password is used&lt;br /&gt;
if [ -n &amp;quot;$mysql_password&amp;quot; ]; then&lt;br /&gt;
    use_credentials=&amp;quot;-u$mysql_username -p$mysql_password&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    use_credentials=&amp;quot;&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Name of the Lockfile&lt;br /&gt;
lock_file=/tmp/mysql_tables_read_lock&lt;br /&gt;
&lt;br /&gt;
sleep_time=$((timeout+10))&lt;br /&gt;
rm -f $lock_file&lt;br /&gt;
echo &amp;quot;$0 executing FLUSH TABLES WITH READ LOCK&amp;quot; | logger&lt;br /&gt;
echo &amp;quot;$0 $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) executing FLUSH TABLES WITH READ LOCK&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
&lt;br /&gt;
# Start READ LOCK - Process will send to background (and will still run after script is completed. Lock will stop if process is stopped&lt;br /&gt;
# After READ ONLY mode is entered the lockfile will be created. Process will stop when getting stop signal from post-thaw-script or timeout reached&lt;br /&gt;
mysql $use_credentials -e &amp;quot;FLUSH TABLES WITH READ LOCK; system touch $lock_file; system nohup sleep $sleep_time; system echo lock released|logger; &amp;quot; &amp;gt; /dev/null &amp;amp;&lt;br /&gt;
# get the PID of the mysql process&lt;br /&gt;
mysql_pid=$!&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$0 child pid $mysql_pid&amp;quot; | logger&lt;br /&gt;
echo &amp;quot;$0 $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) child pid $mysql_pid&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
&lt;br /&gt;
# Waiting for the lockfile ...&lt;br /&gt;
c=0&lt;br /&gt;
while [ ! -f $lock_file ]&lt;br /&gt;
do&lt;br /&gt;
    # check if mysql is running&lt;br /&gt;
    if ! ps -p $mysql_pid 1&amp;gt;/dev/null ; then&lt;br /&gt;
        echo &amp;quot;$0 mysql command has failed (bad credentials?)&amp;quot; | logger&lt;br /&gt;
        echo &amp;quot;$0 $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) mysql command has failed (bad credentials?)&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
        exit 1&lt;br /&gt;
    fi&lt;br /&gt;
    sleep 1&lt;br /&gt;
    c=$((c+1))&lt;br /&gt;
    # check if the script run into timeout&lt;br /&gt;
    if [ $c -gt $timeout ]; then&lt;br /&gt;
        echo &amp;quot;$0 timed out waiting for lock&amp;quot; | logger&lt;br /&gt;
        echo &amp;quot;$0 $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) timed out waiting for lock&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
        touch $lock_file&lt;br /&gt;
        kill $mysql_pid&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
# write PID into the lockfile&lt;br /&gt;
echo $mysql_pid &amp;gt; $lock_file&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$0 pre-freeze stop&amp;quot; | logger&lt;br /&gt;
echo &amp;quot;$0 $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) pre-freeze stop&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
und&amp;lt;br&amp;gt;&lt;br /&gt;
 nano /usr/sbin/post-thaw-script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# 2018-04-20 Bernhard Linz&lt;br /&gt;
# Original script by Pascal Di Marco, check https://www.veeam.com/wp-consistent-protection-mysql-mariadb.html for more information&lt;br /&gt;
# Log will be write to syslog and(!) to /tmp/snapshot.log&lt;br /&gt;
echo &amp;quot;$0 post-thaw start&amp;quot; | logger&lt;br /&gt;
echo &amp;quot;$0  $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) post-thaw start&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
&lt;br /&gt;
lock_file=/tmp/mysql_tables_read_lock&lt;br /&gt;
&lt;br /&gt;
# get PID from lockfile&lt;br /&gt;
mysql_pid=$(cat $lock_file)&lt;br /&gt;
echo &amp;quot;$0 sending sigterm to $mysql_pid&amp;quot; | logger&lt;br /&gt;
echo &amp;quot;$0  $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) sending sigterm to $mysql_pid&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
# and send stop to process&lt;br /&gt;
pkill -9 -P $mysql_pid&lt;br /&gt;
rm -f $lock_file&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;$0 post-thaw stop&amp;quot; | logger&lt;br /&gt;
echo &amp;quot;$0  $(date &amp;#039;+%Y-%m-%d %H:%M:%S&amp;#039;) post-thaw stop&amp;quot; &amp;gt;&amp;gt; /tmp/snapshot.log&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jetzt müssen wir die beiden Skripte noch ausführbar machen und dem root zuordnen:&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod 0700 /usr/sbin/pre-freeze-script&lt;br /&gt;
 chmod 0700 /usr/sbin/post-thaw-script&lt;br /&gt;
 chown root:root /usr/sbin/pre-freeze-script&lt;br /&gt;
 chown root:root /usr/sbin/post-thaw-script&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Voraussetzung ist das die VMware-Tools installiert sind!&amp;lt;br&amp;gt;&lt;br /&gt;
Dabei ist es egal ob es sich um die Original VMware-Tools oder um die Open-VM-Tools aus den Repositories handelt.&amp;lt;br&amp;gt; &lt;br /&gt;
Nun können wir die Skripts testen indem wir einen Snapshot mit den folgenden Einstellungen erstellen:&amp;lt;br&amp;gt;&lt;br /&gt;
:[[Datei:Pre-and-Post-Scripts-001.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Beispielausgabe aus der &amp;lt;code&amp;gt;\tmp\snapshot.log&amp;lt;/code&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
 -------------------------------------------------------------------------------------&lt;br /&gt;
 /usr/sbin/pre-freeze-script 2018-04-20 11:37:12 pre-freeze start&lt;br /&gt;
 /usr/sbin/pre-freeze-script 2018-04-20 11:37:12 executing FLUSH TABLES WITH READ LOCK&lt;br /&gt;
 /usr/sbin/pre-freeze-script 2018-04-20 11:37:12 child pid 10992&lt;br /&gt;
 /usr/sbin/pre-freeze-script 2018-04-20 11:37:13 pre-freeze stop&lt;br /&gt;
 /usr/sbin/post-thaw-script  2018-04-20 11:37:16 post-thaw start&lt;br /&gt;
 /usr/sbin/post-thaw-script  2018-04-20 11:37:16 sending sigterm to 10992&lt;br /&gt;
 /usr/sbin/post-thaw-script  2018-04-20 11:37:16 post-thaw stop&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Zabbix selbst nimmt den Vorgang relativ locker und meldet einige &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;slow query&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; bei &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;inserts&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{Hinweis| Das ganze funktioniert sowohl mit den original VMware-Tools als auch den Open-VM-Tools!}}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==Kommentare==&lt;br /&gt;
&amp;lt;comments /&amp;gt;&lt;/div&gt;</summary>
		<author><name>BLinz</name></author>
	</entry>
</feed>