dev/provisioning/modules/mysql/templates/mysqlbackup.sh.erb
author Chloe Laisne <chloe.laisne@gmail.com>
Thu, 23 Jun 2016 23:21:02 +0200
changeset 202 0446e07981db
parent 146 dc4d1cdc47e0
permissions -rwxr-xr-x
Add interval to filter component Add filter.date observer to visu-chrono Minor playlist component styling

<%- if @kernel == 'Linux' -%>
#!/bin/bash
<%- else -%>
#!/bin/sh
<%- end -%>
#
# MySQL Backup Script
#  Dumps mysql databases to a file for another backup tool to pick up.
#
# MySQL code:
# GRANT SELECT, RELOAD, LOCK TABLES ON *.* TO 'user'@'localhost'
# IDENTIFIED BY 'password';
# FLUSH PRIVILEGES;
#
##### START CONFIG ###################################################

USER=<%= @backupuser %>
PASS='<%= @backuppassword %>'
DIR=<%= @backupdir %>
ROTATE=<%= [ Integer(@backuprotate) - 1, 0 ].max %>

# Create temporary mysql cnf file.
TMPFILE=`mktemp /tmp/backup.XXXXXX` || exit 1
echo -e "[client]\npassword=$PASS\nuser=$USER" > $TMPFILE

PREFIX=mysql_backup_
<% if @ignore_events %>
ADDITIONAL_OPTIONS="--ignore-table=mysql.event"
<% else %>
ADDITIONAL_OPTIONS="--events"
<% end %>
<%# Only include routines or triggers if we're doing a file per database -%>
<%# backup. This happens if we named databases, or if we explicitly set -%>
<%# file per database mode -%>
<% if !@backupdatabases.empty? || @file_per_database -%>
<% if @include_triggers -%>
ADDITIONAL_OPTIONS="$ADDITIONAL_OPTIONS --triggers"
<% else -%>
ADDITIONAL_OPTIONS="$ADDITIONAL_OPTIONS --skip-triggers"
<% end -%>
<% if @include_routines -%>
ADDITIONAL_OPTIONS="$ADDITIONAL_OPTIONS --routines"
<% else -%>
ADDITIONAL_OPTIONS="$ADDITIONAL_OPTIONS --skip-routines"
<% end -%>
<% end -%>

##### STOP CONFIG ####################################################
PATH=<%= @execpath %>



<%- if @kernel == 'Linux' -%>
set -o pipefail
<%- end -%>

cleanup()
{
    find "${DIR}/" -maxdepth 1 -type f -name "${PREFIX}*.sql*" -mtime +${ROTATE} -print0 | xargs -0 -r rm -f
}

<% if @delete_before_dump -%>
cleanup

<% end -%>
<% if @backupdatabases.empty? -%>
<% if @file_per_database -%>
mysql --defaults-file=$TMPFILE -s -r -N -e 'SHOW DATABASES' | while read dbname
do
  mysqldump --defaults-file=$TMPFILE --opt --flush-logs --single-transaction \
    ${ADDITIONAL_OPTIONS} \
    ${dbname} <% if @backupcompress %>| bzcat -zc <% end %>> ${DIR}/${PREFIX}${dbname}_`date +%Y%m%d-%H%M%S`.sql<% if @backupcompress %>.bz2<% end  %>
done
<% else -%>
mysqldump --defaults-file=$TMPFILE --opt --flush-logs --single-transaction \
 ${ADDITIONAL_OPTIONS} \
 --all-databases <% if @backupcompress %>| bzcat -zc <% end %>> ${DIR}/${PREFIX}`date +%Y%m%d-%H%M%S`.sql<% if @backupcompress %>.bz2<% end  %>
<% end -%>
<% else -%>
<% @backupdatabases.each do |db| -%>
mysqldump --defaults-file=$TMPFILE --opt --flush-logs --single-transaction \
    ${ADDITIONAL_OPTIONS} \
 <%= db %><% if @backupcompress %>| bzcat -zc <% end %>> ${DIR}/${PREFIX}<%= db %>_`date +%Y%m%d-%H%M%S`.sql<% if @backupcompress %>.bz2<% end  %>
<% end -%>
<% end -%>

<% unless @delete_before_dump -%>
if [ $? -eq 0 ] ; then
    cleanup
fi
<% end -%>

<% if @postscript -%>
  <%- [@postscript].flatten.compact.each do |script|%>
<%= script %>
  <%- end -%>
<% end -%>

# Remove temporary file
rm -f $TMPFILE