Backup & Recovery
A complete OJS backup consists of three parts: database, files directory, and config.
What to Back Upโ
| Component | Location | Contains |
|---|---|---|
| Database | MySQL/PostgreSQL | All journal content, users, settings |
| Files directory | files_dir in config | Uploaded manuscripts, galleys, images |
| Public directory | [ojs_root]/public/ | Journal logos, uploaded images |
| Config file | [ojs_root]/config.inc.php | Database credentials, settings |
Database Backupโ
# MySQL
mysqldump -u ojsuser -p --single-transaction --routines ojs \
| gzip > /backups/ojs_db_$(date +%Y%m%d_%H%M).sql.gz
# PostgreSQL
pg_dump -U ojsuser ojs \
| gzip > /backups/ojs_db_$(date +%Y%m%d_%H%M).sql.gz
Files Backupโ
tar -czf /backups/ojs_files_$(date +%Y%m%d_%H%M).tar.gz /var/www/ojs-files
Automated Backup Scriptโ
Create /usr/local/bin/ojs-backup.sh:
#!/bin/bash
BACKUP_DIR=/backups/ojs
DATE=$(date +%Y%m%d_%H%M)
mkdir -p $BACKUP_DIR
# Database
mysqldump -u ojsuser -pYOURPASSWORD --single-transaction ojs \
| gzip > $BACKUP_DIR/db_$DATE.sql.gz
# Files
tar -czf $BACKUP_DIR/files_$DATE.tar.gz /var/www/ojs-files
# Config
cp /var/www/html/ojs/config.inc.php $BACKUP_DIR/config_$DATE.inc.php
# Remove backups older than 30 days
find $BACKUP_DIR -mtime +30 -delete
echo "OJS backup completed: $DATE"
Add to crontab:
0 2 * * * /usr/local/bin/ojs-backup.sh >> /var/log/ojs-backup.log 2>&1
Restoring from Backupโ
1. Restore Filesโ
tar -xzf ojs_files_YYYYMMDD.tar.gz -C /
2. Restore Databaseโ
# MySQL
gunzip < ojs_db_YYYYMMDD.sql.gz | mysql -u ojsuser -p ojs
# PostgreSQL
gunzip < ojs_db_YYYYMMDD.sql.gz | psql -U ojsuser ojs
3. Restore Configโ
cp config_YYYYMMDD.inc.php /var/www/html/ojs/config.inc.php
4. Clear Cacheโ
cd /var/www/html/ojs
php lib/pkp/tools/cacheClear.php
Further Readingโ
- PKP Admin Guide โ Managing the Environment โ Backup and maintenance best practices
- PKP Community Forum โ Ask backup questions and find community tips