{{tag>linux debian mysql backup}}
====== MySQL Backup under Linux ======
===== Introduction =====
MySQL databases have become an integral part of today's servers. Information of all kinds can be stored, retrieved and filtered. MySQL offers a syntax that can be easily integrated into PHP, for example.
To ensure that databases are still available even after a system crash, it is necessary to back them up regularly.
===== mysqldump =====
MySQL comes with a tool called mysqldump. With this tool it is possible to make a backup of all databases. Modern systems work with a password-protected query. For this reason, I will only present this variant here.
If we call mysqldump without parameters, we get the following instructions for use:
$ mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
With
$ mysqldump --help
all available options are displayed. However, not all of these are relevant for a backup. The most important options for us are: -u -p
The -u option specifies the user name that has access to the database. The -p option displays a password prompt before the command is executed.
===== Backing up the MySQL database =====
==== Backing up a specific database ====
To back up a specific database, we simply use the following syntax:
$ mysqldump -u USER -p database USERDATABASE > usr1_db.sql
USER corresponds to the user. The -p option is passed without an associated parameter. USERDATABASE corresponds to the actual database. If everything has been entered correctly, we will see a password prompt. Here we enter the user's password and should now open the file //usr1_db.sql// which contains all database entries.
==== Backing up all databases ====
To back up all databases, we must log in as MySQL root. The following syntax is used, which is similar to the one described above:
$ mysqldump -u USER -p --all-databases > full_db.sql
===== Restoring the MySQL database =====
Importing a dump file is just as easy. We use the following syntax for this:
$ mysql -p USERDATABASE -u USER -p < usr1_db.sql
or to restore all databases:
$ mysql -p USERDATABASE -u USER -p < full_db.sql
===== Automated backup =====
To back up the database automatically, you can use the following script, which Jerome Griessmeier provides on his [[http://www.griessmeier.de/linux/mysql_backup.htm#3-1|Webseite]] website:
#!/bin/sh
# Backup Script
# Author: Jerome Griessmeier
# Version: 0.2
#
# This Shell Script backup your database
# For automating use a cronjob
#
# Pfade setzen/ Setting path variables
#
MYSQL_DUMP=/usr/bin/mysqldump
BACKUP_DIR=/pfad/zu/backup_verzeichnis
TAR=/bin/tar
RM=/bin/rm
DB_NAME=DB_NAME
DB_USER=DB_USER
DB_PASS=DB_PASS
AKT_DATUM=`date +%Y%m%d%H%M`
#
# mysql dump erzeugen / create mysql dump
#
$MYSQL_DUMP $DB_NAME -u $DB_USER --password=$DB_PASS >
$BACKUP_DIR/$AKT_DATUM.backup.sql
#
# mysql dump komprimieren / Compress data
#
cd $BACKUP_DIR
$TAR -cvzf $AKT_DATUM.backup.sql.tgz $AKT_DATUM.backup.sql
#
# aufraeumen / clean up
#
$RM $AKT_DATUM.backup.sql
==== set up cronjob ====
crontab -e
create cronjob:
55 2 * * * root /backup/backup.sh >> /dev/null 2>&1
//Start of the script at 02.55 every night//
===== Sources =====
[[http://www.griessmeier.de/linux/mysql_backup.htm]]