Beta Version
You're viewing documentation for version v1.1.0. Beta versions are subject to changes and may not represent the final stable release. Do not use in production environments.
Logical backups with SQL dumps
Last reviewed: 2026-04-13 / Plakar v1.1.0
Overview
The Plakar MySQL integration uses mysqldump (MySQL) or mariadb-dump (MariaDB) to produce logical backups. These are standard SQL files that are portable, human-readable, and restorable without Plakar if needed.
Two URI schemes map to independent sets of binaries:
| Protocol | Target | Dump tool | Restore tool |
|---|---|---|---|
mysql:// |
MySQL 5.7 / 8.x | mysqldump |
mysql |
mysql+mariadb:// |
MariaDB 10.x / 11.x | mariadb-dump |
mariadb |
For a deeper understanding of logical backups and MySQL backup strategies, refer to the official MySQL documentation on mysqldump.
Requirements
- A running MySQL or MariaDB server.
- A database user with sufficient privileges (see Required privileges).
mysqldumpandmysqlin$PATHfor MySQL, ormariadb-dumpandmariadbfor MariaDB.
Install the package
$ plakar pkg add mysql
What gets stored in a snapshot
| File | Description |
|---|---|
/manifest.json |
Server metadata: version, configuration, databases, tables, routines, triggers, events. |
/<database>.sql |
Single-database dump (when database is specified). |
/all.sql |
Full-server dump (when database is omitted). |
Back up a single database
# MySQL
$ plakar source add mydb mysql://dbuser:secret@db.example.com/mydb
$ plakar at /var/backups backup @mydb
# MariaDB
$ plakar source add mydb mysql+mariadb://dbuser:secret@db.example.com/mydb
$ plakar at /var/backups backup @mydb
Back up all databases
Omit the database name from the URI to use --all-databases:
# MySQL
$ plakar source add alldb mysql://root:secret@db.example.com
$ plakar at /var/backups backup @alldb
# MariaDB
$ plakar source add alldb mysql+mariadb://root:secret@db.example.com
$ plakar at /var/backups backup @alldb
Restore a single database
The target database must already exist:
$ plakar destination add mydbdst mysql://dbuser:secret@target.example.com/mydb
$ plakar at /var/backups restore -to @mydbdst <snapshot_id>
To have Plakar create the database automatically, set create_db=true:
$ plakar destination add mydbdst mysql://dbuser:secret@target.example.com/mydb \
create_db=true
$ plakar at /var/backups restore -to @mydbdst <snapshot_id>
Restore all databases
$ plakar destination add mydbdst mysql://root:secret@target.example.com
$ plakar at /var/backups restore -to @mydbdst <snapshot_id>
List snapshots
$ plakar at /var/backups ls
Source options
| Option | Default | Description |
|---|---|---|
location |
— | Connection URI: mysql://[user[:password]@]host[:port][/database] |
host |
127.0.0.1 |
Server hostname. Overrides the URI host. |
port |
3306 |
Server port. Overrides the URI port. |
username |
— | Username. Overrides the URI user. |
password |
— | Password. Overrides the URI password. Passed via MYSQL_PWD, never on the command line. |
database |
— | Database to back up. Overrides the URI path. If omitted, all databases are backed up. |
single_transaction |
true |
Use --single-transaction for a lock-free InnoDB snapshot. |
routines |
true |
Include stored procedures and functions. |
events |
true |
Include event scheduler events. |
triggers |
true |
Include triggers. |
no_data |
false |
Dump schema only, no data. |
no_create_info |
false |
Dump data only, no schema. |
no_tablespaces |
true |
Suppress tablespace statements. |
hex_blob |
false |
Encode BINARY/BLOB columns as hex. |
ssl_mode |
— | TLS mode: disabled, preferred, required, verify_ca, verify_identity. |
ssl_cert |
— | Path to the client SSL certificate (PEM). |
ssl_key |
— | Path to the client SSL private key (PEM). |
ssl_ca |
— | Path to the CA certificate (PEM). |
mysql_bin_dir |
— | Directory containing MySQL binaries. MySQL only. |
column_statistics |
true |
Query COLUMN_STATISTICS. Set to false when using mysqldump 8.0 against MySQL 5.7. MySQL only. |
set_gtid_purged |
AUTO |
GTID mode: AUTO, ON, or OFF. MySQL only. |
mariadb_bin_dir |
— | Directory containing MariaDB binaries. MariaDB only. |
Destination options
| Option | Default | Description |
|---|---|---|
location |
— | Connection URI: mysql://[user[:password]@]host[:port][/database] |
host |
127.0.0.1 |
Server hostname. Overrides the URI host. |
port |
3306 |
Server port. Overrides the URI port. |
username |
— | Username. Overrides the URI user. |
password |
— | Password. Overrides the URI password. |
database |
— | Target database. Inferred from the dump filename if omitted. |
create_db |
false |
Issue CREATE DATABASE IF NOT EXISTS before restoring. |
force |
false |
Continue on SQL errors during restore. |
ssl_mode |
— | TLS mode (same values as source). |
ssl_cert |
— | Path to the client SSL certificate (PEM). |
ssl_key |
— | Path to the client SSL private key (PEM). |
ssl_ca |
— | Path to the CA certificate (PEM). |
mysql_bin_dir |
— | Directory containing the mysql binary. MySQL only. |
mariadb_bin_dir |
— | Directory containing the mariadb binary. MariaDB only. |
Required privileges
Single database backup
GRANT SELECT, SHOW VIEW, TRIGGER, EVENT ON mydb.* TO 'backup'@'%';
GRANT PROCESS ON *.* TO 'backup'@'%';
With single_transaction=true (default), LOCK TABLES is not required for InnoDB tables.
All-databases backup
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT, RELOAD ON *.* TO 'backup'@'%';
GRANT PROCESS ON *.* TO 'backup'@'%';
Considerations
MySQL vs MariaDB binaries
Always use binaries that match your server. On Debian and Ubuntu, apt install default-mysql-client installs MariaDB’s mysqldump by default. MariaDB’s mysqldump is not compatible with MySQL 8 for all-databases backups and will produce dumps that fail to restore.
Verify you have the correct binary:
$ mysqldump --version
# MySQL: mysqldump Ver 8.x Distrib 8.x, for Linux (x86_64)
# MariaDB: mysqldump from 11.x.x-MariaDB ...
If both are installed, point the integration to the correct directory using mysql_bin_dir.
InnoDB and MyISAM
single_transaction (enabled by default) produces a consistent InnoDB snapshot without locking tables. For databases with MyISAM tables, single_transaction does not prevent locks on those tables. If you need a consistent backup across MyISAM tables, set single_transaction=false to use --lock-all-tables instead, accepting write locks during the dump.
GTIDs
When the server has GTIDs enabled, the dump includes SET @@GLOBAL.GTID_PURGED statements that will cause restore to fail on a server that already has GTID history. Set set_gtid_purged=OFF on the source to omit GTID information, or run RESET MASTER on the target before restoring.
User and grant migration
Single-database backups do not include user accounts or grants. To migrate users, use an all-databases backup, export grants manually with a tool like pt-show-grants, or recreate accounts manually on the target.
Compression
Do not enable compression at the dump level. Plakar deduplicates and compresses data automatically. Pre-compressed dumps reduce deduplication effectiveness across snapshots.
Kloset store location
The examples above use /var/backups as the Kloset store. Any supported store backend can be used instead. See Create a Kloset store for details.
See also
Found a bug or mistake in the documentation? Create an issue on GitHub