Automatic Database Backup Scheduling Setup

Imagine: you set up cron on `mysqldump`, but when restoring after a crash, the dump is corrupted—InnoDB tables are inconsistent, half the data lost. This happens more often than you think: we've audited over 100 projects and know that 1 in 10 dumps has hidden problems that only surface during a test

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1283
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1237
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    980
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1029
  • image_website-sbh_0.webp
    Website development for SBH Partners
    1104
  • image_website-_0.webp
    Website development for Red Pear
    552

Imagine: you set up cron on mysqldump, but when restoring after a crash, the dump is corrupted—InnoDB tables are inconsistent, half the data lost. This happens more often than you think: we've audited over 100 projects and know that 1 in 10 dumps has hidden problems that only surface during a test restore. According to our data, 60% of companies lose data due to unreliable backups. Average recovery time without a prepared system is 12 hours—for e-commerce, that's a catastrophe. Our team, with 10+ years in production, designs backup systems that guarantee data safety: GFS rotation, cloud storage, automatic notifications, and weekly checks. Result: recovery time drops to 30 minutes instead of 8 hours, saving up to 80% of disaster recovery costs.

Automating scheduled backups is the only way to ensure fresh copies. But a single cron script isn't enough: you need rotation, remote storage, and monitoring. Below we break down configuration for popular DBMS with code examples.

Choosing the Right Tool for Your Database

DB Tool Format
PostgreSQL pg_dump / pg_dumpall SQL / custom
MySQL/MariaDB mysqldump / Percona XtraBackup SQL / binary
MongoDB mongodump BSON
Redis BGSAVE / AOF snapshot RDB / AOF
SQLite sqlite3 .backup binary

For PostgreSQL, we strongly recommend custom format (-Fc): it restores 2–3 times faster than plain SQL and allows selective table restoration. Official documentation confirms this.

Step-by-Step Backup Configuration

  1. Assess data volume and criticality. Define RPO (acceptable data loss) and RTO (target recovery time). For most products, RPO = 1 day, RTO = 4 hours.
  2. Select backup tool. Use native utilities (pg_dump, mysqldump) or specialized ones (pgBackRest, XtraBackup) depending on database size.
  3. Set up schedule. For daily backups: 0 2 * * *; for weekly: 0 2 * * 1. Add monthly copies.
  4. Organize cloud storage. Upload copies to S3 with lifecycle policy: STANDARD_IA → Glacier (30 days) → deletion (365 days).
  5. Configure monitoring and alerts. On script failure, send alerts via Slack, Telegram, or email. Use Healthchecks.io to check execution.
  6. Verify restoration. Weekly, restore the dump on a test server. Compare record counts in key tables.

How to Set Up pg_dump for Daily Backups

#!/bin/bash # /opt/scripts/backup-postgres.sh BACKUP_DIR="/var/backups/postgres" DB_NAME="myapp_production" DATE=$(date +%Y%m%d_%H%M%S) FILENAME="$BACKUP_DIR/${DB_NAME}_${DATE}.dump" mkdir -p "$BACKUP_DIR" pg_dump -U postgres -Fc "$DB_NAME" > "$FILENAME" # Rotation: delete backups older than 7 days find "$BACKUP_DIR" -name "*.dump" -mtime +7 -delete # Failure notification if [ $? -ne 0 ]; then curl -X POST "$SLACK_WEBHOOK" \ -d '{"text": "CRITICAL: Database backup failed on '$(hostname)'"}' fi echo "Backup successful: $FILENAME" 

Cron job (daily at 2:00 AM): 0 2 * * * /opt/scripts/backup-postgres.sh >> /var/log/backup.log 2>&1

For MySQL, configure password via .my.cnf (permissions 600):

[mysqldump] user=backup_user password=secret_password 

And use --single-transaction for a consistent InnoDB snapshot:

mysqldump --single-transaction --routines --triggers myapp_db | gzip > "/var/backups/mysql/myapp_$(date +%Y%m%d_%H%M%S).sql.gz" 

How to Automate Cloud Upload and Notifications

After creating the backup, send it to S3-compatible storage. Example with AWS CLI:

aws s3 cp "$FILENAME" "s3://company-backups/postgres/${DB_NAME}/" \ --storage-class STANDARD_IA \ --server-side-encryption AES256 

For rotation, set up a Lifecycle Policy: move to Glacier after 30 days, delete after a year. On script failure, send alerts via Slack or Telegram webhook. Alternatively, use Healthchecks.io: the script pings a URL after successful backup, the service notifies if the ping is missing.

Why Restoration Testing Matters

A backup without verification is not a backup. We've encountered corrupt dumps due to filesystem errors or insufficient disk space. The only way to be sure is to restore data on a test instance. Our experience shows that 15% of dumps have problems invisible during creation. Weekly testing is your guarantee. As stated in PostgreSQL documentation: "The only way to be sure your backup is valid is to test it by restoring it."

# Restore to test database pg_restore -U postgres -d test_restore --clean "$FILENAME" # Verify record count psql -U postgres -d test_restore -c "SELECT COUNT(*) FROM users;" 

Comparison: pg_dump vs pg_dumpall

Feature pg_dump pg_dumpall
Objects Single database All databases + globals
Format SQL/custom/directory SQL only
Parallelism Yes (custom/directory) No
Restoration Fast, selective Slow, all at once

For production, we use pg_dump -Fc—the most flexible and reliable option.

What's Included in Turnkey Backup Setup

  • Architecture analysis: DBMS type, data size, RPO/RTO.
  • Backup script development with database-specific considerations (InnoDB, WAL, replication).
  • Schedule configuration (cron/systemd timer) with GFS rotation.
  • Cloud storage integration with lifecycle policy.
  • Alerts via Slack, Telegram, or email on failures.
  • Weekly automated test restoration.
  • Documentation of the recovery process for your team.

Estimated Timelines

Setting up backups for one database with rotation, cloud upload, and notifications takes from 1 business day. Pricing is determined after analysis—contact us for a consultation. Request an audit of your current system and get improvement recommendations. We guarantee your data will be safe in any disaster.