Managed ad

Backup på samtliga mysql databaser med mysqldump till separata filer

Av Pontus, 19 mars, 2014

För att inte glömma att göra backup på någon databas så gör jag backup på alla databaserna, men jag vill inte ha en stor fil utan varje databas ska ligga i en egen. Ett litet script och en crontab löser det.

Då jag då och då skapar nya databaser och  är glömsk så är det enklaste att ha ett script som gör backup på samtliga mysql databaser. Jag utgick från ett script som jag hittade på nätet. Men eftersom att mysql varnar från version 5.0.1 varnar för att event tabellen inte ingår i backupen så fick jag modifiera scriptet något. Om man kör scriptet som jag hittade så kommer följande varning:

-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

Lösningen blev att göra backupå mysql databasen separat med --events flaggan. Testade först att lägga till den i for loopen men då gnällde den över att den inte hittade events tabellen i alla databaserna. 

Skapa en fil med valfri editor, filen skall innehålla följande:

#! /bin/bash
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/backup/mysql/$TIMESTAMP"
MYSQL_USER="backup"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
DBHOST=databas
mkdir -p "$BACKUP_DIR"

databases=`$MYSQL --user=$MYSQL_USER -h $DBHOST -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`

for db in $databases; do
  $MYSQLDUMP --force --opt --user=$MYSQL_USER -h $DBHOST  --databases $db | gzip > "$BACKUP_DIR/$db.gz"
done
#do mysql database separate because of the event warning
$MYSQLDUMP --force --opt --user=$MYSQL_USER -h $DBHOST --events  --databases mysql | gzip > "$BACKUP_DIR/mysql.gz"

Justera parametrarna i början så att de stämmer för dig. Lägg till en användare på mysql-servern med följande rättigheter:

  • SELECT
  • SHOW VIEW
  • REALOAD
  • SHOW DATABASES
  • LOCK TABLES

Min backup användare skapade jag utan lösenord för att slippa ha lösenordet i scriptet. Den användaren kan dock bara logga in från backup-server. 

Lägg sedan till en crontab så att scriptet körs till exempelt varje natt.

Kategorier

Managed ad