mysqldatabasebackupsfeature

Your Databases Deserve Backups Too

5 min read

The thing nobody backs up

You have automated backups running for your game server. Every hour, on the hour, your world files and configs get compressed and shipped off to cloud storage. You sleep well at night knowing your builds are safe.

Meanwhile, your MySQL database is sitting on a shared host somewhere with no protection at all. The database that holds every player's balance, every faction, every permission node, every shop listing, every piece of data that makes your server feel like a real place.

If the server files disappear, you lose the world. If the database disappears, you lose everything that makes the world matter.

Most people do not think about this until they have to. By then it is too late.

What people do today

The current state of MySQL backups in the game server world is surprisingly grim.

phpMyAdmin exports. You log into phpMyAdmin, click Export, pick SQL format, click Go, and save the file somewhere on your desktop. This works. It also requires you to remember to do it, and the "somewhere on your desktop" part means the backup is only as safe as your local machine. If you are the kind of person who remembers to do manual exports on a schedule, you probably also floss twice a day. Most of us do not.

mysqldump on a cron job. If you have SSH access to the database host, you can set up a cron job that runs mysqldump and pipes the output to a file. This is the correct approach for people who enjoy writing bash scripts and debugging permissions issues at 2 AM. It works well once you get it working. Getting it working is the hard part.

Hoping the host handles it. Some database hosts include automated backups. Some do not. Some include them but only keep one day of history. Some include them but charge extra to actually restore from them. The only way to find out which category your host falls into is to need a restore and see what happens.

Nothing. This is the most common approach. Not by choice, but by default. The database works, so nobody thinks about what happens when it stops working.

What we built

Pink Narwhal now backs up MySQL databases on the same schedule as your server files. Same storage, same retention, same dashboard. Here is how it works.

Step 1: Connect

Add your MySQL connection details. Host, port, username, password. Hit "Test Connection" and we will tell you immediately if we can reach it. Your credentials are encrypted with AES-256 before they touch our database. We never store plaintext passwords.

Step 2: Select

Once connected, we show you every database on that server (minus the system ones nobody cares about). Toggle on the ones you want to back up. A FiveM server might have es_extended, gcphone, and mysql-async databases that all need protection. Toggle all three, or just the ones that matter most.

Step 3: Schedule

Pick a minute of the hour (0 through 59) and we will dump your selected databases every hour at that time. Same scheduling model as server backups. Simple.

That is it. Three steps, maybe 45 seconds of your time.

How the dumps work

When your schedule fires, we connect to your MySQL server and stream each selected database through gzip compression directly into Cloudflare R2 storage. No temporary files. No buffering the entire dump in memory. The data flows from your MySQL server through our compression pipeline straight to cloud storage.

Each dump includes:

  • CREATE TABLE statements so the schema is fully recreatable
  • All row data in batched INSERT statements
  • Views, if you have any
  • Foreign key handling so the import order does not matter

The result is a standard .sql.gz file. You can download it from the dashboard and import it with any MySQL client, phpMyAdmin, mysql CLI, whatever you prefer. No proprietary format, no lock-in.

What this shares with server backups

Database backups use the same storage pool as your server backups. Same plan limits, same retention policy. They show up in the same Backups page with a source filter so you can view everything together or filter by servers and databases separately.

Your storage bar, your backup history, your download buttons. All in the same place. We did not build a separate system. We extended the one you already know.

What this does not do (yet)

Honesty is better than marketing:

  • No automated restore. You can download your .sql.gz files and import them yourself. One-click restore to a live database is not here yet.
  • No SSH tunnels. Your MySQL server needs to be reachable over the network. If it is behind a firewall with no public access, we cannot reach it today. SSH tunnel support is coming.
  • No PostgreSQL. MySQL only for now. If there is demand, PostgreSQL is on the list.
  • No partial backups. We dump the entire database. You cannot exclude specific tables yet.

We would rather ship something useful now and add features based on what you actually need than wait six months for a version that does everything.

Why this matters for game servers specifically

Game servers have a particular relationship with their databases that makes this more urgent than it might seem.

FiveM servers running ESX or QBCore store everything in MySQL. Player identities, bank accounts, inventories, vehicle ownership, housing, phone contacts, gang affiliations. The server files are mostly code and configs. The database is the state of the entire world.

Minecraft servers with economy plugins, permission systems, and logging tools (like CoreProtect) put critical data in MySQL. Losing the CoreProtect database means losing your ability to investigate grief and roll back damage. Losing LuckPerms data means rebuilding every permission group from memory.

Rust servers, ARK servers, any server with plugin-driven persistence. The pattern is the same: the database is where the real value lives.

Backing up the server files without backing up the database is like locking your front door but leaving the windows open.

Go add your first database

It is in your dashboard right now. Click Databases in the sidebar, add your connection, pick your databases, set a schedule. Takes about 45 seconds.

Your players will not know you did it. That is the point.