Backing Up and Restoring

Backing Up

It is important to back up GNU social regularly. If you need to revert to an old backup you will lose any newer notices. Any follows that happened since then will result in mismatched information on your server and remote servers.

You should also back up immediately prior to any upgrade. This is especially important if you are following the nightly branch where serious bugs might slip through.

There are two parts to your GNU social installation and they must both be backed up at the same time.

  1. The files hosted by your webserver. This is a mixture of GNU social code and user data. This a directory probably located somewhere like /var/www/social.
  2. The contents of the MariaDB/MySQL database.

Web Files

You don’t need to do anything fancy. Just make sure you have a copy of the folder. If you’re using a commercial web hosting service there is probably a button you can press to download an archive of all your files. Note that this normally does not include your database.

If you have shell access on the server, assuming the GNU social folder is located at /var/www/social, you can make a compressed backup in your home directory like this:

TIMESTAMP=$(date +%Y%m%d-%H%M)
cd /var/www
tar -Jcf "~/$TIMESTAMP-social-www.tar.xz" --exclude=.git social

If you are serving files straight out of the git repository this will back up only the currently checked out copy, not the entire history. (Using a git repository this way is not recommended as you may cause chaos in your database if you accidentally check out the wrong thing.)

Database

There are many different tools and techniques for backing up MySQL databases. If you’re using a commercial web hosting service there will probably be somewhere in the web interface where you can download a copy of the GNU social database.

If you have shell access the simplest way to create a backup is using the tool mysqldump.

TIMESTAMP=$(date +%Y%m%d-%H%M)
mysqldump -u "database_username" -p "database_name" | xz -c - > "~/$TIMESTAMP-social.sql.xz"

You will be prompted for a password. Type in the password for the MySQL user.

Restoring from a Backup

  1. Stop the queue daemons if they’re running.
  2. Restore the web files.
  3. Restore the database.
  4. Restart the queue daemons.

If you followed the examples above you might type the following:

cd /var/www/social

# Stop the daemons
bash ./scripts/stopdaemons.sh

# Delete and restore the web files
rm -r *
cd ..
tar -Jxf ~/20160130-1200-social-www.tar.xz

# Recreate the database (using MySQL root account)
mysqladmin -u root -p drop social
mysqladmin -u root -p create social
mysql -u root -p social

  # Inside mysql client
  GRANT ALL on social.* TO 'social'@'localhost' IDENTIFIED BY 'the_old_password';
  exit

# Restore the database as the GNU social MySQL user
xzcat ~/20160130-1200-social.sql.xz | mysql -u social -p social

# Restart the queue daemons
cd social
bash ./scripts/startdaemons.sh