xtrabackup: MySQL 数据库备份工具

发布时间: 更新时间: 总字数:4374 阅读时间:9m 作者: IP上海 分享 网址

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 --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" 的形式使用

参考

  1. https://docs.percona.com/percona-xtrabackup/8.0/
  2. https://docs.percona.com/percona-xtrabackup/8.0/restore-a-backup.html
  3. https://docs.percona.com/percona-xtrabackup/2.4/backup_scenarios/full_backup.html
  4. https://docs.percona.com/percona-xtrabackup/2.4/backup_scenarios/compressed_backup.html
  5. https://docs.percona.com/percona-xtrabackup/8.0/create-incremental-backup.html
  6. https://docs.percona.com/percona-xtrabackup/8.0/create-gtid-replica.html
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数