Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Requirements

The users .my.cnf file is setup so that the mysql cli tools can connect to the databases server.
If this is not given, then all commands need to be adjusted to provide the required information.

Identify the databases to back up

Code Block
echo "show databases;" | mysql

Result with Squirro 3.5.5

Code Block
information_schema
configuration
datasource
emailsender
filtering
fingerprint
machinelearning
mysql
performance_schema
plumber
scheduler
topic
trends
user

Out of these database, information_schema, performance_schema and mysql are system database.

You may or may not be able to back those up. Especially with managed services, e.g. AWS RDS you might not get access to these.

If you can’t back them up, you should create a SQL script that can recreate the required users & permissions as part of the recovery action.

Backup

Single File, all databases

Create a time-stamped, compressed backup of all databases into a single file.

Code Block
TIMESTAMP=$(date +"%Y_%m_%d_%H_%M_%S")
mysqldump --single-transaction --all-databases | gzip > "squirro_mysql_${TIMESTAMP}.sql.gz"

Single File, all Squirro databases

Create a time-stamped, compressed backup of all Squirro databases into a single file.
See above chapter to ensure you get all databases, as this can differ across releases.

Code Block
TIMESTAMP=$(date +"%Y_%m_%d_%H_%M_%S")
mysqldump --single-transaction --databases configuration datasource emailsender filtering fingerprint machinelearning plumber scheduler topic trends user | gzip > "squirro_mysql_${TIMESTAMP}.sql.gz"

Individual Files, all databases:

Code Block
TIMESTAMP=$(date +"%Y_%m_%d_%H_%M_%S")
DATABASES=`echo 'SHOW DATABASES;' |  mysql -N`

for DATABASE in $DATABASES
do
  echo "Backup ${DATABASE}"
  mysqldump --single-transaction --database "${DATABASE}" | gzip > "squirro_mysql_${DATABASE}_${TIMESTAMP}.sql.gz"
done

The result is then a list of files like so:

Code Block
squirro_mysql_configuration_2022_06_24_16_09_13.sql.gz
squirro_mysql_datasource_2022_06_24_16_09_13.sql.gz
squirro_mysql_emailsender_2022_06_24_16_09_13.sql.gz
...

Individual Files, all Squirro databases

Same as above, avoiding all system databases:

Code Block
TIMESTAMP=$(date +"%Y_%m_%d_%H_%M_%S")
DATABASES=`echo 'SHOW DATABASES WHERE \`Database\` NOT IN ("information_schema", "mysql", "performance_schema", "sys")' |  mysql -N`

for DATABASE in $DATABASES
do
  echo "Backup ${DATABASE}"
  mysqldump --single-transaction --database "${DATABASE}" | gzip > "squirro_mysql_${DATABASE}_${TIMESTAMP}.sql.gz"
done

Cleaning up old files:

If you don’t purge old files, the disk will eventually fill up, you can use this method to keep e.g only backups of the last 7 days

Code Block
find . -type f -mtime +7 -iname squirro_mysql\*.sql.gz -delete

Restore

Before a restore can happen, all corresponding Squirro services must be stopped, as otherwise the table locks will prevent the process from suceeding.

The best course of action is to use:

Code Block
squirro_stop

Restoring any of the above examples works like so:

Code Block
gunzip <file> | mysql

Note that the restore will of course first drop the database, then re-create it.
Hence it might be advisable to take another backup, before doing a restore

Storing the Backups safely

A backup is no good, if its lost with the server / disk its on.
Hence we highly recommend to move the files off your Squirro server.

In cloud environments moving the files onto S3/S3 equivalent storage with versioning enabled will give you a lot of security. (e.g. using the aws s3 mv command)

We also recommend that you don’t leave the files sitting on the local disk, as the ability to inspect the files could give a bad actor a lot of information.This page can now be found at Backing Up and Restoring Databases on the Squirro Docs site.