Provided by: percona-xtrabackup_8.4.0-1-0ubuntu1_amd64 

NAME
xtrabackup - Percona XtraBackup 8.0 Documentation
The xtrabackup binary is a compiled C program that is linked with the InnoDB libraries and the standard
MySQL client libraries.
xtrabackup enables point-in-time backups of InnoDB / XtraDB tables together with the schema definitions,
MyISAM tables, and other portions of the server.
The InnoDB libraries provide the functionality to apply a log to data files. The MySQL client libraries
are used to parse command-line options and configuration file.
The tool runs in either --backup or --prepare mode, corresponding to the two main functions it performs.
There are several variations on these functions to accomplish different tasks, and there are two less
commonly used modes, --stats and --print-param.
OTHER TYPES OF BACKUPS
Incremental Backups
xtrabackup supports incremental backups. It copies only the data that has changed since the last full
backup. You can perform many incremental backups between each full backup, so you can set up a backup
process such as a full backup once a week and an incremental backup every day, or full backups every day
and incremental backups every hour.
NOTE:
Incremental backups on the MyRocks storage engine do not determine if an earlier full backup or
incremental backup contains the same files. Percona XtraBackup copies all of the MyRocks files each
time it takes a backup.
Incremental backups work because each InnoDB page (usually 16kb in size) contains a log sequence number,
or LSN. The LSN is the system version number for the entire database. Each page's LSN shows how recently
it was changed. An incremental backup copies each page whose LSN is newer than the previous incremental
or full backup's LSN. There are two algorithms in use to find the set of such pages to be copied. The
first one, available with all the server types and versions, is to check the page LSN directly by reading
all the data pages. The second one, available with Percona Server for MySQL, is to enable the changed
page tracking feature on the server, which will note the pages as they are being changed. This
information will be then written out in a compact separate so-called bitmap file. The xtrabackup binary
will use that file to read only the data pages it needs for the incremental backup, potentially saving
many read requests. The latter algorithm is enabled by default if the xtrabackup binary finds the bitmap
file. It is possible to specify --incremental-force-scan to read all the pages even if the bitmap data is
available.
Incremental backups do not actually compare the data files to the previous backup's data files. In fact,
you can use --incremental-lsn to perform an incremental backup without even having the previous backup,
if you know its LSN. Incremental backups simply read the pages and compare their LSN to the last backup's
LSN. You still need a full backup to recover the incremental changes, however; without a full backup to
act as a base, the incremental backups are useless.
Creating an Incremental Backup
To make an incremental backup, begin with a full backup as usual. The xtrabackup binary writes a file
called xtrabackup_checkpoints into the backup's target directory. This file contains a line showing the
to_lsn, which is the database's LSN at the end of the backup. Create the full backup with a command such
as the following:
$ xtrabackup --backup --target-dir=/data/backups/base --datadir=/var/lib/mysql/
If you look at the xtrabackup_checkpoints file, you should see contents similar to the following:
backup_type = full-backuped
from_lsn = 0
to_lsn = 1291135
Now that you have a full backup, you can make an incremental backup based on it. Use a command such as
the following:
$ xtrabackup --backup --target-dir=/data/backups/inc1 \
--incremental-basedir=/data/backups/base --datadir=/var/lib/mysql/
The /data/backups/inc1/ directory should now contain delta files, such as ibdata1.delta and
test/table1.ibd.delta. These represent the changes since the LSN 1291135. If you examine the
xtrabackup_checkpoints file in this directory, you should see something similar to the following:
backup_type = incremental
from_lsn = 1291135
to_lsn = 1291340
The meaning should be self-evident. It's now possible to use this directory as the base for yet another
incremental backup:
$ xtrabackup --backup --target-dir=/data/backups/inc2 \
--incremental-basedir=/data/backups/inc1 --datadir=/var/lib/mysql/
Preparing the Incremental Backups
The --prepare step for incremental backups is not the same as for normal backups. In normal backups, two
types of operations are performed to make the database consistent: committed transactions are replayed
from the log file against the data files, and uncommitted transactions are rolled back. You must skip the
rollback of uncommitted transactions when preparing a backup, because transactions that were uncommitted
at the time of your backup may be in progress, and it is likely that they will be committed in the next
incremental backup. You should use the --apply-log-only option to prevent the rollback phase.
NOTE:
If you do not use the --apply-log-only option to prevent the rollback phase, then your incremental
backups will be useless. After transactions have been rolled back, further incremental backups cannot
be applied.
Beginning with the full backup you created, you can prepare it, and then apply the incremental
differences to it. Recall that you have the following backups:
/data/backups/base
/data/backups/inc1
/data/backups/inc2
To prepare the base backup, you need to run --prepare as usual, but prevent the rollback phase:
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base
The output should end with some text such as the following:
101107 20:49:43 InnoDB: Shutdown completed; log sequence number 1291135
The log sequence number should match the to_lsn of the base backup, which you saw previously.
This backup is actually safe to restore as-is now, even though the rollback phase has been skipped. If
you restore it and start MySQL, InnoDB will detect that the rollback phase was not performed, and it will
do that in the background, as it usually does for a crash recovery upon start. It will notify you that
the database was not shut down normally.
To apply the first incremental backup to the full backup, you should use the following command:
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc1
This applies the delta files to the files in /data/backups/base, which rolls them forward in time to the
time of the incremental backup. It then applies the redo log as usual to the result. The final data is in
/data/backups/base, not in the incremental directory. You should see some output such as the following:
incremental backup from 1291135 is enabled.
xtrabackup: cd to /data/backups/base/
xtrabackup: This target seems to be already prepared.
xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(1291340)
Applying /data/backups/inc1/ibdata1.delta ...
Applying /data/backups/inc1/test/table1.ibd.delta ...
.... snip
101107 20:56:30 InnoDB: Shutdown completed; log sequence number 1291340
Again, the LSN should match what you saw from your earlier inspection of the first incremental backup. If
you restore the files from /data/backups/base, you should see the state of the database as of the first
incremental backup.
Preparing the second incremental backup is a similar process: apply the deltas to the (modified) base
backup, and you will roll its data forward in time to the point of the second incremental backup:
xtrabackup --prepare --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc2
NOTE:
--apply-log-only should be used when merging all incrementals except the last one. That's why the
previous line doesn't contain the --apply-log-only option. Even if the --apply-log-only was used on
the last step, backup would still be consistent but in that case server would perform the rollback
phase.
If you wish to avoid the notice that InnoDB was not shut down normally, when you applied the desired
deltas to the base backup, you can run --prepare again without disabling the rollback phase.
Restoring Incremental Backups
After preparing the incremental backups, the base directory contains the same data as the full backup. To
restoring this backup, you can use this command: xtrabackup --copy-back --target-dir=BASE-DIR
You may have to change the ownership as detailed on restoring_a_backup.
Incremental Streaming Backups Using xbstream
Incremental streaming backups can be performed with the xbstream streaming option. Currently backups are
packed in custom xbstream format. With this feature, you need to take a BASE backup as well. Making a
base backup.INDENT 0.0
$ xtrabackup --backup --target-dir=/data/backups
$ xtrabackup --backup --incremental-lsn=LSN-number --stream=xbstream --target-dir=./ > incremental.xbstream
$ xbstream -x < incremental.xbstream
$ xtrabackup --backup --incremental-lsn=LSN-number --stream=xbstream --target-dir=./
$ ssh user@hostname " cat - | xbstream -x -C > /backup-dir/"
Partial Backups
xtrabackup supports taking partial backups when the innodb_file_per_table option is enabled. There are
three ways to create partial backups:
1. matching the tables names with a regular expression
2. providing a list of table names in a file
3. providing a list of databases
WARNING:
Do not copy back the prepared backup.
Restoring partial backups should be done by importing the tables, not by using the --copy-back option.
It is not recommended to run incremental backups after running a partial backup.
Although there are some scenarios where restoring can be done by copying back the files, this may lead
to database inconsistencies in many cases and it is not a recommended way to do it.
For the purposes of this manual page, we will assume that there is a database named test which contains
tables named t1 and t2.
WARNING:
If any of the matched or listed tables is deleted during the backup, xtrabackup will fail.
Creating Partial Backups
There are multiple ways of specifying which part of the whole data is backed up:
• Use the --tables option to list the table names
• Use the --tables-file option to list the tables in a file
• Use the --databases option to list the databases
• Use the --databases-file option to list the databases
The --tables Option
The first method involves the xtrabackup --tables option. The option's value is a regular expression that
is matched against the fully-qualified database name and table name using the databasename.tablename
format.
To back up only tables in the test database, use the following command:
$ xtrabackup --backup --datadir=/var/lib/mysql --target-dir=/data/backups/ \
--tables="^test[.].*"
To back up only the test.t1 table, use the following command:
$ xtrabackup --backup --datadir=/var/lib/mysql --target-dir=/data/backups/ \
--tables="^test[.]t1"
The --tables-file Option
The --tables-file option specifies a file that can contain multiple table names, one table name per line
in the file. Only the tables named in the file will be backed up. Names are matched exactly,
case-sensitive, with no pattern or regular expression matching. The table names must be fully-qualified
in databasename.tablename format.
$ echo "mydatabase.mytable" > /tmp/tables.txt
$ xtrabackup --backup --tables-file=/tmp/tables.txt
The --databases and --databases-file options
The ` --databases` option accepts a space-separated list of the databases and tables to backup in the
databasename[.tablename] format. In addition to this list, make sure to specify the mysql, sys, and
performance_schema databases. These databases are required when restoring the databases using xtrabackup
--copy-back.
NOTE:
Tables processed during the --prepare step may also be added to the backup even if they are not
explicitly listed by the parameter if they were created after the backup started.
$ xtrabackup --databases='mysql sys performance_schema test ...'
The --databases-file Option
The --databases-file option specifies a file that can contain multiple databases and tables in the
databasename[.tablename] format, one element name per line in the file. Names are matched exactly,
case-sensitive, with no pattern or regular expression matching.
NOTE:
Tables processed during the --prepare step may also be added to the backup even if they are not
explicitly listed by the parameter if they were created after the backup started.
Preparing Partial Backups
The procedure is analogous to restoring individual tables : apply the logs and use the --export option:
$ xtrabackup --prepare --export --target-dir=/path/to/partial/backup
When you use the --prepare option on a partial backup, you will see warnings about tables that don't
exist. This is because these tables exist in the data dictionary inside InnoDB, but the corresponding
.ibd files don't exist. They were not copied into the backup directory. These tables will be removed from
the data dictionary, and when you restore the backup and start InnoDB, they will no longer exist and will
not cause any errors or warnings to be printed to the log file.
Could not find any file associated with the tablespace ID: 5
Use --innodb-directories to find the tablespace files. If that fails then use
--innodb-force-recovery=1 to ignore this and to permanently lose all changes to the missing
tablespace(s).
Restoring Partial Backups
Restoring should be done by restoring individual tables in the partial backup to the server.
It can also be done by copying back the prepared backup to a "clean" datadir (in that case, make sure to
include the mysql database) to the datadir you are moving the backup to. A system database can be created
with the following:
$ sudo mysql --initialize --user=mysql
Once you start the server, you may see mysql complaining about missing tablespaces:
2021-07-19T12:42:11.077200Z 1 [Warning] [MY-012351] [InnoDB] Tablespace 4, name 'test1/t1', file './d2/test1.ibd' is missing!
2021-07-19T12:42:11.077300Z 1 [Warning] [MY-012351] [InnoDB] Tablespace 4, name 'test1/t1', file './d2/test1.ibd' is missing!
In order to clean the orphan database from the data dictionary, you must manually create the missing
database directory and then DROP this database from the server.
Example of creating the missing database:
$ mkdir /var/lib/mysql/test1/d2
Example of dropping the database from the server:
mysql> DROP DATABASE d2;
Query OK, 2 rows affected (0.5 sec)
ADVANCED FEATURES
Analyzing Table Statistics
The xtrabackup binary can analyze InnoDB data files in read-only mode to give statistics about them. To
do this, you should use the --stats option. You can combine this with the --tables option to limit the
files to examine. It also uses the --use-memory option.
You can perform the analysis on a running server, with some chance of errors due to the data being
changed during analysis. Or, you can analyze a backup copy of the database. Either way, to use the
statistics feature, you need a clean copy of the database including correctly sized log files, so you
need to execute with --prepare twice to use this functionality on a backup.
The result of running on a backup might look like the following:
<INDEX STATISTICS>
table: test/table1, index: PRIMARY, space id: 12, root page 3
estimated statistics in dictionary:
key vals: 25265338, leaf pages 497839, size pages 498304
real statistics:
level 2 pages: pages=1, data=5395 bytes, data/pages=32%
level 1 pages: pages=415, data=6471907 bytes, data/pages=95%
leaf pages: recs=25958413, pages=497839, data=7492026403 bytes, data/pages=91%
This can be interpreted as follows:
• The first line simply shows the table and index name and its internal identifiers. If you see an index
named GEN_CLUST_INDEX, that is the table's clustered index, automatically created because you did not
explicitly create a PRIMARY KEY.
• The estimated statistics in dictionary information is similar to the data that's gathered through
ANALYZE TABLE inside of InnoDB to be stored as estimated cardinality statistics and passed to the query
optimizer.
• The real statistics information is the result of scanning the data pages and computing exact
information about the index.
• The level <X> pages: output means that the line shows information about pages at that level in the
index tree. The larger <X> is, the farther it is from the leaf pages, which are level 0. The first line
is the root page.
• The leaf pages output shows the leaf pages, of course. This is where the table's data is stored.
• The external pages: output (not shown) shows large external pages that hold values too long to fit in
the row itself, such as long BLOB and TEXT values.
• The recs is the real number of records (rows) in leaf pages.
• The pages is the page count.
• The data is the total size of the data in the pages, in bytes.
• The data/pages is calculated as (data / (pages * PAGE_SIZE)) * 100%. It will never reach 100% because
of space reserved for page headers and footers.
A more detailed example is posted as a MySQL Performance Blog post.
Script to Format Output
The following script can be used to summarize and tabulate the output of the statistics information:
tabulate-xtrabackup-stats.pl
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
my $script_version = "0.1";
my $PG_SIZE = 16_384; # InnoDB defaults to 16k pages, change if needed.
my ($cur_idx, $cur_tbl);
my (%idx_stats, %tbl_stats);
my ($max_tbl_len, $max_idx_len) = (0, 0);
while ( my $line = <> ) {
if ( my ($t, $i) = $line =~ m/table: (.*), index: (.*), space id:/ ) {
$t =~ s!/!.!;
$cur_tbl = $t;
$cur_idx = $i;
if ( length($i) > $max_idx_len ) {
$max_idx_len = length($i);
}
if ( length($t) > $max_tbl_len ) {
$max_tbl_len = length($t);
}
}
elsif ( my ($kv, $lp, $sp) = $line =~ m/key vals: (\d+), \D*(\d+), \D*(\d+)/ ) {
@{$idx_stats{$cur_tbl}->{$cur_idx}}{qw(est_kv est_lp est_sp)} = ($kv, $lp, $sp);
$tbl_stats{$cur_tbl}->{est_kv} += $kv;
$tbl_stats{$cur_tbl}->{est_lp} += $lp;
$tbl_stats{$cur_tbl}->{est_sp} += $sp;
}
elsif ( my ($l, $pages, $bytes) = $line =~ m/(?:level (\d+)|leaf) pages:.*pages=(\d+), data=(\d+) bytes/ ) {
$l ||= 0;
$idx_stats{$cur_tbl}->{$cur_idx}->{real_pages} += $pages;
$idx_stats{$cur_tbl}->{$cur_idx}->{real_bytes} += $bytes;
$tbl_stats{$cur_tbl}->{real_pages} += $pages;
$tbl_stats{$cur_tbl}->{real_bytes} += $bytes;
}
}
my $hdr_fmt = "%${max_tbl_len}s %${max_idx_len}s %9s %10s %10s\n";
my @headers = qw(TABLE INDEX TOT_PAGES FREE_PAGES PCT_FULL);
printf $hdr_fmt, @headers;
my $row_fmt = "%${max_tbl_len}s %${max_idx_len}s %9d %10d %9.1f%%\n";
foreach my $t ( sort keys %tbl_stats ) {
my $tbl = $tbl_stats{$t};
printf $row_fmt, $t, "", $tbl->{est_sp}, $tbl->{est_sp} - $tbl->{real_pages},
$tbl->{real_bytes} / ($tbl->{real_pages} * $PG_SIZE) * 100;
foreach my $i ( sort keys %{$idx_stats{$t}} ) {
my $idx = $idx_stats{$t}->{$i};
printf $row_fmt, $t, $i, $idx->{est_sp}, $idx->{est_sp} - $idx->{real_pages},
$idx->{real_bytes} / ($idx->{real_pages} * $PG_SIZE) * 100;
}
}
Sample Script Output
The output of the above Perl script, when run against the sample shown in the previously mentioned blog
post, will appear as follows:
TABLE INDEX TOT_PAGES FREE_PAGES PCT_FULL
art.link_out104 832383 38561 86.8%
art.link_out104 PRIMARY 498304 49 91.9%
art.link_out104 domain_id 49600 6230 76.9%
art.link_out104 domain_id_2 26495 3339 89.1%
art.link_out104 from_message_id 28160 142 96.3%
art.link_out104 from_site_id 38848 4874 79.4%
art.link_out104 revert_domain 153984 19276 71.4%
art.link_out104 site_message 36992 4651 83.4%
The columns are the table and index, followed by the total number of pages in that index, the number of
pages not actually occupied by data, and the number of bytes of real data as a percentage of the total
size of the pages of real data. The first line in the above output, in which the INDEX column is empty,
is a summary of the entire table.
Working with Binary Logs
The xtrabackup binary integrates with the log_status table. This integration enables xtrabackup to print
out the backup's corresponding binary log position, so that you can use this binary log position to
provision a new replica or perform point-in-time recovery.
Finding the Binary Log Position
You can find the binary log position corresponding to a backup after the backup has been taken. If your
backup is from a server with binary logging enabled, xtrabackup creates a file named
xtrabackup_binlog_info in the target directory. This file contains the binary log file name and position
of the exact point when the backup was taken.
The output is similar to the following during the backup stage:
210715 14:14:59 Backup created in directory '/backup/'
MySQL binlog position: filename 'binlog.000002', position '156'
. . .
210715 14:15:00 completed OK!
NOTE:
As of Percona XtraBackup 8.0.26-18.0, xtrabackup no longer creates the xtrabackup_binlog_pos_innodb
file. This change is because MySQL and Percona Server no longer update the binary log information on
global transaction system section of ibdata. You should rely on xtrabackup_binlog_info regardless of
the storage engine in use.
Point-In-Time Recovery
To perform a point-in-time recovery from an xtrabackup backup, you should prepare and restore the backup,
and then replay binary logs from the point shown in the xtrabackup_binlog_info file.
A more detailed procedure is found here.
Setting Up a New Replication Replica
To set up a new replica, you should prepare the backup, and restore it to the data directory of your new
replication replica. If you are using version 8.0.22 or earlier, in your CHANGE MASTER TO command, use
the binary log filename and position shown in the xtrabackup_binlog_info file to start replication.
If you are using 8.0.23 or later, use the CHANGE_REPLICATION_SOURCE_TO and the appropriate options.
CHANGE_MASTER_TO is deprecated.
A more detailed procedure is found in ../howtos/setting_up_replication.
Restoring Individual Tables
Percona XtraBackup can export a table that is contained in its own .ibd file. With Percona XtraBackup,
you can export individual tables from any InnoDB database, and import them into Percona Server for MySQL
with XtraDB or MySQL 8.0. The source doesn't have to be XtraDB or MySQL 8.0, but the destination does.
This method only works on individual .ibd files.
The following example exports and imports the following table:
CREATE TABLE export_test (
a int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Exporting the Table
Created the table in innodb_file_per_table mode, so after taking a backup as usual with the --backup
option, the .ibd file exists in the target directory:
$ find /data/backups/mysql/ -name export_test.*
/data/backups/mysql/test/export_test.ibd
when you prepare the backup, add the --export option to the command. Here is an example:
$ xtrabackup --prepare --export --target-dir=/data/backups/mysql/
NOTE:
If you restore an encrypted InnoDB tablespace table, add the keyring file:
$ xtrabackup --prepare --export --target-dir=/tmp/table \
--keyring-file-data=/var/lib/mysql-keyring/keyring
Now you should see an .exp file in the target directory:
$ find /data/backups/mysql/ -name export_test.*
/data/backups/mysql/test/export_test.exp
/data/backups/mysql/test/export_test.ibd
/data/backups/mysql/test/export_test.cfg
These three files are the only files required to import the table into a server running Percona Server
for MySQL with XtraDB or MySQL 8.0. In case the server uses InnoDB Tablespace Encryption adds an
additional .cfp file which contains the transfer key and an encrypted tablespace key.
NOTE:
The .cfg metadata file contains an InnoDB dictionary dump in a special format. This format is
different from the .exp one which is used in XtraDB for the same purpose. A .cfg` file is not required
to import a tablespace to MySQL 8.0 or Percona Server for MySQL 8.0.
A tablespace is imported successfully even if the table is from another server, but InnoDB performs a
schema validation if the corresponding .cfg file is located in the same directory.
Importing the Table
On the destination server running Percona Server for MySQL with XtraDB and
innodb_import_table_from_xtrabackup option enabled, or MySQL 8.0, create a table with the same structure,
and then perform the following steps:
1. Run the ALTER TABLE test.export_test DISCARD TABLESPACE; command. If you see the following error,
enable innodb_file_per_table and create the table again.
Error
ERROR 1030 (HY000): Got error -1 from storage engine
2. Copy the exported files to the test/ subdirectory of the destination server's data directory
3. Run ALTER TABLE test.export_test IMPORT TABLESPACE;
The table is imported, and you can run a SELECT to see the imported data.
LRU dump backup
Percona XtraBackup includes a saved buffer pool dump into a backup to enable reducing the warm up time.
It restores the buffer pool state from ib_buffer_pool file after restart. Percona XtraBackup discovers
ib_buffer_pool and backs it up automatically. [image]
If the buffer restore option is enabled in my.cnf buffer pool will be in the warm state after backup is
restored.
SEE ALSO:
MySQL Documentation: Saving and Restoring the Buffer Pool State
https://dev.mysql.com/doc/refman/8.0/en/innodb-preload-buffer-pool.html
Streaming Backups
Percona XtraBackup supports streaming mode. Streaming mode sends a backup to STDOUT in the xbstream
format instead of copying the files to the backup directory.
This method allows you to use other programs to filter the output of the backup, providing greater
flexibility for storage of the backup. For example, compression is achieved by piping the output to a
compression utility. One of the benefits of streaming backups and using Unix pipes is that the backups
can be automatically encrypted.
To use the streaming feature, you must use the --stream, providing the format of the stream (xbstream )
and where to store the temporary files:
$ xtrabackup --stream=xbstream --target-dir=/tmp
xtrabackup uses xbstream to stream all of the data files to STDOUT, in a special xbstream format. After
it finishes streaming all of the data files to STDOUT, it stops xtrabackup and streams the saved log file
too.
SEE ALSO:
More information about xbstream
xbstream_binary
When compression is enabled, xtrabackup compresses the output data, except for the meta and non-InnoDB
files which are not compressed, using the specified compression algorithm. The only currently supported
algorithm is quicklz. The resulting files have the qpress archive format, i.e. every *.qp file produced
by xtrabackup is essentially a one-file qpress archive and can be extracted and uncompressed by the
qpress file archiver which is available from Percona Software repositories.
Using xbstream as a stream option, backups can be copied and compressed in parallel. This option can
significantly improve the speed of the backup process. In case backups were both compressed and
encrypted, they must be decrypted before they are uncompressed.
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Task Command
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Stream the backup into an archive xtrabackup --backup --stream=xbstream
named backup.xbstream --target-dir=./ > backup.xbstream
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Stream the backup into a compressed xtrabackup --backup --stream=xbstream
archive named backup.xbstream --compress --target-dir=./ >
backup.xbstream
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Encrypt the backup $ xtrabackup --backup
--stream=xbstream ./ >
backup.xbstream gzip - | openssl
des3 -salt -k "password" >
backup.xbstream.gz.des3
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Unpack the backup to the current xbstream -x < backup.xbstream
directory
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Send the backup compressed directly xtrabackup --backup --compress
to another host and unpack it --stream=xbstream --target-dir=./ |
ssh user@otherhost "xbstream -x"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Send the backup to another server On the destination host:
using netcat.
$ nc -l 9999 | cat - > /data/backups/backup.xbstream
On the source host:
$ xtrabackup --backup --stream=xbstream ./ | nc desthost 9999
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Send the backup to another server $ ssh user@desthost "( nc -l 9999 > /data/backups/backup.xbstream & )"
using a one-liner: && xtrabackup --backup --stream=xbstream ./ | nc desthost 9999
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Throttle the throughput to 10MB/sec $ xtrabackup --backup --stream=xbstream ./ | pv -q -L10m ssh
using the pipe viewer tool [1] user@desthost "cat - > /data/backups/backup.xbstream"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Checksumming the backup during the On the destination host:
streaming:
$ nc -l 9999 | tee >(sha1sum > destination_checksum) > /data/backups/backup.xbstream
On the source host:
$ xtrabackup --backup --stream=xbstream ./ | tee >(sha1sum > source_checksum) | nc desthost 9999
Compare the checksums on the source host:
$ cat source_checksum
65e4f916a49c1f216e0887ce54cf59bf3934dbad -
Compare the checksums on the destination host:
$ cat destination_checksum
65e4f916a49c1f216e0887ce54cf59bf3934dbad -
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Parallel compression with parallel xtrabackup --backup --compress --compress-threads=8 --stream=xbstream --parallel=4 --target-dir=./ >
copying backup backup.xbstream
┌───────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
--
IMPLEMENTATION
Implementation Details
This page contains notes on various internal aspects of the xtrabackup tool's operation.
File Permissions
xtrabackup opens the source data files in read-write mode, although it does not modify the files. This
means that you must run xtrabackup as a user who has permission to write the data files. The reason for
opening the files in read-write mode is that xtrabackup uses the embedded InnoDB libraries to open and
read the files, and InnoDB opens them in read-write mode because it normally assumes it is going to write
to them.
Tuning the OS Buffers
Because xtrabackup reads large amounts of data from the filesystem, it uses posix_fadvise() where
possible, to instruct the operating system not to try to cache the blocks it reads from disk. Without
this hint, the operating system would prefer to cache the blocks, assuming that xtrabackup is likely to
need them again, which is not the case. Caching such large files can place pressure on the operating
system's virtual memory and cause other processes, such as the database server, to be swapped out. The
xtrabackup tool avoids this with the following hint on both the source and destination files:
posix_fadvise(file, 0, 0, POSIX_FADV_DONTNEED)
In addition, xtrabackup asks the operating system to perform more aggressive read-ahead optimizations on
the source files:
posix_fadvise(file, 0, 0, POSIX_FADV_SEQUENTIAL)
Copying Data Files
When copying the data files to the target directory, xtrabackup reads and writes 1 MB of data at a time.
This is not configurable. When copying the log file, xtrabackup reads and writes 512 bytes at a time.
This is also not possible to configure, and matches InnoDB's behavior (workaround exists in Percona
Server for MySQL because it has an option to tune innodb_log_block_size for XtraDB, and in that case
Percona XtraBackup will match the tuning).
After reading from the files, xtrabackup iterates over the 1MB buffer a page at a time, and checks for
page corruption on each page with InnoDB's buf_page_is_corrupted() function. If the page is corrupt, it
re-reads and retries up to 10 times for each page. It skips this check on the doublewrite buffer.
xtrabackup Exit Codes
The xtrabackup binary exits with the traditional success value of 0 after a backup when no error occurs.
If an error occurs during the backup, the exit value is 1.
In certain cases, the exit value can be something other than 0 or 1, due to the command-line option code
included from the MySQL libraries. An unknown command-line option, for example, will cause an exit code
of 255.
REFERENCES
The xtrabackup Option Reference
This page documents all of the command-line options for the xtrabackup binary.
Modes of operation
You invoke xtrabackup in one of the following modes:
• --backup mode to make a backup in a target directory
• --prepare mode to restore data from a backup (created in --backup mode)
• --copy-back to copy data from a backup to the location that contained the original data; to move data
instead of copying use the alternate --move-back mode.
• --stats mode to scan the specified data files and print out index statistics.
When you intend to run xtrabackup in any of these modes, use the following syntax:
$ xtrabackup [--defaults-file=#] --backup|--prepare|--copy-back|--stats [OPTIONS]
For example, the --prepare mode is applied as follows:
$ xtrabackup --prepare --target-dir=/data/backup/mysql/
For all modes, the default options are read from the xtrabackup and mysqld configuration groups from the
following files in the given order:
1. /etc/my.cnf
2. /etc/mysql/my.cnf
3. /usr/etc/my.cnf
4. ~/.my.cnf.
As the first parameter to xtrabackup (in place of the --defaults-file, you may supply one of the
following:
• --print-defaults to have xtrabackup print the argument list and exit.
• --no-defaults to forbid reading options from any file but the login file.
• --defaults-file to read the default options from the given file.
• --defaults-extra-file to read the specified additional file after the global files have been read.
• --defaults-group-suffix to read the configuration groups with the given suffix. The effective group
name is constructed by concatenating the default configuration groups (xtrabackup and mysqld) with the
given suffix.
• --login-path to read the given path from the login file.
InnoDB Options
There is a large group of InnoDB options that are normally read from the my.cnf configuration file, so
that xtrabackup boots up its embedded InnoDB in the same configuration as your current server. You
normally do not need to specify them explicitly. These options have the same behavior in InnoDB and
XtraDB. See --innodb-miscellaneous for more information.
Options
--apply-log-only
This option causes only the redo stage to be performed when preparing a backup. It is very
important for incremental backups.
--backup
Make a backup and place it in --target-dir. See Creating a backup.
--backup-lock-timeout
The timeout in seconds for attempts to acquire metadata locks.
--backup-lock-retry-count
The number of attempts to acquire metadata locks.
--backup-locks
This option controls if backup locks should be used instead of FLUSH TABLES WITH READ LOCK on the
backup stage. The option has no effect when backup locks are not supported by the server. This
option is enabled by default, disable with --no-backup-locks.
--check-privileges
This option checks if Percona XtraBackup has all required privileges. If a missing privilege is
required for the current operation, it will terminate and print out an error message. If a
missing privilege is not required for the current operation, but may be necessary for some other
XtraBackup operation, the process is not aborted and a warning is printed.
xtrabackup: Error: missing required privilege LOCK TABLES on *.*
xtrabackup: Warning: missing required privilege REPLICATION CLIENT on *.*
--close-files
Do not keep files opened. When xtrabackup opens tablespace it normally doesn't close its file
handle in order to handle the DDL operations correctly. However, if the number of tablespaces is
really huge and can not fit into any limit, there is an option to close file handles once they are
no longer accessed. Percona XtraBackup can produce inconsistent backups with this option enabled.
Use at your own risk.
--compress
This option tells xtrabackup to compress all output data, including the transaction log file and
meta data files, using either the quicklz or lz4 compression algorithm. quicklz is chosen by
default.
When using --compress=quicklz or --compress, the resulting files have the qpress archive format,
i.e. every *.qp file produced by xtrabackup is essentially a one-file qpress archive and can be
extracted and uncompressed by the qpress file archiver.
--compress=lz4 produces *.lz4 files. You can extract the contents of these files by using a
program such as lz4.
SEE ALSO:
QuickLZ
http://www.quicklz.com
LZ4 https://lz4.github.io/lz4/
--compress-chunk-size=#
Size of working buffer(s) for compression threads in bytes. The default value is 64K.
--compress-threads=#
This option specifies the number of worker threads used by xtrabackup for parallel data
compression. This option defaults to 1. Parallel compression (--compress-threads) can be used
together with parallel file copying (--parallel). For example, --parallel=4 --compress
--compress-threads=2 will create 4 I/O threads that will read the data and pipe it to 2
compression threads.
--copy-back
Copy all the files in a previously made backup from the backup directory to their original
locations. This option will not copy over existing files unless --force-non-empty-directories
option is specified.
--core-file
Write core on fatal signals.
--databases=#
This option specifies a list of databases and tables that should be backed up. The option accepts
the list of the form "databasename1[.table_name1] databasename2[.table_name2] . . .".
--databases-exclude=name
Excluding databases based on name, Operates the same way as --databases, but matched names are
excluded from backup. Note that this option has a higher priority than --databases.
--databases-file=#
This option specifies the path to the file containing the list of databases and tables that should
be backed up. The file can contain the list elements of the form databasename1[.table_name1], one
element per line.
--datadir=DIRECTORY
The source directory for the backup. This should be the same as the datadir for your MySQL server,
so it should be read from my.cnf if that exists; otherwise you must specify it on the command
line.
When combined with the --copy-back or --move-back option, --datadir refers to the destination
directory.
Once connected to the server, in order to perform a backup you will need READ and EXECUTE
permissions at a filesystem level in the server's datadir.
--debug-sleep-before-unlock=#
This is a debug-only option used by the xtrabackup test suite.
--debug-sync=name
The debug sync point. This option is only used by the xtrabackup test suite.
--decompress
Decompresses all files with the .qp extension in a backup previously made with the --compress
option. The --parallel option will allow multiple files to be decrypted simultaneously. In order
to decompress, the qpress utility MUST be installed and accessible within the path. Percona
XtraBackup does not automatically remove the compressed files. In order to clean up the backup
directory users should use --remove-original option.
The --decompress option may be used with xbstream to decompress individual qpress files.
If you used the lz4 compression algorithm to compress the files (--compress=lz4), change the
--decompress parameter accordingly: --decompress=lz4.
--decompress-threads=#
Force xbstream to use the specified number of threads for decompressing.
--decrypt=ENCRYPTION-ALGORITHM
Decrypts all files with the .xbcrypt extension in a backup previously made with --encrypt option.
The --parallel option will allow multiple files to be decrypted simultaneously. Percona XtraBackup
doesn't automatically remove the encrypted files. In order to clean up the backup directory users
should use --remove-original option.
--defaults-extra-file=[MY.CNF]
Read this file after the global files are read. Must be given as the first option on the
command-line.
--defaults-file=[MY.CNF]
Only read default options from the given file. Must be given as the first option on the
command-line. Must be a real file; it cannot be a symbolic link.
--defaults-group=GROUP-NAME
This option is to set the group which should be read from the configuration file. This is used by
xtrabackup if you use the --defaults-group option. It is needed for mysqld_multi deployments.
--defaults-group-suffix=#
Also reads groups with concat(group, suffix).
--dump-innodb-buffer-pool
This option controls whether or not a new dump of buffer pool content should be done.
With --dump-innodb-buffer-pool, xtrabackup makes a request to the server to start the buffer pool
dump (it takes some time to complete and is done in background) at the beginning of a backup
provided the status variable innodb_buffer_pool_dump_status reports that the dump has been
completed.
$ xtrabackup --backup --dump-innodb-buffer-pool --target-dir=/home/user/backup
By default, this option is set to OFF.
If innodb_buffer_pool_dump_status reports that there is running dump of buffer pool, xtrabackup
waits for the dump to complete using the value of --dump-innodb-buffer-pool-timeout
The file ib_buffer_pool stores tablespace ID and page ID data used to warm up the buffer pool
sooner.
SEE ALSO:
MySQL Documentation: Saving and Restoring the Buffer Pool State
https://dev.mysql.com/doc/refman/5.7/en/innodb-preload-buffer-pool.html
--dump-innodb-buffer-pool-timeout
This option contains the number of seconds that xtrabackup should monitor the value of
innodb_buffer_pool_dump_status to determine if buffer pool dump has completed.
This option is used in combination with --dump-innodb-buffer-pool. By default, it is set to 10
seconds.
--dump-innodb-buffer-pool-pct
This option contains the percentage of the most recently used buffer pool pages to dump.
This option is effective if --dump-innodb-buffer-pool option is set to ON. If this option contains
a value, xtrabackup sets the MySQL system variable innodb_buffer_pool_dump_pct. As soon as the
buffer pool dump completes or it is stopped (see --dump-innodb-buffer-pool-timeout), the value of
the MySQL system variable is restored.
SEE ALSO:
Changing the timeout for buffer pool dump
--dump-innodb-buffer-pool-timeout
MySQL Documentation: innodb_buffer_pool_dump_pct system variable
https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_dump_pct
--encrypt=ENCRYPTION_ALGORITHM
This option instructs xtrabackup to encrypt backup copies of InnoDB data files using the algorithm
specified in the ENCRYPTION_ALGORITHM. Currently supported algorithms are: AES128, AES192 and
AES256
--encrypt-key=ENCRYPTION_KEY
A proper length encryption key to use. It is not recommended to use this option where there is
uncontrolled access to the machine as the command line and thus the key can be viewed as part of
the process info.
--encrypt-key-file=ENCRYPTION_KEY_FILE
The name of a file where the raw key of the appropriate length can be read from. The file must be
a simple binary (or text) file that contains exactly the key to be used.
It is passed directly to the xtrabackup child process. See the xtrabackup documentation for more
details.
--encrypt-threads=#
This option specifies the number of worker threads that will be used for parallel
encryption/decryption. See the xtrabackup documentation for more details.
--encrypt-chunk-size=#
This option specifies the size of the internal working buffer for each encryption thread, measured
in bytes. It is passed directly to the xtrabackup child process. See the xtrabackup documentation
for more details.
--export
Create files necessary for exporting tables. See Restoring Individual Tables.
--extra-lsndir=DIRECTORY
(for --backup): save an extra copy of the xtrabackup_checkpoints and xtrabackup_info files in this
directory.
--force-non-empty-directories
When specified, it makes --copy-back and --move-back option transfer files to non-empty
directories. No existing files will be overwritten. If files that need to be copied/moved from the
backup directory already exist in the destination directory, it will still fail with an error.
--ftwrl-wait-timeout=SECONDS
This option specifies time in seconds that xtrabackup should wait for queries that would block
FLUSH TABLES WITH READ LOCK before running it. If there are still such queries when the timeout
expires, xtrabackup terminates with an error. Default is 0, in which case it does not wait for
queries to complete and starts FLUSH TABLES WITH READ LOCK immediately. Where supported xtrabackup
will automatically use Backup Locks as a lightweight alternative to FLUSH TABLES WITH READ LOCK to
copy non-InnoDB data to avoid blocking DML queries that modify InnoDB tables.
--ftwrl-wait-threshold=SECONDS
This option specifies the query run time threshold which is used by xtrabackup to detect
long-running queries with a non-zero value of --ftwrl-wait-timeout. FLUSH TABLES WITH READ LOCK is
not started until such long-running queries exist. This option has no effect if
--ftwrl-wait-timeout is 0. Default value is 60 seconds. Where supported xtrabackup will
automatically use Backup Locks as a lightweight alternative to FLUSH TABLES WITH READ LOCK to copy
non-InnoDB data to avoid blocking DML queries that modify InnoDB tables.
--ftwrl-wait-query-type=all|update
This option specifies which types of queries are allowed to complete before xtrabackup will issue
the global lock. Default is all.
--galera-info
This option creates the xtrabackup_galera_info file which contains the local node state at the
time of the backup. Option should be used when performing the backup of Percona XtraDB Cluster. It
has no effect when backup locks are used to create the backup.
--generate-new-master-key
Generate a new master key when doing a copy-back.
--generate-transition-key
xtrabackup needs to access the same keyring file or vault server during prepare and copy-back but
it should not depend on whether the server keys have been purged.
--generate-transition-key creates and adds to the keyring a transition key for xtrabackup to use
if the master key used for encryption is not found because it has been rotated and purged.
--get-server-public-key
Get the server public key
SEE ALSO:
MySQL Documentation: The --get-server-public-key Option
https://dev.mysql.com/doc/refman/5.7/en/connection-options.html#option_general_get-server-public-key
--help When run with this option or without any options xtrabackup displays information about how to run
the program on the command line along with all supported options and variables with default values
where appropriate.
--history=NAME
This option enables the tracking of backup history in the PERCONA_SCHEMA.xtrabackup_history table.
An optional history series name may be specified that will be placed with the history record for
the current backup being taken.
--host=HOST
This option accepts a string argument that specifies the host to use when connecting to the
database server with TCP/IP. It is passed to the mysql child process without alteration. See mysql
--help for details.
--incremental
This option tells xtrabackup to create an incremental backup. It is passed to the xtrabackup child
process. When this option is specified, either --incremental-lsn or --incremental-basedir can also
be given. If neither option is given, option --incremental-basedir is passed to xtrabackup by
default, set to the first timestamped backup directory in the backup base directory.
SEE ALSO:
More information about incremental backups
See section xb_incremental
--incremental-basedir=DIRECTORY
When creating an incremental backup, this is the directory containing the full backup that is the
base dataset for the incremental backups.
--incremental-dir=DIRECTORY
When preparing an incremental backup, this is the directory where the incremental backup is
combined with the full backup to make a new full backup.
--incremental-force-scan
When creating an incremental backup, force a full scan of the data pages in the instance being
backuped even if the complete changed page bitmap data is available.
--incremental-history-name=name
This option specifies the name of the backup series stored in the
PERCONA_SCHEMA.xtrabackup_history history record to base an incremental backup on. xtrabackup will
search the history table looking for the most recent (highest innodb_to_lsn), successful backup in
the series and take the to_lsn value to use as the starting lsn for the incremental backup. This
will be mutually exclusive with --incremental-history-uuid, --incremental-basedir and
--incremental-lsn. If no valid lsn can be found (no series by that name, no successful backups by
that name) xtrabackup will return with an error. It is used with the --incremental option.
--incremental-history-uuid=name
This option specifies the UUID of the specific history record stored in the
PERCONA_SCHEMA.xtrabackup_history to base an incremental backup on. --incremental-history-name,
--incremental-basedir and --incremental-lsn. If no valid lsn can be found (no success record with
that UUID) xtrabackup will return with an error. It is used with the --incremental option.
--incremental-lsn=LSN
When creating an incremental backup, you can specify the log sequence number (LSN) instead of
specifying --incremental-basedir. For databases created in 5.1 and later, specify the LSN as a
single 64-bit integer. ATTENTION: If a wrong LSN value is specified (a user error which Percona
XtraBackup is unable to detect), the backup will be unusable. Be careful!
--innodb[=name]
This option is ignored for MySQL option compatibility.
--innodb-miscellaneous
There is a large group of InnoDB options that are normally read from the my.cnf configuration
file, so that xtrabackup boots up its embedded InnoDB in the same configuration as your current
server. You normally do not need to specify these explicitly. These options have the same behavior
in InnoDB and XtraDB:
• --innodb-adaptive-hash-index
• --innodb-additional-mem-pool-size
• --innodb-autoextend-increment
• --innodb-buffer-pool-size
• --innodb-buffer-pool-filename
• --innodb-checksum-algorithm
• --innodb-checksums
• --innodb-data-file-path
• --innodb-data-home-dir
• --innodb-directories
• --innodb-doublewrite-file
• --innodb-doublewrite
• --innodb-extra-undoslots
• --innodb-fast-checksum
• --innodb-file-io-threads
• --innodb-file-per-table
• --innodb-flush-log-at-trx-commit
• --innodb-flush-method
• --innodb-io-capacity
• --innodb-lock-wait-timeout
• --innodb-log-block-size
• --innodb-log-buffer-size
• --innodb-log-checksums
• --innodb-log-files-in-group
• --innodb-log-file-size
• --innodb-log-group-home-dir
• --innodb-max-dirty-pages-pct
• --innodb-open-files
• --innodb-page-size
• --innodb-read-io-threads
• --innodb-redo-log-encrypt
• --innodb-undo-directory
• --innodb-undo-log-encrypt
• --innodb-undo-tablespaces`
• --innodb-use-native-aio
• --innodb-write-io-threads
--keyring-file-data=FILENAME
The path to the keyring file. Combine this option with --xtrabackup-plugin-dir.
--kill-long-queries-timeout=SECONDS
This option specifies the number of seconds xtrabackup waits between starting FLUSH TABLES WITH
READ LOCK and killing those queries that block it. Default is 0 seconds, which means xtrabackup
will not attempt to kill any queries. In order to use this option xtrabackup user should have the
PROCESS and SUPER privileges. Where supported, xtrabackup automatically uses Backup Locks as a
lightweight alternative to FLUSH TABLES WITH READ LOCK to copy non-InnoDB data to avoid blocking
DML queries that modify InnoDB tables.
--kill-long-query-type=all|select
This option specifies which types of queries should be killed to unblock the global lock. Default
is "select".
--lock-ddl
Issue LOCK TABLES FOR BACKUP if it is supported by server (otherwise use LOCK INSTANCE FOR BACKUP)
at the beginning of the backup to block all DDL operations.
NOTE:
Prior to Percona XtraBackup 8.0.22-15.0, using a safe-slave-backup stops the SQL replica thread
after the InnoDB tables and before the non-InnoDB tables are backed up.
As of Percona XtraBackup 8.0.22-15.0, using a safe-slave-backup option stops the SQL replica
thread before copying the InnoDB files.
--lock-ddl-per-table
Lock DDL for each table before xtrabackup starts to copy it and until the backup is completed.
NOTE:
As of Percona XtraBackup 8.0.15, the --lock-ddl-per-table option is deprecated. Use the
--lock-ddl option instead.
--lock-ddl-timeout
If LOCK TABLES FOR BACKUP or LOCK INSTANCE FOR BACKUP does not return within given timeout, abort
the backup.
--log This option is ignored for MySQL
--log-bin
The base name for the log sequence.
--log-bin-index=name
File that holds the names for binary log files.
--log-copy-interval=#
This option specifies the time interval between checks done by the log copying thread in
milliseconds (default is 1 second).
--login-path
Read the given path from the login file.
--move-back
Move all the files in a previously made backup from the backup directory to their original
locations. As this option removes backup files, it must be used with caution.
--no-backup-locks
Explicity disables the --backup-locks option which is enabled by default.
--no-defaults
The default options are only read from the login file.
--no-lock
Use this option to disable table lock with FLUSH TABLES WITH READ LOCK. Use it only if ALL your
tables are InnoDB and you DO NOT CARE about the binary log position of the backup. This option
shouldn't be used if there are any DDL statements being executed or if any updates are happening
on non-InnoDB tables (this includes the system MyISAM tables in the mysql database), otherwise it
could lead to an inconsistent backup. Where supported xtrabackup will automatically use Backup
Locks as a lightweight alternative to FLUSH TABLES WITH READ LOCK to copy non-InnoDB data to avoid
blocking DML queries that modify InnoDB tables. If you are considering to use this because your
backups are failing to acquire the lock, this could be because of incoming replication events are
preventing the lock from succeeding. Please try using --safe-slave-backup to momentarily stop the
replication replica thread, this may help the backup to succeed and you do not need to use this
option.
--no-server-version-check
Implemented in Percona XtraBackup 8.0.21.
The --no-server-version-check option disables the server version check.
The default behavior runs a check that compares the source system version to the Percona
XtraBackup version. If the source system version is higher than the XtraBackup version, the backup
is aborted with a message.
Adding the option overrides this check, and the backup proceeds, but there may be issues with the
backup.
See comparison for more information.
--no-version-check
This option disables the version check. If you do not pass this option, the automatic version
check is enabled implicitly when xtrabackup runs in the --backup mode. To disable the version
check, you should pass explicitly the --no-version-check option when invoking xtrabackup.
When the automatic version check is enabled, xtrabackup performs a version check against the
server on the backup stage after creating a server connection. xtrabackup sends the following
information to the server:
• MySQL flavour and version
• Operating system name
• Percona Toolkit version
• Perl version
Each piece of information has a unique identifier. This is a MD5 hash value that Percona Toolkit
uses to obtain statistics about how it is used. This is a random UUID; no client information is
either collected or stored.
--open-files-limit=#
The maximum number of file descriptors to reserve with setrlimit().
--parallel=#
This option specifies the number of threads to use to copy multiple data files concurrently when
creating a backup. The default value is 1 (i.e., no concurrent transfer). In Percona XtraBackup
2.3.10 and newer, this option can be used with the --copy-back option to copy the user data files
in parallel (redo logs and system tablespaces are copied in the main thread).
--password=PASSWORD
This option specifies the password to use when connecting to the database. It accepts a string
argument. See mysql --help for details.
--plugin-load
List of plugins to load.
--port=PORT
This option accepts a string argument that specifies the port to use when connecting to the
database server with TCP/IP. It is passed to the mysql child process without alteration. See mysql
--help for details.
--prepare
Makes xtrabackup perform a recovery on a backup created with --backup, so that it is ready to use.
See preparing a backup.
--print-defaults
Print the program argument list and exit. Must be given as the first option on the command-line.
--print-param
Makes xtrabackup print out parameters that can be used for copying the data files back to their
original locations to restore them.
--read-buffer-size
Set the datafile read buffer size, given value is scaled up to page size. Default is 10Mb.
--rebuild-indexes
Rebuilds indexes in a compact backup. This option only has effect when the --prepare and
--rebuild-threads options are provided.
--rebuild-threads=#
Uses the given number of threads to rebuild indexes in a compact backup. This option only has
effect with the --prepare and --rebuild-indexes options.
--remove-original
Implemented in Percona XtraBackup 2.4.6, this option when specified will remove .qp, .xbcrypt and
.qp.xbcrypt files after decryption and decompression.
--rocksdb-datadir
RocksDB data directory
--rocksdb-wal-dir
RocksDB WAL directory.
--rocksdb-checkpoint-max-age
The checkpoint cannot be older than this number of seconds when the backup completes.
--rocksdb-checkpoint-max-count
Complete the backup even if the checkpoint age requirement has not been met after this number of
checkpoints.
--rollback-prepared-trx
Force rollback prepared InnoDB transactions.
--rsync
Uses the rsync utility to optimize local file transfers. When this option is specified, xtrabackup
uses rsync to copy all non-InnoDB files instead of spawning a separate cp for each file, which can
be much faster for servers with a large number of databases or tables. This option cannot be used
together with --stream.
--safe-slave-backup
When specified, xtrabackup will stop the replica SQL thread just before running FLUSH TABLES WITH
READ LOCK and wait to start backup until Slave_open_temp_tables in SHOW STATUS is zero. If there
are no open temporary tables, the backup will take place, otherwise the SQL thread will be started
and stopped until there are no open temporary tables. The backup will fail if
Slave_open_temp_tables does not become zero after --safe-slave-backup-timeout seconds. The
replication SQL thread will be restarted when the backup finishes. This option is implemented in
order to deal with replicating temporary tables and isn't neccessary with Row-Based-Replication.
--safe-slave-backup-timeout=SECONDS
How many seconds --safe-slave-backup should wait for Slave_open_temp_tables to become zero.
Defaults to 300 seconds.
--secure-auth
Refuse client connecting to server if it uses old (pre-4.1.1) protocol. (Enabled by default; use
--skip-secure-auth to disable.)
--server-id=#
The server instance being backed up.
--server-public-key-path
The file path to the server public RSA key in the PEM format.
SEE ALSO:
MySQL Documentation: The --server-public-key-path Option
https://dev.mysql.com/doc/refman/8.0/en/connection-options.html#option_general_server-public-key-path
--skip-tables-compatibility-check
See --tables-compatibility-check.
--slave-info
This option is useful when backing up a replication replica server. It prints the binary log
position of the source server. It also writes the binary log coordinates to the
xtrabackup_slave_info file as a CHANGE MASTER command. A new replica for this source can be set up
by starting a replica server on this backup and issuing a CHANGE MASTER command with the binary
log position saved in the xtrabackup_slave_info file.
--socket
This option accepts a string argument that specifies the socket to use when connecting to the
local database server with a UNIX domain socket. It is passed to the mysql child process without
alteration. See mysql --help for details.
--ssl Enable secure connection. More information can be found in --ssl MySQL server documentation.
--ssl-ca
Path of the file which contains list of trusted SSL CAs. More information can be found in --ssl-ca
MySQL server documentation.
--ssl-capath
Directory path that contains trusted SSL CA certificates in PEM format. More information can be
found in --ssl-capath MySQL server documentation.
--ssl-cert
Path of the file which contains X509 certificate in PEM format. More information can be found in
--ssl-cert MySQL server documentation.
--ssl-cipher
List of permitted ciphers to use for connection encryption. More information can be found in
--ssl-cipher MySQL server documentation.
--ssl-crl
Path of the file that contains certificate revocation lists. More information can be found in
--ssl-crl MySQL server documentation.
--ssl-crlpath
Path of directory that contains certificate revocation list files. More information can be found
in --ssl-crlpath MySQL server documentation.
--ssl-fips-mode
SSL FIPS mode (applies only for OpenSSL); permitted values are: OFF, ON, STRICT.
--ssl-key
Path of file that contains X509 key in PEM format. More information can be found in --ssl-key
MySQL server documentation.
--ssl-mode
Security state of connection to server. More information can be found in --ssl-mode MySQL server
documentation.
--ssl-verify-server-cert
Verify server certificate Common Name value against host name used when connecting to server. More
information can be found in --ssl-verify-server-cert MySQL server documentation.
--stats
Causes xtrabackup to scan the specified data files and print out index statistics.
--stream=FORMAT
Stream all backup files to the standard output in the specified format. Currently, this option
only supports the xbstream format.
--strict
If this option is specified, xtrabackup fails with an error when invalid parameters are passed.
--tables=name
A regular expression against which the full tablename, in databasename.tablename format, is
matched. If the name matches, the table is backed up. See partial backups.
--tables-compatibility-check
Enables the engine compatibility warning. The default value is ON. To disable the engine
compatibility warning use --skip-tables-compatibility-check.
--tables-exclude=name
Filtering by regexp for table names. Operates the same way as --tables, but matched names are
excluded from backup. Note that this option has a higher priority than --tables.
--tables-file=name
A file containing one table name per line, in databasename.tablename format. The backup will be
limited to the specified tables.
--target-dir=DIRECTORY
This option specifies the destination directory for the backup. If the directory does not exist,
xtrabackup creates it. If the directory does exist and is empty, xtrabackup will succeed.
xtrabackup will not overwrite existing files, however; it will fail with operating system error
17, file exists.
If this option is a relative path, it is interpreted as being relative to the current working
directory from which xtrabackup is executed.
In order to perform a backup, you need READ, WRITE, and EXECUTE permissions at a filesystem level
for the directory that you supply as the value of --target-dir.
--innodb-temp-tablespaces-dir=DIRECTORY
Directory where temp tablespace files live, this path can be absolute.
--throttle=#
This option limits the number of chunks copied per second. The chunk size is 10 MB. To limit the
bandwidth to 10 MB/s, set the option to 1: --throttle=1.
SEE ALSO:
More information about how to throttle a backup
throttling_backups
--tls-ciphersuites
TLS v1.3 cipher to use.
--tls-version
TLS version to use, permitted values are: TLSv1, TLSv1.1, TLSv1.2, TLSv1.3.
--tmpdir=name
Specify the directory that will be used to store temporary files during the backup
--transition-key=name
This option is used to enable processing the backup without accessing the keyring vault server. In
this case, xtrabackup derives the AES encryption key from the specified passphrase and uses it to
encrypt tablespace keys of tablespaces being backed up.
If --transition-key does not have any value, xtrabackup will ask for it. The same passphrase
should be specified for the --prepare command.
--use-memory
This option affects how much memory is allocated for preparing a backup with --prepare, or
analyzing statistics with --stats. Its purpose is similar to innodb_buffer_pool_size. It does not
do the same thing as the similarly named option in Oracle's InnoDB Hot Backup tool. The default
value is 100MB, and if you have enough available memory, 1GB to 2GB is a good recommended value.
Multiples are supported providing the unit (e.g. 1MB, 1M, 1GB, 1G).
--user=USERNAME
This option specifies the MySQL username used when connecting to the server, if that's not the
current user. The option accepts a string argument. See mysql --help for details.
-v See --version
--version
This option prints xtrabackup version and exits.
--xtrabackup-plugin-dir=DIRNAME
The absolute path to the directory that contains the keyring plugin.
SEE ALSO:
Percona Server for MySQL Documentation: keyring_vault plugin with Data at Rest Encryption
https://www.percona.com/doc/percona-server/LATEST/management/data_at_rest_encryption.html#keyring-vault-plugin
MySQL Documentation: Using the keyring_file File-Based Plugin
https://dev.mysql.com/doc/refman/5.7/en/keyring-file-plugin.html
AUTHOR
Percona LLC and/or its affiliates
COPYRIGHT
2009-2022, Percona LLC and/or its affiliates
8.0 Aug 15, 2024 XTRABACKUP(1)