2019-01-06 16:34:39 +01:00
<!DOCTYPE html>
< html lang = "en-us" >
< head >
< meta charset = "utf-8" / >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" / >
< meta name = "twitter:card" content = "summary" / >
< meta name = "twitter:title" content = "MySQL backup script" / >
< meta name = "twitter:description" content = "" / >
< meta name = "twitter:site" content = "@" / >
< meta property = "og:title" content = "MySQL backup script · Sysadmining. All day. Every day." / >
< meta property = "og:site_name" content = "Sysadmining. All day. Every day." / >
< meta property = "og:url" content = "https://www.captainark.net/2016/03/13/mysql-backup-script/" / >
< meta property = "og:image" content = "/images/cover.jpg" / >
< meta property = "og:description" content = "" / >
< meta property = "og:type" content = "article" / >
< meta property = "article:published_time" content = "2016-03-13T00:00:00+01:00" / >
< title > MySQL backup script · Sysadmining. All day. Every day.< / title >
< meta name = "description" content = "I wrote a MySQL database backup script a while back. I known they are more than enough of them already floating around the internet, but hey, I figured I&rsquo;" / >
< meta name = "HandheldFriendly" content = "True" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< link rel = "shortcut icon" href = "/images/favicon.ico" >
< link rel = "apple-touch-icon" href = "/images/apple-touch-icon.png" / >
< link rel = "stylesheet" type = "text/css" href = "/css/screen.css" / >
< link rel = "stylesheet" type = "text/css" href = "/css/nav.css" / >
2019-01-06 18:41:13 +01:00
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/solarized-light.min.css" integrity = "sha384-bFKDPkG3geCujYJIbPornilfOgmYQoPS45Oh/8daqqo1SUwNY06OeHorpgnNvx82" crossorigin = "anonymous" >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js" integrity = "sha384-BlPof9RtjBqeJFskKv3sK3dh4Wk70iKlpIe92FeVN+6qxaGUOUu+mZNpALZ+K7ya" crossorigin = "anonymous" > < / script >
2019-01-06 16:34:39 +01:00
< script > hljs . initHighlightingOnLoad ( ) ; < / script >
< link href = "/index.xml" rel = "alternate" type = "application/rss+xml" title = "Sysadmining. All day. Every day." / >
< meta name = "generator" content = "Hugo 0.53" / >
< link rel = "canonical" href = "https://www.captainark.net/2016/03/13/mysql-backup-script/" / >
< script type = "application/ld+json" >
{
"@context": "https://schema.org",
"@type": "Article",
"publisher": {
"@type": "Organization",
"name": ,
"logo": https://www.captainark.net/images/logo.png
},
"author": {
"@type": "Person",
"name": ,
"image": {
"@type": "ImageObject",
"url": https://www.captainark.net/images/author.jpg,
"width": 250,
"height": 250
},
"url": https://www.captainark.net,
"sameAs": [
],
"description": Geek | Gamer | TV Shows Aficionado
},
"headline": MySQL backup script,
"name": MySQL backup script,
"wordCount": 244,
"timeRequired": "PT2M",
"inLanguage": {
"@type": "Language",
"alternateName": en
},
"url": https://www.captainark.net/2016/03/13/mysql-backup-script/,
"datePublished": 2016-03-13T00:00Z,
"dateModified": 2016-03-13T00:00Z,
"description": ,
"mainEntityOfPage": {
"@type": "WebPage",
"@id": https://www.captainark.net/2016/03/13/mysql-backup-script/
}
}
< / script >
2019-01-06 17:58:41 +01:00
2019-01-06 16:34:39 +01:00
< script >
(function(f, a, t, h, o, m){
a[h]=a[h]||function(){
(a[h].q=a[h].q||[]).push(arguments)
};
o=f.createElement('script'),
m=f.getElementsByTagName('script')[0];
o.async=1; o.src=t; o.id='fathom-script';
m.parentNode.insertBefore(o,m)
})(document, window, '//stats.captainark.net/tracker.js', 'fathom');
2019-01-06 18:02:13 +01:00
fathom('set', 'siteId', 'UAIPU');
2019-01-06 16:34:39 +01:00
fathom('trackPageview');
< / script >
2019-01-06 17:58:41 +01:00
2019-01-06 16:34:39 +01:00
< link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/fork-awesome@1.1.5/css/fork-awesome.min.css" integrity = "sha256-P64qV9gULPHiZTdrS1nM59toStkgjM0dsf5mK/UwBV4=" crossorigin = "anonymous" >
< / head >
< body class = "nav-closed" >
< div class = "nav" >
< h3 class = "nav-title" > Menu< / h3 >
< a href = "#" class = "nav-close" >
< span class = "hidden" > Close< / span >
< / a >
< ul >
< h3 > This site< / h3 >
< li class = "nav-opened" role = "presentation" >
< a href = "/" > Home< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "/about" > About< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "/resume" > Resume< / a >
< / li >
< h3 > Other services< / h3 >
< li class = "nav-opened" role = "presentation" >
< a href = "https://git.captainark.net" > Gitea< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "https://pics.captainark.net" > Chevereto< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "https://paste.captainark.net" > Privatebin< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "https://chat.captainark.net" > Rocket.Chat< / a >
< / li >
< / ul >
< a class = "subscribe-button icon-feed" href = "/index.xml" > Subscribe< / a >
< / div >
< span class = "nav-cover" > < / span >
< div class = "site-wrapper" >
< header class = "main-header post-head no-cover" >
< nav class = "main-nav clearfix" >
< a class = "blog-logo" href = "https://www.captainark.net/" > < img src = "/images/logo.png" alt = "Home" / > < / a >
< a class = "menu-button" href = "#" > < span class = "burger" > ☰ < / span > < span class = "word" > Menu< / span > < / a >
< / nav >
< / header >
< main class = "content" role = "main" >
< article class = "post post" >
< header class = "post-header" >
< h1 class = "post-title" > MySQL backup script< / h1 >
< small > < / small >
< section class = "post-meta" >
< time class = "post-date" datetime = "2016-03-13T00:00:00+01:00" >
13 March 2016
< / time >
< / section >
< / header >
< section class = "post-content" >
< p > I wrote a MySQL database backup script a while back. I known they are more than enough of them already floating around the internet, but hey, I figured I’ d share it here anyway.< / p >
< h2 id = "the-script" > The script< / h2 >
< p > For the script to work, you’ ll need to edit a few variable to match your configuration.< / p >
< ul >
< li > < code > BACKUPDIR< / code > is the path of the directory where you want your backups to be stored.< / li >
< li > < code > BACKUPUSR< / code > is the user that will connect to MySQL to dump the databases. It should have access to all you databases without needing a password.< / li >
< li > < code > EXCLUDELIST< / code > is a list of databases that should not be backed-up. Leaving it as is is probably fine.< / li >
< / ul >
< pre > < code class = "language-bash" > #!/bin/bash
BACKUPDIR=" /home/user/backup"
BACKUPUSR=" user"
EXCLUDELIST=" ^Databases$|^information_schema$|^mysql$|^performance_schema$"
sqlbk() {
for each in $(mysqlshow | awk '/[[:alnum:]]/{print $2}'); do
if [[ $each =~ $EXCLUDELIST ]]; then
true
else
mysqldump $each | bzip2 > ${BACKUPDIR}/${each}.sql.bz2
chown ${BACKUPUSR}: ${BACKUPDIR}/${each}.sql.bz2 & & chmod 600 ${BACKUPDIR}/${each}.sql.bz2
fi
done
}
[[ -e /etc/init.d/mysql ]] & & sqlbk
< / code > < / pre >
< p > I personnaly have this script running once a week, in my user’ s personnal crontab (editable using the < code > crontab -e< / code > command) :< / p >
< pre > < code > ## WEEKLY DATABASE BACKUP
@weekly /home/user/bin/backupdb
< / code > < / pre >
< h1 id = "conclusion" > Conclusion< / h1 >
< p > You’ ve probably noticed that the script erases the previous backup when a new one is made.< / p >
< p > I don’ t need to keep multiple versions of the same database backup on my servers because they are all saved remotely on a daily basis using < a href = "http://rsnapshot.org/" > Rsnapshot< / a > . I’ ll probably write an article on the subject in the future.< / p >
< p > As usual, feedback is always appreciated !< / p >
< / section >
< footer class = "post-footer" >
< figure class = "author-image" >
< a class = "img" href = "https://www.captainark.net/" style = "background-image: url(/images/author.jpg)" > < span class = "hidden" > Antoine Joubert's Picture< / span > < / a >
< / figure >
< section class = "author" >
< h4 > < a href = "https://www.captainark.net/" > Antoine Joubert< / a > < / h4 >
< p > Geek | Gamer | TV Shows Aficionado< / p >
< div class = "author-meta" >
< span class = "author-location icon-location" > Angers, France< / span >
< span class = "author-link icon-link" > < a href = "https://www.captainark.net" > https://www.captainark.net< / a > < / span >
< / div >
< / section >
2019-01-06 17:14:04 +01:00
<!-- isso -->
< script data-isso = "https://www.captainark.net/comments/" src = "https://www.captainark.net/comments/js/embed.min.js" > < / script >
< noscript > Please enable JavaScript to view comments< / noscript >
< section id = "isso-thread" > < / section >
<!-- end isso -->
2019-01-06 16:34:39 +01:00
< / footer >
< / article >
< / main >
< aside class = "read-next" >
< a class = "read-next-story" style = "no-cover" href = "/2016/03/26/webdav-with-nginx/" >
< section class = "post" >
< h2 > WebDAV with nginx< / h2 >
< / section >
< / a >
< a class = "read-next-story prev" style = "no-cover" href = "/2016/02/02/my-tmux-configuration/" >
< section class = "post" >
< h2 > My tmux configuration< / h2 >
< / section >
< / a >
< / aside >
< center >
< a class = "fa-icons" href = "mailto:contact@captainark.net" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-envelope fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< a class = "fa-icons" href = "https://twitter.com/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-twitter fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< a class = "fa-icons" href = "https://social.captainark.net/users/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-mastodon-alt fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< a class = "fa-icons" href = "https://github.com/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-github fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< a class = "fa-icons" href = "https://www.last.fm/user/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-lastfm fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< a class = "fa-icons" href = "https://steamcommunity.com/id/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-steam fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< a class = "fa-icons" href = "https://www.twitch.tv/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-twitch fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< / center >
< footer class = "site-footer clearfix" >
< section class = "copyright" > < a href = "" > Sysadmining. All day. Every day.< / a > © 2015 - 2019< / section >
< section class = "poweredby" > Proudly generated by < a class = "icon-hugo" href = "http://gohugo.io" > HUGO< / a > , with < a class = "icon-theme" href = "https://github.com/vjeantet/hugo-theme-casper" > Casper< / a > theme< / section >
< / footer >
< / div >
< script type = "text/javascript" src = "/js/jquery.js" > < / script >
< script type = "text/javascript" src = "/js/jquery.fitvids.js" > < / script >
< script type = "text/javascript" src = "/js/index.js" > < / script >
< / body >
< / html >