Percona XtraBackup 是一款开源的热备份工具,适用于基于 MySQL/MariaDB 的服务器,可在计划维护窗口期间保持数据库完全可用。
安装
- Percona XtraBackup 2.4 针对 MySQL 5.7 发行版本
- Percona XtraBackup 8.0.x 针对 MySQL 8.0.x 发行版本
- Percona XtraBackup 8.4.x 针对 MySQL 8.4.x 发行版本
参考Debian-based systems
curl -O https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo apt install gnupg2 lsb-release ./percona-release_latest.generic_all.deb
sudo apt update
sudo percona-release setup pxb-80
sudo apt install percona-xtrabackup-80
$ xtrabackup --version
xtrabackup version 8.0.35-32 based on MySQL server 8.0.35 Linux (x86_64) (revision id: c339924a)
help
$ xtrabackup --help
xtrabackup version 8.0.35-32 based on MySQL server 8.0.35 Linux (x86_64) (revision id: c339924a)
Open source backup tool for InnoDB and XtraDB
Copyright (C) 2009-2019 Percona LLC and/or its affiliates.
Portions Copyright (C) 2000, 2011, MySQL AB & Innobase Oy. All Rights Reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation version 2
of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You can download full text of the license on http://www.gnu.org/licenses/gpl-2.0.txt
Usage: [xtrabackup [--defaults-file=#] --backup | xtrabackup [--defaults-file=#] --prepare] [OPTIONS]
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
The following groups are read: xtrabackup mysqld
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit.
--no-defaults Don't read default options from any option file,
except for login file.
--defaults-file=# Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.
--defaults-group-suffix=#
Also read groups with concat(group, suffix)
--login-path=# Read this path from the login file.
-v, --version print xtrabackup version information
--target-dir=name destination directory
--backup take backup to target-dir
--stats calc statistic of datadir (offline mysqld is recommended)
--prepare prepare a backup for starting mysql server on the backup.
--export create files to import to another database when prepare.
--apply-log-only stop recovery process not to progress LSN after applying
log when prepare.
--print-param print parameter of mysqld needed for copyback.
--use-memory=# The value is used instead of buffer_pool_size
--use-free-memory-pct=#
This option specifies the percentage of free memory to be
used by buffer pool at --prepare stage (default is 0% -
disabled).
--estimate-memory This option enable/disable the estimation of memory
required to prepare the backup. The estimation happens
during backup. (Default OFF)
--throttle=# limit count of IO operations (pairs of read&write) per
second to IOS values (for '--backup')
--log[=name] Ignored option for MySQL option compatibility
--log-copy-interval=#
time interval between checks done by log copying thread
in milliseconds (default is 1 second).
--extra-lsndir=name (for --backup): save an extra copy of the
xtrabackup_checkpoints file in this directory.
--incremental-lsn=name
(for --backup): copy only .ibd pages newer than specified
LSN 'high:low'. ##ATTENTION##: If a wrong LSN value is
specified, it is impossible to diagnose this, causing the
backup to be unusable. Be careful!
--incremental-basedir=name
(for --backup): copy only .ibd pages newer than backup at
specified directory.
--redo-log-arch-dir=name
Set redo log archive destination directory if not already
set in the server
--incremental-dir=name
(for --prepare): apply .delta files and logfile in the
specified directory.
--to-archived-lsn=# Don't apply archived logs with bigger log sequence
number.
--tables=name filtering by regexp for table names.
--tables-file=name filtering by list of the exact database.table name in the
file.
--databases=name filtering by list of databases.
--databases-file=name
filtering by list of databases in the file.
--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.
--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.
--create-ib-logfile ** not work for now** creates ib_logfile* also after
'--prepare'. ### If you want create ib_logfile*, only
re-execute this command in same options. ###
--stream[=name] Stream all backup files using xbstream format. Files are
streamed to STDOUT or FIFO files depending on
--fifo-streams option. The only supported stream format
is 'xbstream'.
--compress[=name] Compress individual backup files using the specified
compression algorithm. Supported algorithms are 'lz4' and
'zstd'. The default algorithm is 'zstd'.
--compress-threads=#
Number of threads for parallel data compression. The
default value is 1.
--compress-chunk-size=#
Size of working buffer(s) for compression threads in
bytes. The default value is 64K.
--compress-zstd-level=#
Zstandard compression level. from 1 - 19. The default
value is 1.
--encrypt=name Encrypt individual backup files using the specified
encryption algorithm.
--encrypt-key=name Encryption key to use.
--encrypt-key-file=name
File which contains encryption key to use.
--encrypt-threads=# Number of threads for parallel data encryption. The
default value is 1.
--encrypt-chunk-size=#
Size of working buffer(S) for encryption threads in
bytes. The default value is 64K.
--rebuild-threads=# Use this number of threads to rebuild indexes in a
compact backup. Only has effect with --prepare and
--rebuild-indexes.
--incremental-force-scan
Perform a full-scan incremental backup even if page
tracking is enabled on server
--close-files do not keep files opened. Use at your own risk.
--core-file Write core on fatal signals
--copy-back Copy all the files in a previously made backup from the
backup directory to their original locations.
--move-back Move all the files in a previously made backup from the
backup directory to the actual datadir location. Use with
caution, as it removes backup files.
--galera-info This options 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. Has no effect when backup
locks are used to create the backup.
--slave-info This option is useful when backing up a replication slave
server. It prints the binary log position and name of the
master server. It also writes this information to the
"xtrabackup_slave_info" file as a "CHANGE MASTER"
command. A new slave for this master can be set up by
starting a slave server on this backup and issuing a
"CHANGE MASTER" command with the binary log position
saved in the "xtrabackup_slave_info" file.
--page-tracking use the page-tracking server feature for incremental
backup instead of the full scan of data files. With
--page-tracking, xtrabackup will start page tracking on
the server during backup by invoking mysqlbackup
component service API. When --page-tracking is used
during subsequent incremental backup, it will use the
page-tracking file generated by the server to copy delta
pages modified since the last backup.
--no-lock Use this option to disable lock-ddl and 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. If you
are considering to use --no-lock because your backups are
failing to acquire the lock, this could be because of
incoming replication events preventing the lock from
succeeding. Please try using --safe-slave-backup to
momentarily stop the replication slave thread, this may
help the backup to succeed and you then don't need to
resort to using this option.
--lock-ddl Issue LOCK TABLES/LOCK INSTANCE FOR BACKUP if it is
supported by server at the beginning of the backup to
block all DDL operations.
(Defaults to on; use --skip-lock-ddl to disable.)
--lock-ddl-timeout=#
If LOCK TABLES FOR BACKUP does not return within given
timeout, abort the backup.
--lock-ddl-per-table
Lock DDL for each table before xtrabackup starts the copy
phase and until the backup is completed.
--backup-lock-timeout=#
Timeout in seconds for attempts to acquire metadata
locks.
--backup-lock-retry-count=#
Number of attempts to acquire metadata locks.
--dump-innodb-buffer-pool
Instruct MySQL server to dump innodb buffer pool by
issuing a SET GLOBAL innodb_buffer_pool_dump_now=ON
--dump-innodb-buffer-pool-timeout=#
This option specifies the number of seconds xtrabackup
waits for innodb buffer pool dump to complete
--dump-innodb-buffer-pool-pct=#
This option specifies the percentage of buffer pool to be
dumped
--safe-slave-backup This option stops slave SQL thread at the start of the
backup if lock-ddl=ON or before copying non-InnoDB tables
if lock-ddl=OFF and waits 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 slave SQL thread
will be restarted when the backup finishes.
--rsync Uses the rsync utility to optimize local file transfers.
When this option is specified, innobackupex 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.
--force-non-empty-directories
This option, when specified, makes --copy-back or
--move-back transfer files to non-empty directories. Note
that no existing files will be overwritten. If
--copy-back or --nove-back has to copy a file from the
backup directory which already exists in the destination
directory, it will still fail with an error.
--no-server-version-check
This option allows backup to proceed when the server
version is greater (newer) than the PXB supported
version. (This option is deprecated).
--no-version-check This option disables the version check which is enabled
by the --version-check option.
--tables-compatibility-check
This option enables engine compatibility warning.
(Defaults to on; use --skip-tables-compatibility-check to disable.)
--no-backup-locks This option controls if backup locks should be used
instead of FLUSH TABLES WITH READ LOCK on the backup
stage. It will disable lock-ddl. The option has no effect
when backup locks are not supported by the server. This
option is disabled by default, disable with
--no-backup-locks.
--rollback-prepared-trx
Force rollback prepared InnoDB transactions.
--decompress Decompresses all the compressed files made with the
--compress option.
-u, --user=name 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.
-H, --host=name This option specifies the host to use when connecting to
the database server with TCP/IP. The option accepts a
string argument. See mysql --help for details.
-P, --port=# This option specifies the port to use when connecting to
the database server with TCP/IP. The option accepts a
string argument. See mysql --help for details.
-p, --password[=name]
This option specifies the password to use when connecting
to the database. It accepts a string argument. See mysql
--help for details.
-S, --socket=name This option specifies the socket to use when connecting
to the local database server with a UNIX domain socket.
The option accepts a string argument. See mysql --help
for details.
--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.
--decrypt=name Decrypts all files with the .xbcrypt extension in a
backup previously made with --encrypt option.
--remove-original Remove .qp, .zst, .lz4 and .xbcrypt files after
decryption and decompression.
--ftwrl-wait-query-type=name
This option specifies which types of queries are allowed
to complete before innobackupex will issue the global
lock. Default is all.
--kill-long-query-type=name
This option specifies which types of queries should be
killed to unblock the global lock. Default is "SELECT".
--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.
--kill-long-queries-timeout=#
This option specifies the number of seconds innobackupex
waits between starting FLUSH TABLES WITH READ LOCK and
killing those queries that block it. Default is 0
seconds, which means innobackupex will not attempt to
kill any queries.
--ftwrl-wait-timeout=#
This option specifies time in seconds that innobackupex
should wait for queries that would block FTWRL before
running it. If there are still such queries when the
timeout expires, innobackupex terminates with an error.
Default is 0, in which case innobackupex does not wait
for queries to complete and starts FTWRL immediately.
--ftwrl-wait-threshold=#
This option specifies the query run time threshold which
is used by innobackupex to detect long-running queries
with a non-zero value of --ftwrl-wait-timeout. FTWRL 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.
--debug-sleep-before-unlock=#
This is a debug-only option used by the XtraBackup test
suite.
--safe-slave-backup-timeout=#
How many seconds --safe-slave-backup should wait for
Slave_open_temp_tables to become zero. (default 300)
--check-privileges Check database user privileges before performing any
query.
--read-buffer-size[=#]
Set datafile read buffer size, given value is scaled up
to page size. Default is 10Mb.
--server-public-key-path=name
File path to the server public RSA key in PEM format.
--get-server-public-key
Get server public key
--ssl-mode=name SSL connection mode.
--ssl-ca=name CA file in PEM format.
--ssl-capath=name CA directory.
--ssl-cert=name X509 cert in PEM format.
--ssl-cipher=name SSL cipher to use.
--ssl-key=name X509 key in PEM format.
--ssl-crl=name Certificate revocation list.
--ssl-crlpath=name Certificate revocation list path.
--tls-version=name TLS version to use, permitted values are: TLSv1.2,
TLSv1.3
--ssl-fips-mode=name
SSL FIPS mode (applies only for OpenSSL); permitted
values are: OFF, ON, STRICT
--tls-ciphersuites=name
TLS v1.3 cipher to use.
--ssl-session-data=name
Session data file to use to enable ssl session reuse
--ssl-session-data-continue-on-failed-reuse
If set to ON, this option will allow connection to
succeed even if session data cannot be reused.
--server-public-key-path=name
File path to the server public RSA key in PEM format.
--transition-key[=name]
Transition key to encrypt tablespace keys with.
--xtrabackup-plugin-dir=name
Directory for xtrabackup plugins.
--plugin-load=name List of plugins to load.
--generate-new-master-key
Generate new master key when doing copy-back.
--generate-transition-key
Generate transition key and store it into keyring.
--keyring-file-data[=name]
Path to keyring file.
--component-keyring-config[=name]
Path to load component config. Used for --prepare,
--move-back, --copy-back and --stats.
--component-keyring-file-config[=name]
Path to load keyring component config. Used for
--prepare, --move-back, --copy-back and --stats.
(Deprecated, please use --component-keyring-config
instead)
--parallel=# Number of threads to use for parallel datafiles transfer.
The default value is 1.
--fifo-streams=# Number of FIFO files to use for parallel datafiles
stream. Setting this parameter to 1 disables FIFO and
stream is sent to STDOUT.
--fifo-dir=name Directory to write Named Pipe. If ommited, we use
--target-dir
--fifo-timeout=# How many seconds to wait for other end to open the fifo
stream for reading. Default 60 seconds
--strict Fail with error when invalid arguments were passed to the
xtrabackup.
(Defaults to on; use --skip-strict to disable.)
--rocksdb-checkpoint-max-age=#
Maximum ROCKSB checkpoint age in seconds.
--rocksdb-checkpoint-max-count=#
Maximum count of ROCKSB checkpoints.
-h, --datadir=name Path to the database root.
-t, --tmpdir=name Path for temporary files. Several paths may be specified,
separated by a colon (:), in this case they are used in a
round-robin fashion.
--log[=name] Ignored option for MySQL option compatibility
--log-bin[=name] Base name for the log sequence
--log-bin-index=name
File that holds the names for binary log files.
--innodb[=name] Ignored option for MySQL option compatibility
--innodb-adaptive-hash-index
Enable InnoDB adaptive hash index (enabled by default).
Disable with --skip-innodb-adaptive-hash-index.
(Defaults to on; use --skip-innodb-adaptive-hash-index to disable.)
--innodb-autoextend-increment=#
Data file autoextend increment in megabytes
--innodb-buffer-pool-size=#
The size of the memory buffer InnoDB uses to cache data
and indexes of its tables.
--innodb-checksums Enable InnoDB checksums validation (enabled by default).
Disable with --skip-innodb-checksums.
(Defaults to on; use --skip-innodb-checksums to disable.)
--innodb-data-file-path=name
Path to individual files and their sizes.
--innodb-data-home-dir=name
The common part for InnoDB table spaces.
--innodb-io-capacity[=#]
Number of IOPs the server can do. Tunes the background IO
rate
--innodb-read-io-threads=#
Number of background read I/O threads in InnoDB.
--innodb-write-io-threads=#
Number of background write I/O threads in InnoDB.
--innodb-file-per-table
Stores each InnoDB table to an .ibd file in the database
dir.
--innodb-flush-log-at-trx-commit[=#]
Set to 0 (write and flush once per second), 1 (write and
flush at each commit) or 2 (write at commit, flush once
per second).
--innodb-flush-method=name
With which method to flush data.
--innodb-force-recovery=#
Helps to save your data in case the disk image of the
database becomes corrupt.
--innodb-log-buffer-size=#
The size of the buffer which InnoDB uses to write log to
the log files on disk.
--innodb-log-file-size=#
Size of each log file in a log group.
--innodb-log-files-in-group=#
Number of log files in the log group. InnoDB writes to
the files in a circular fashion. Value 3 is recommended
here.
--innodb-log-group-home-dir=name
Path to InnoDB log files.
--innodb-max-dirty-pages-pct=#
Percentage of dirty pages allowed in bufferpool.
--innodb-open-files=#
How many files at the maximum InnoDB keeps open at the
same time.
--innodb-use-native-aio
Use native AIO if supported on this platform.
--innodb-page-size=#
The universal page size of the database.
--innodb-log-block-size=#
The log block size of the transaction log file. Changing
for created log file is not supported. Use on your own
risk!
--innodb-buffer-pool-filename=name
Filename to/from which to dump/load the InnoDB buffer
pool
--debug-sync=name Debug sync point. This is only used by the xtrabackup
test suite
--innodb-checksum-algorithm=name
The algorithm InnoDB uses for page checksumming. [CRC32,
STRICT_CRC32, INNODB, STRICT_INNODB, NONE, STRICT_NONE]
--innodb-log-checksums
Whether to compute and require checksums for InnoDB redo
log blocks
(Defaults to on; use --skip-innodb-log-checksums to disable.)
--innodb-undo-directory=name
Directory where undo tablespace files live, this path can
be absolute.
--innodb-directories=name
List of directories 'dir1;dir2;..;dirN' to scan for
tablespace files. Default is to scan
'innodb-data-home-dir;innodb-undo-directory;datadir'
--temp-tablespaces-dir=name
Directory where temp tablespace files live, this path can
be absolute.
--innodb-undo-tablespaces=#
Number of undo tablespaces to use.
--innodb-redo-log-encrypt
Enable or disable Encryption of REDO tablespace.
--innodb-undo-log-encrypt
Enable or disable Encrypt of UNDO tablespace.
--defaults-group=name
defaults group in config file (default "mysqld").
--open-files-limit=#
the maximum number of file descriptors to reserve with
setrlimit().
--server-id=# The server instance being backed up
--rocksdb-datadir=name
RocksDB data directory
--rocksdb-wal-dir=name
RocksDB WAL directory
--register-redo-log-consumer
Register a redo log consumer in the start of the backup.
If this option is enabled, it will block the server from
purging redo log if PXB redo follow thread is still
copying it and will stall DMLs on the server.
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- ----------------------------------------
datadir .
tmpdir /tmp
log (No default value)
log-bin (No default value)
log-bin-index (No default value)
innodb (No default value)
innodb-adaptive-hash-index TRUE
innodb-autoextend-increment 8
innodb-buffer-pool-size 8388608
innodb-checksums TRUE
innodb-data-file-path (No default value)
innodb-data-home-dir (No default value)
innodb-io-capacity 200
innodb-read-io-threads 4
innodb-write-io-threads 4
innodb-file-per-table FALSE
innodb-flush-log-at-trx-commit 1
innodb-flush-method littlesync
innodb-force-recovery 0
innodb-log-buffer-size 16777216
innodb-log-file-size 50331648
innodb-log-files-in-group 2
innodb-log-group-home-dir (No default value)
innodb-max-dirty-pages-pct 75
innodb-open-files 300
innodb-use-native-aio FALSE
innodb-page-size 16384
innodb-log-block-size 512
innodb-buffer-pool-filename (No default value)
debug-sync (No default value)
innodb-checksum-algorithm crc32
innodb-log-checksums TRUE
innodb-undo-directory (No default value)
innodb-directories (No default value)
temp-tablespaces-dir (No default value)
innodb-undo-tablespaces 2
innodb-redo-log-encrypt FALSE
innodb-undo-log-encrypt FALSE
defaults-group mysqld
open-files-limit 0
server-id 0
rocksdb-datadir (No default value)
rocksdb-wal-dir (No default value)
register-redo-log-consumer FALSE
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
----------------------------------------- --------------------------------
version FALSE
target-dir /xtrabackup_backupfiles/
backup FALSE
stats FALSE
prepare FALSE
export FALSE
apply-log-only FALSE
print-param FALSE
use-memory 104857600
use-free-memory-pct 0
estimate-memory FALSE
throttle 0
log (No default value)
log-copy-interval 1000
extra-lsndir (No default value)
incremental-lsn (No default value)
incremental-basedir (No default value)
redo-log-arch-dir (No default value)
incremental-dir (No default value)
to-archived-lsn 0
tables (No default value)
tables-file (No default value)
databases (No default value)
databases-file (No default value)
tables-exclude (No default value)
databases-exclude (No default value)
create-ib-logfile FALSE
stream (No default value)
compress (No default value)
compress-threads 1
compress-chunk-size 65536
compress-zstd-level 1
encrypt NONE
encrypt-key-file (No default value)
encrypt-threads 1
encrypt-chunk-size 65536
rebuild-threads 1
incremental-force-scan FALSE
close-files FALSE
copy-back FALSE
move-back FALSE
galera-info FALSE
slave-info FALSE
page-tracking FALSE
no-lock FALSE
lock-ddl TRUE
lock-ddl-timeout 31536000
lock-ddl-per-table FALSE
backup-lock-timeout 31536000
backup-lock-retry-count 0
dump-innodb-buffer-pool FALSE
dump-innodb-buffer-pool-timeout 10
dump-innodb-buffer-pool-pct 0
safe-slave-backup FALSE
rsync FALSE
force-non-empty-directories FALSE
no-server-version-check FALSE
no-version-check FALSE
tables-compatibility-check TRUE
no-backup-locks FALSE
rollback-prepared-trx FALSE
decompress FALSE
user (No default value)
host (No default value)
port 0
socket (No default value)
incremental-history-name (No default value)
incremental-history-uuid (No default value)
decrypt NONE
remove-original FALSE
ftwrl-wait-query-type ALL
kill-long-query-type SELECT
kill-long-queries-timeout 0
ftwrl-wait-timeout 0
ftwrl-wait-threshold 60
debug-sleep-before-unlock 0
safe-slave-backup-timeout 300
check-privileges FALSE
read-buffer-size 10485760
server-public-key-path (No default value)
get-server-public-key FALSE
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cert (No default value)
ssl-cipher (No default value)
ssl-key (No default value)
ssl-crl (No default value)
ssl-crlpath (No default value)
tls-version (No default value)
tls-ciphersuites (No default value)
ssl-session-data (No default value)
ssl-session-data-continue-on-failed-reuse FALSE
server-public-key-path (No default value)
xtrabackup-plugin-dir (No default value)
plugin-load (No default value)
generate-new-master-key FALSE
generate-transition-key FALSE
keyring-file-data (No default value)
component-keyring-config (No default value)
component-keyring-file-config (No default value)
parallel 1
fifo-streams 1
fifo-dir (No default value)
fifo-timeout 60
strict TRUE
rocksdb-checkpoint-max-age 0
rocksdb-checkpoint-max-count 0
支持的压缩算法 lz4、zstsd,使用需要安装对应的工具:
$ sudo apt install lz4
$ sudo apt install zstd
常用命令
# 备份,添加 --slave-info 备份集中会生成一个 xtrabackup_slave_info 文件,该文件记录备份时对应主库的一致性位置点信息
xtrabackup --user=xxx --password=xxx --backup --use-memory=10G \
--slave-info --compress --compress-threads=10 --target-dir=/data/backup、mysql_$(date +%Y%m%d%H%M) 1> backup.log 2> backup.err
# 备份&压缩
xtrabackup --backup --compress --target-dir=/data/compressed/
xtrabackup --backup --compress --compress-threads=4 --target-dir=/data/compressed/
xtrabackup --backup --compress=zstd --target-dir=/data/backup
xtrabackup --backup --compress=zstd --compress-zstd-level=1 -target-dir=/data/backup
xtrabackup --backup --compress=lz4 --target-dir=/data/backup
# 压缩的备份,还原前解压缩命令
xtrabackup --decompress --target-dir=/data/compressed/
# 准备备份:数据文件在准备好之前并不是时间点一致的,因为它们是在程序运行的不同时间复制的,而且在复制的过程中可能会发生变化。如果你试图用这些数据文件启动 InnoDB,它会检测到损坏并自行崩溃,以防止你在损坏的数据上运行。
xtrabackup --prepare --target-dir=/data/compressed/
# 还原备份,还原到服务器的 datadir
xtrabackup --copy-back --target-dir=/data/backups/
# 修改权限
chown -R mysql:mysql /var/lib/mysql
# 启动 MySQL 服务
xtrabackup --backup --target-dir=/data/backups/
xtrabackup --prepare --target-dir=/data/backups/
xtrabackup --copy-back --target-dir=/data/backups/
xtrabackup --move-back --target-dir=/data/backups/ # 等价于 rsync -avrP /data/backup/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
主库发起流备份并通过管道传输到从库解包
# 主库备份
xtrabackup -ubackup -pfanderpassword -H127.0.0.1 -P3306 \
--backup \
--stream=xbstream \
--compress \
--target-dir=/data/backups/ | ssh root@192.168.0.2 "xbstream -x -C /data/backups/"
# 从库恢复
xtrabackup --decompress --parallel=4 --remove-original --target-dir=/data/backups/
xtrabackup --prepare --use-memory=1GB --target-dir=/data/backups/
xtrabackup --defaults-file=/etc/my.cnf --move-back --parallel=4 --target-dir=/data/backups/
chown -R mysql:mysql /var/lib/mysql/
# 获取 gtid
$ cat ./xtrabackup_info | grep binlog_pos
binlog_pos = filename 'mysql-bin.0000xx', position 'xxx', GTID of the last change 'xxx-xxx-xxx-xxx-xxx:1-xxxx'
# 启动服务,并登录
mysql> reset master; # 不一定要支持,如果已经有了 gtid 的信息,可以跳过该步骤
mysql> set global gtid_purged="xxx-xxx-xxx-xxx-xxx:1-xxxx"
# 启动主从复制
mysql> CHANGE MASTER TO
MASTER_HOST='<mysql-master-ip>',
MASTER_USER='repl',
MASTER_PASSWORD='xxx',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;
mysql> start slave;
说明:主库本地备份的路径 /data/backups
不占用 空间
流式备份到 s3
$ xtrabackup --backup --stream=xbstream --extra-lsndir=/tmp --target-dir=/tmp | \
xbcloud put --storage=s3 \
--s3-endpoint='s3.amazonaws.com' \
--s3-access-key='YOUR-ACCESSKEYID' \
--s3-secret-key='YOUR-SECRETACCESSKEY' \
--s3-bucket='mysql_backups'
--parallel=10 \
$(date -I)-full_backup
Incremental Backup
- XtraBackup 的差异备份是基于完整备份的增量备份,只记录自上次完整备份以来发生变化的数据页
- 差异备份:总是基于完整备份,记录自完整备份以来的所有变化
- 增量备份:可以基于完整备份或前一个增量备份,只记录自上次备份以来的变化
# 全量备份
$ xtrabackup --backup --target-dir=/data/backups/base
# 增量备份
xtrabackup --backup --target-dir=/data/backups/inc1 \
--incremental-basedir=/data/backups/base
xtrabackup --backup --target-dir=/data/backups/inc2 \
--incremental-basedir=/data/backups/inc1
# 还原
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc1
xtrabackup --prepare --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc2
xtrabackup --prepare --target-dir=/data/backups/base
xtrabackup --copy-back --target-dir=/data/backups/base
F&Q
xtrabackup: File ‘/var/lib/mysql/mysql-bin.000005’ not found (OS errno 2 - No such file or directory)
xtrabackup 8.0 之后的版本,需要在命令运行的服务器上能访问对应的目录,如果是通过 docker 容器的 MySQL 服务,建议通过 docker run -v <datadir>//var/lib/mysql/
将数据目录挂载到容器中
xtrabackup unknown argument: –password
使用问题,通过 xtrabackup --password="xxx"
的形式使用