Implementing incremental backups

Many sites grow very fast, by adding lots of files. Sites which are heavy on frequently updated image galleries, business sites with large PDF uploads, download repositories etc are some of the most typical use cases. Taking a full site backup may take a substantial amount of time and storage. Sending this backup to off-site storage also takes time, and incurs storage costs. Because of that, backups of such sites tend to be infrequent which increases the risk undertaken by the site operator. This is where incremental backups come into play.

How incremental backups work

There are two incremental backup types in Akeeba Backup: Files only, incremental and Full site, incremental files. Their difference lies on whether the database data is backed up. In the first case no database data is backed up. In the second case, the database contents are backed up completely (not incrementally, as there is no concept of incremental backups in database content in the database server technologies supported by Joomla!).

In both cases, files are backed up incrementally. This means that only files which were created or modified after the last backup with this backup profile are going to be added to the backup. Please note that incremental backups do not record deleted files.

How incremental backups are restored

Incremental backups are partial backups. An incremental backup is not enough to restore your site. Therefore, you need to start by restoring the latest full site backup.

Afterwards, you will need to extract each and every incremental backup taken after the latest full site backup.

Finally, and only if you are using the Full site, incremental files backup type, you will need to run the restoration script in the installation folder one last time to restore the database contents included with the last incremental backup.

This results in a site that is identical to the latest backed up state with the note that files removed since the last full backup are not removed.

Planning your incremental backups

Using incremental backups successfully requires a bit of planning on your part and two (2) backup profiles.

One backup profile needs to be set with the Full site backup backup type. This is the backup you will be running infrequently, and serves as your starting point when restoring your site.

The other backup profile needs to be set with either of the incremental backup types. This is the backup you will be running frequently.

When you should run each backup type is up to you. What you do need to keep in mind is the restoration. You will always have to restore the latest full site backup, then all of the incremental backups up to the date you want to restore your site to. This will inform your decision on how frequently to run each backup profile. Essentially, you decide how painful you are willing your restoration to be.

For example, you could be running your full backup on the first of the month, and the incremental backup daily. This is very fast and cheap, since you only have one big monthly backup and several small daily backups. However, this means that restoring your site to the state it was on the 31st of the month requires you to restore one full site backup, and 30 incremental backups. It might also be the case that a lot of files were removed during that time (e.g. because you updated Joomla! or its extensions to new versions) which might cause problems to the restored site.

Conversely, you could be running your full site backup every Sunday, and incremental backups every Monday to Saturday. This takes longer and is a bit more expensive on storage, but it makes restoration easier and more reliable. At worst, you will have to restore one full site backup and six incremental backups. Since the time period you are restoring is fairly small, it is unlikely that any removed files will be a problem and even if they are it's easy to roll back to the last full backup, apply the updates to Joomla and its extensions, then restore the incremental backups.

Remember that Akeeba Backup does not run the backups for you. You will need to set up your backup scheduling yourself.

We recommend documenting your decisions and the reasoning behind them for future reference. Generally speaking, you should have a documentation repository for each one of your sites. Do not trust that you will remember all the decisions you made months or years ago.

Incremental backups and quotas

Akeeba Backup has the Quota feature which allows you to automatically remove all backups.

You need to configure quotas so that you never end up in a situation where your latest full backup or any of the incremental backups taken since are removed.

For example, let's say that you run a full site backup once a month and incremental backups every day. DO NOT set a day quota of 30 for the full site backup; this would delete the full site backup taken on months with 31 days, leaving you with backups you cannot restore. DO NOT set a count quota of 15 for the incremental backups; you will need between 27 and 30 incremental backups (depending on the month!) to restore your site. DO NOT use size quotas; your need for backup files is contingent on the number of backups you need, not their size. Setting a size quota may start deleting incremental backup archives taken after the last full site backup.

It's always a good idea to only ever use count quotas with incremental backups. Always set the number of files to keep in the incremental profile to the maximum number of incremental backups taken between full site backups, times the number of full site backups you keep. For example, if you take a monthly full site backup and daily incremental backups, and you keep two full site backups you need to use a count quota setting of 60 for your incremental profile. Where this number came from? The maximum number of incremental backups taken between full site backups is 30; that's the number of days between two consecutive months with 31 days (July and August). Since we keep two full site backups we need 2 x 30 = 60 files.

If you are using off-site storage do remember to also set the Obsolete Records To Keep setting to the same number as explained above. This will prevent the backup records of remotely stored files form being removed which could have an adverse impact on your count quotas functionality.