MySQL / MariaDB
#The MySQL / MariaDB integration performs logical backups of MySQL and
MariaDB databases using mysqldump and mariadb-dump. These backups produce
standard SQL files that are human-readable and can be restored without Plakar if
needed.
| Protocol | Target | Dump tool | Restore tool |
|---|---|---|---|
mysql:// |
MySQL 5.7 / 8.x | mysqldump |
mysql |
mysql+mariadb:// |
MariaDB 10.x / 11.x | mariadb-dump |
mariadb |
mysql+gcsql:// |
MySQL on Google Cloud SQL | mysqldump |
mysql |
mysql:// and mysql+mariadb:// are independent connectors: each always uses
its own set of binaries regardless of the server at the other end.
Typical use cases
- Scheduled logical backups of application databases with cross-version portability.
- Full-cluster dumps including stored procedures, events, and triggers.
- MariaDB-specific backups that require
mariadb-dumpsemantics. - Cloud SQL backups via the Cloud SQL Auth Proxy.
Installation
#The MySQL / MariaDB integration is distributed as a Plakar package.
Note
Pre-built packages require Plakar authentication. See Logging in to Plakar for details.
$ plakar pkg add mysqlVerify installation:
$ plakar pkg listPrerequisites:
- Go toolchain compatible with your Plakar version
$ plakar pkg build mysqlInstall the resulting archive:
$ plakar pkg add ./mysql_v1.0.0_linux_amd64.ptarTo list, upgrade, or remove the package, see the managing packages guide.
Logical backup - mysql://
#
How it works
#The connector invokes mysqldump to produce a single SQL file per database, or
a combined all.sql when no database is specified. Every snapshot follows the
same layout:
/manifest.json: cluster metadata captured before the dump (see Snapshot manifest)./<dbname>.sql: single-database dump when a database is specified./all.sql: full-server dump when no database is specified (--all-databases).
Pros
- Portable across MySQL major versions.
- Human-readable SQL that can be restored without Plakar.
- Supports selective restore of individual databases.
- No server downtime required.
Cons
- Restore time scales with data volume.
- Does not capture user accounts or grants for single-database backups.
- MyISAM tables cannot be backed up consistently without locking.
Prerequisites
#The following tools must be available in $PATH on the machine running Plakar
(provided by the mysql-client package, or the MySQL distribution):
mysqldump: for backupmysql: for restore
The backup user requires the following privileges:
-- Single database (with single_transaction=true, default)
GRANT SELECT, SHOW VIEW, TRIGGER, EVENT ON mydb.* TO 'backup'@'%';
GRANT PROCESS ON *.* TO 'backup'@'%';
-- All databases
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT, RELOAD ON *.* TO 'backup'@'%';
GRANT PROCESS ON *.* TO 'backup'@'%';
Warning
Binary compatibility 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 produces 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 ...Use mysql_bin_dir to point to the correct binary directory if both are
installed.
Source connector
#flowchart LR subgraph Source["MySQL Server"] DB["Databases"] end subgraph Plakar["Plakar"] Connector["mysqldump"] Transform["Encrypt & deduplicate"] Connector --> Transform end Store["Kloset Store"] DB --> Connector Transform --> Store
# Back up a single database
$ plakar source add mydb mysql://dbuser:secret@db.example.com/mydb
$ plakar at /var/backups backup "@mydb"
# Back up all databases
$ plakar source add alldb mysql://root:secret@db.example.com
$ plakar at /var/backups backup "@alldb"
# Schema only
$ plakar source add mydb mysql://dbuser:secret@db.example.com/mydb \
no_data=true
$ plakar at /var/backups backup "@mydb"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 (--routines). |
events |
true |
Include event scheduler events (--events). |
triggers |
true |
Include triggers. Set to false to pass --skip-triggers. |
no_data |
false |
Dump schema only, no data (--no-data). Mutually exclusive with no_create_info. |
no_create_info |
false |
Dump data only, no schema (--no-create-info). Mutually exclusive with no_data. |
no_tablespaces |
true |
Suppress tablespace statements (--no-tablespaces). |
hex_blob |
false |
Encode BINARY/BLOB columns as hex (--hex-blob). |
column_statistics |
true |
Query COLUMN_STATISTICS. Set to false (--column-statistics=0) when using mysqldump 8.0 against MySQL 5.7. |
set_gtid_purged |
AUTO |
GTID mode: AUTO, ON, or OFF. |
mysql_bin_dir |
— | Directory containing mysqldump. When omitted, resolved via $PATH. |
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). |
Destination connector
#flowchart LR Store["Kloset Store"] subgraph Plakar["Plakar"] Transform["Decrypt & reconstruct"] Connector["mysql"] Transform --> Connector end subgraph Destination["MySQL Server"] DB["Databases"] end Store --> Transform Connector --> DB
# Restore into an existing database
$ plakar destination add mydbdst mysql://dbuser:secret@target.example.com/mydb
$ plakar at /var/backups restore -to "@mydbdst" <snapshot_id>
# Create the database and restore
$ 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>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 |
Pass --force to continue on SQL errors during restore. |
mysql_bin_dir |
— | Directory containing the mysql binary. When omitted, resolved via $PATH. |
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). |
Logical backup - mysql+mariadb://
#
mysql+mariadb:// works identically to mysql:// but invokes mariadb-dump
for backup and mariadb for restore. This connector is used when targeting a
MariaDB server to avoid binary-compatibility issues.
# Back up a single MariaDB database
$ plakar source add mydb mysql+mariadb://dbuser:secret@db.example.com/mydb
$ plakar at /var/backups backup "@mydb"
# Back up all MariaDB databases
$ plakar source add alldb mysql+mariadb://root:secret@db.example.com
$ plakar at /var/backups backup "@alldb"
# Restore
$ plakar destination add mydbdst mysql+mariadb://dbuser:secret@target.example.com/mydb \
create_db=true
$ plakar at /var/backups restore -to "@mydbdst" <snapshot_id>mysql+mariadb:// supports the same source and destination options as
mysql://, with the following differences:
| Option | Default | Description |
|---|---|---|
mariadb_bin_dir |
— | Directory containing mariadb-dump / mariadb. Replaces mysql_bin_dir. |
The column_statistics and set_gtid_purged options are MySQL-only and have no
effect on mysql+mariadb://.
Google Cloud SQL - mysql+gcsql://
#
mysql+gcsql:// targets MySQL databases hosted on Google Cloud SQL. It uses the
Cloud SQL Auth Proxy to
establish an encrypted connection, making the experience equivalent to
connecting to a local MySQL server.
The connector supports the same source and destination options as mysql://.
The Cloud SQL Auth Proxy must be running and accessible on the configured host
and port before Plakar connects.
# Assuming the proxy is running on localhost:3306
$ plakar source add mygcs mysql+gcsql://dbuser:secret@127.0.0.1:3306/mydb
$ plakar at /var/backups backup "@mygcs"Snapshot manifest
#Every snapshot produced by this integration includes a /manifest.json record
written before the dump data. It captures the server state at the time of
backup.
| Field | Description |
|---|---|
version |
Manifest schema version. |
connector |
mysql or mariadb. |
server_version |
MySQL or MariaDB server version string. |
mysqldump_version |
mysqldump version string (or mariadump_version for MariaDB). |
server_config |
Key server settings: datadir, hostname, character_set_server, collation_server, max_connections, gtid_mode. |
databases |
One entry per database: name, character set, collation, tables (with engine, row estimate, columns), routines, triggers, and events. |
options |
The effective dump options used for this backup. |
Metadata collection is best-effort: if a query fails, the affected field is omitted and the backup continues normally.
Considerations
#MySQL vs MariaDB binaries
#Always use binaries that match your server flavor. On Debian and Ubuntu,
apt install default-mysql-client installs MariaDB binaries by default.
MariaDB’s mysqldump produces dumps that fail to restore against MySQL 8 for
all-databases backups. Use mysql_bin_dir to point to the correct binaries when
both flavors are installed on the same machine.
InnoDB and MyISAM
#single_transaction (enabled by default) produces a consistent InnoDB snapshot
without locking tables. For databases that contain MyISAM tables, this option
does not prevent locks on those tables. Disable single_transaction to use
--lock-all-tables instead, accepting write locks for the duration of the dump.
GTIDs
#When the server has GTIDs enabled (gtid_mode=ON), mysqldump includes
SET @@GLOBAL.GTID_PURGED statements. Restoring to a server that already has
GTID history will fail. Options:
- Set
set_gtid_purged=OFFon the source to omit GTID information from the dump. - Run
RESET MASTERon the target server before restoring.
User and grant migration
#Single-database backups do not include user accounts or grants. To migrate users:
- Use an all-databases backup, which includes the
mysqlsystem database. - Export grants manually with a tool like
pt-show-grants(Percona Toolkit). - Recreate user accounts manually on the target server.
Known limitations
#- Physical backup not supported: Only logical dumps via
mysqldump/mariadb-dump. For physical backups, stop the server and use Plakar’s filesystem backup on the data directory directly. - No per-table filtering: The entire database (or all databases) is dumped.
- No restore-time data/schema filtering: The full dump is always piped to the client CLI.