首页 » db » MySQL » MySQL数据库备份软件Percona XtraBackup

MySQL数据库备份软件Percona XtraBackup

 

Percona XtraBackup是一款基于MySQL数据库的开源备份软件,在备份期间不会锁定数据库,在数据库量大的场景中,相比mysqldump、mydumper方式,percona提供的备份方式更快,但是备份后的文件较大。

截至目前Percona XtraBackup提供了2.4版本和8.0版本。

percona 2.4版本可以备份MySQL5.1、5.5、5.6和5.7服务器上的InnoDB、XtraDB和MyISAM表的数据,以及带有XtraDB的 Percona Server。

percona 8.0版本可以备份MySQL8.0服务器上的InnoDB、XtraDB、MyISAM和MyRocks表以及带有XtraDB的Percona Server for MySQL、Percona Server for MySQL 8.0和Percona XtraDB Cluster 8.0上的数据。

注意:innobackupex已从Percona XtraBackup 8.0中删除,xtrabackup完全替代了innobackupex。在当前Percona XtraBackup 2.4的版本中innobackupex还依旧可用,所以应优先选择xtrabackup方式。

本文基于Centos7.x系统,Percona XtraBackup 2.4版本,MySQL5.7.43为例,在2.4版本中innobackupex与xtrabackup格式选项并不相同,但有些命令含义是一致的。

安装MySQL5.7(基于wlnmp一键安装包

安装percona(基于官方提供的源)

安装完成后,同时拥有了xtrabackup和innobackupex命令,可以结合实际情况选择,建议优先使用xtrabackup方式。

innobackupex常用备份、恢复示例

示例一,普通备份、恢复

备份

恢复

注意:备份时使用的用户密码和恢复时目录的日期结合实际情况自行更改。

示例二,使用--compress、--stream=xbstream压缩的备份、恢复

备份

恢复

xtrabackup常用备份、恢复示例

示例一,普通备份、恢复

备份

恢复

停止数据库并清理已有数据(因为我这里MySQL是基于wlnmp一键安装包安装的,数据目录在/data/mysql下,所以你要结合自身情况进行操作。)

示例二,使用--compress压缩的备份、恢复

备份

恢复

示例三,使用--compress、--stream=xbstream压缩的备份、恢复

备份(备份前要先创建/data/mysql_backup/目录)

恢复

示例四,增加压缩和备份时使用的线程数(集合实际机器性能自行调整)以提高备份速度,同时使用--compress、--stream=xbstream压缩备份、恢复

备份

恢复

示例五,只对某个库进行备份、恢复

备份

恢复

xtrabackup命令详细参数说明

注1:innobackupex命令参数与xtrabackup几乎一致,优先建议选择xtrabackup命令,innobackupex已在后续版本中弃用。

注2:参数参考官方文档:https://docs.percona.com/percona-xtrabackup/2.4/xtrabackup_bin/xbk_option_reference.html

xtrabackup命令格式

xtrabackup命令的第一个参数选项,可以使用以下参数之一替代“--defaults-file”

--print-defaults:打印my.cnf参数列表,使用方法例如xtrabackup --print-defaults。

--no-defaults:不读取任何默认的选项参数,所有选项参数都由自己指定,如果你使用这个选项了,那么xtrabackup命令,默认的选项全部都没有默认值,所有选项都由你自己指定,完全自定义备份恢复时用选项。

--defaults-file=#:指定my.cnf文件所在位置,如果不指定,默认会按照如下顺序查找,/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

--defaults-extra-file=#:指定一个额外的配置文件,该文件中包含了备份或恢复操作所需的配置参数。这个选项的主要作用是允许你将配置参数从默认的MySQL配置文件(如/etc/my.cnf)中分离出来,以便你可以更灵活地配置备份和恢复过程,而不会影响默认的MySQL配置。

--defaults-group-suffix=#:用于指定一个配置文件中的组名后缀,以允许你在一个配置文件中定义多个组并分别使用它们。这个选项的主要作用是允许你为不同的备份或恢复任务创建不同的配置组。

--login-path=#:从登录路径中读取信息连接到MySQL数据库,这个选项的主要目的是在备份和恢复操作中更安全地管理数据库连接信息,而不需要明文输入用户名和密码。

例如:通过 mysql_config_editor set --login-path=whsir --host=localhost --port=3306 --user=root --password 创建,输入密码后,会在当前用户的家目录下,生成.mylogin.cnf隐藏文件,该文件通过加密方式存储了连接信息,如果想查看.mylogin.cnf中内容,可以使用mysql_config_editor print --all查看。

这样再备份时,就可以使用--login-path=whsir来替代用户和密码,即 xtrabackup --login-path=whsir --compress --compress-threads=4 --parallel=2 --backup --stream=xbstream --target-dir=/data/mysql_backup/ > /data/mysql_backup/all.xbstream

xtrabackup命令选项

-v, --version:打印xtrabackup版本信息。

--target-dir=name:指定备份后的目录,如果指定的目录不存在,会自动创建,不会覆盖已存在的文件。

例: xtrabackup --defaults-file=/etc/my.cnf ---user=root --password='whsir' --compress --compress-threads=4 --target-dir=/data/mysql_backup/ --backup 等同于 innobackupex --defaults-file=/etc/my.cnf ---user=root --password='whsir' --compress --compress-threads=4 /data/mysql_backup/

--backup:创建备份(备份时需要使用该选项),并指定备份后的目录(--target-dir)。

--stats:打印表的统计信息,要在MySQL停止的状态下使用,例xtrabackup --defaults-file=/etc/my.cnf --stats。

--prepare:从备份中恢复数据,即通过--backup备份的文件执行恢复,以便准备使用。

--export:导出的表创建所需的文件。

--apply-log-only:准备备份时执行redo,用于增量备份。

--print-param:将数据文件拷贝到datadir并恢复它们。

--use-memory=#:设定内存分配最大值,类似于innodb_buffer_pool_size,该选项在--prepare或--stats使用。

--throttle=#:限制每秒复制的数据,如果--throttle=1则10 MB/s。

--log[=name]:为了与MySQL选项兼容性而被忽略的选项,表明某个选项在考虑与MySQL兼容性的情况下被忽略或不起作用。

--log-copy-interval=#:备份过程中复制二进制日志文件的时间间隔,默认1秒。

--extra-lsndir=name:在此目录中保存xtrabackup_checkpoints和xtrabackup_info文件的额外副本,用于-–backup。

--incremental-lsn=name:在--backup阶段使用,创建增量备份时,你可以指定日志序列号(LSN),而不是指定--incremental-basedi。

--incremental-basedir=name:在--backup阶段使用,创建增量备份时,包含增量备份基础数据的完整备份的目录。

--incremental-dir=name:在--prepare阶段使用,准备增量备份时,将增量备份与完整备份合并创建出新的完整备份目录。

例:全备
xtrabackup --defaults-file=/etc/my.cnf ---user=root --password='whsir' --target-dir=/data/mysql_backup/ --backup
增量备份
xtrabackup --defaults-file=/etc/my.cnf ---user=root --password='whsir' --target-dir=/data/mysql_backup1/ --incremental-basedir=/data/mysql_backup/ --backup
恢复
xtrabackup --prepare --apply-log-only --target-dir=/data/mysql_backup/
xtrabackup --prepare --apply-log-only --target-dir=/data/mysql_backup/ --incremental-dir=/data/mysql_backup1/
xtrabackup --prepare --target-dir=/data/mysql_backup/
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/mysql_backup/
chown -R mysql.mysql /data/mysql

--to-archived-lsn=#:指定日志序列号(LSN),与xtrabackup --prepare选项一起使用。

--tables=name:正则表达式匹配databasename.tablename格式的完整表名。如果名称匹配,则对表进行备份。例如备份wh开头的数据库下的所有表--tables="^wh[.]*.*"

--tables-file=name:指定一个文件,该文件每行包含一个表名,文件里每行的格式是databasename.tablename,例如--tables-file=/tmp/tables

--databases=name:指定备份的数据库和表,多个数据库多个表使用"databasename1[.table_name1] databasename2[.table_name2] . . ."格式。

例:只备份whsir这个库。 xtrabackup --defaults-file=/etc/my.cnf ---user=root --password='whsir' --target-dir=/data/mysql_backup/ --backup --databases="whsir"

--databases-file=name:指定包含应备份的数据库和表的文件路径,文件里每行的格式是databasename1[.table_name1]。

--tables-exclude=name:通过正则表达式排除表名,与--tables类似,如果名称匹配,则不在备份范围内,该选项优先级高于--tables。

--databases-exclude=name:根据指定的名称排除数据库,与--databases类似,如果名称匹配,则不在备份范围内,该选项优先级高于--databases。

--create-ib-logfile:这个选项暂时无用(官方说的)。

--stream=name:备份时以指定格式流标准输出,仅支持xbstream和tar,当--stream=tar时不能和--compress一起使用。

--compress:压缩备份,会讲备份出来的数据进行压缩,恢复时要使用--decompress解压缩。

--compress-threads=#:压缩时使用的线程数量。

--compress-chunk-size=#:每个压缩线程的工作缓冲区(working buffer(s) )大小(字节),默认64K。

--encrypt=name:通过ENCRYPTION_ALGORITHM加密算法加密innodb数据文件的备份,目前支持的算法有ASE128、AES192、AES256。

--encrypt-key=name:使用给定长度的加密密钥。

--encrypt-key-file=name:指定给定长度的加密密钥所在的文件。

--encrypt-threads=#:并行加密的线程数量。

--encrypt-chunk-size=#:每个加密线程的缓冲区大小,单位字节。

--compact:创建一个没有索引的备份。

--rebuild-indexes:重建索引备份,与--prepare一起使用。

--rebuild-threads=#:重建索引备份时使用的线程数量,与--prepare和--rebuild-indexes一起使用。

--incremental-force-scan:创建增量备份时,强制扫描所有增量备份。

--close-files:不要保持文件打开状态,当xtrabackup打开表空间时,通常不会关闭其文件句柄,以便正确管理DDL操作,启用该选项可能会产生不一致的备份。

--core-file:在fatal signals时写入核心。

--copy-back:从备份中恢复后的数据,复制到原始数据所在的目录,原始数据目录必须是空的,除非指定了--force-non-empty-directories选项,不管怎样都不会覆盖同名的数据文件。

--move-back:与--copy-back相似,唯一区别是它不复制文件,而是直接移动文件到原数据目录中,恢复操作时,--copy-back和--move-back任选其一,理应优先使用--copy-back。

--galera-info:该选项会创建包含本地节点状态的xtrabackup_galera_info文件,该选项应在执行Percona XtraDB集群备份时使用。

--slave-info:对从库备份时使用,打印出主的名字和二进制日志,以CHANGE MASTER命令写入xtrabackup_slave_info文件,可以基于这个备份启动一个新的从库。

--no-lock:禁用FLUSH TABLES WITH READ LOCK表锁,只有当所有表都是InnoDB表,且不关心备份的二进制日志的位置时,才使用该选项,如果要执行任何DDL语句或更新任何非InnoDB表(包括 mysql数据库中的MyISAM表),请勿使用该选项。在这些情况下使用该选项可能会导致备份不一致,如果考虑备份因为获得锁失败,可以尝试使用--safe-slave-backup暂时停止复制线程。使用--no-lock 时不会创建xtrabackup-binlog-info,因为SHOW MASTER STATUS可能会不一致。在某些情况下,可以使用xtrabackup_binlog_pos_innodb,以获得一致二进制位置。

--lock-ddl:如果服务器支持,在备份开始时发出LOCK TABLES FOR BACKUP以阻止所有DDL操作。

--lock-ddl-timeout=#:如果LOCK TABLES FOR BACKUP在指定的超时时间内未返回,则中止备份。

--lock-ddl-per-table:在xtrabackup开始复制之前,锁定每个表的DDL,直到备份完成。

--backup-lock-timeout=#:获取元数据锁的超时时间,以秒为单位。

--backup-lock-retry-count=#:尝试获取元数据锁的次数。

--dump-innodb-buffer-pool:用于指定是否在备份期间将InnoDB缓冲池(InnoDB Buffer Pool)的内容导出到备份目录中。InnoDB缓冲池是MySQL中用于缓存数据和索引的关键内存组件,它存储了数据库表的数据页,以提高访问性能。如果你使用了该选项,那么在备份期间,xtrabackup会将InnoDB缓冲池的内容导出到备份目录中的ib_buffer_pool文件中。这可以帮助在恢复备份时更快地预热InnoDB缓冲池,从而提高数据库的性能。

--dump-innodb-buffer-pool-timeout=#:等待InnoDB缓冲池的内容导出到备份目录中的超时时间。

--dump-innodb-buffer-pool-pct=#:指定导出InnoDB缓冲池的一部分,而不是全部。这个参数允许你指定要导出的InnoDB缓冲池的百分比。如果你使用--dump-innodb-buffer-pool-pct=50,那么只有一半的InnoDB缓冲池内容会被导出到备份中。

--safe-slave-backup:该选项表示为保证一致性复制状态,xtrabackup会在运行FLUSH TABLES WITH READ LOCK之前停止复制SQL线程,直到SHOW STATUS中的Slave_open_temp_tables为0的时候才开始备份,如果没有打开临时表,bakcup会立刻开始,否则SQL线程将启动并停止,直到没有打开的临时表为止,如果在xtrabackup --safe-slave-backup-timeout秒后 ,Slave_open_temp_tables不为0,备份将失败,直到备份完成后,将重启SQL复制线程,该选项主要是为了处理临时表复制的问题,对于基于行复制(Row-Based-Replication)来说并非必要。

--rsync:使用rsync命令优化本地文件传输,指定该选项后,xtrabackup会使用rsync复制所有非InnoDB文件,对于拥有大量数据库或表的服务器,该选项的速度更快,该选项不能与--stream一起使用。

--force-non-empty-directories:该选项在--copy-back或--move-back时使用,恢复备份数据到非空的目录中,在恢复的目录中已存在且不同名的文件可以恢复成功,如果存在同名文件则一样恢复失败。

例:当前MySQL数据文件在/data/mysql目录中,恢复前需要先清空/data/mysql目录中的数据,这是一个正常的恢复流程,假设在/data/mysql目录中存在一个whsir目录,那么此时执行 xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/mysql_backup/ 恢复操作,则失败。追加上--force-non-empty-directories选项则成功,即 xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/mysql_backup/ --force-non-empty-directories ,那么此时/data/mysql目录中还依旧保留着whsir目录,数据也同样恢复完成。

假设备份的数据存在whsir目录,那么此时不管是否使用--force-non-empty-directories选项,均失败,因为不会覆盖/data/mysql目录中已有的文件。

--no-version-check:禁用系统数据库工具包--version-check版本检查。

--tables-compatibility-check:启用引擎兼容性警告,默认为开启状态,可使用--skip-tables-compatibility-check禁用。

--no-backup-locks:在备份阶段是否使用备份锁,默认情况下启用--backup-locks。

--decompress:解压缩,如果备份时使用了--compress选项,在恢复时就需要使用--decompress解压缩。

-u, --user=name:指定连接MySQL数据库时,使用的用户名。

-H, --host=name:指定连接MySQL数据库时,使用的主机。

-P, --port=#:指定连接MySQL数据库时所使用的端口。

-p, --password[=name]:指定连接MySQL数据库时,使用的密码。

-S, --socket=name:指定连接MySQL数据库时,使用的socket文件。

--incremental-history-name=name:该选项指定存储在PERCONA_SCHEMA.xtrabackup_history历史记录中的备份名称,作为增量备份的基础,xtrabackup在历史记录中搜索最近(innodb_to_lsn最高),成功的备份,并将to_lsn值作为增量备份的起始lsn。与xtrabackup --incremental-history-uuid、xtrabackup --incremental-basedir和xtrabackup --incremental-lsn互斥,如果找不到有效的LSN,xtrabackup将返回错误,它与xtrabackup --incremental选项一起使用。

--incremental-history-uuid=name:该选项指定存储在PERCONA_SCHEMA.xtrabackup_history历史记录中的UUID,作为增量备份的基础,根据--incremental-history-name、--incremental-basedir、--incremental-lsn进行增量备份,如果找不到有效的LSN,xtrabackup将返回错误,它与xtrabackup --incremental选项一起使用。

--decrypt=name:如果备份时使用了--encrypt选项,恢复时需要通过该选项解密.xbcrypt文件。

--remove-original:解密解压缩后删除.qp和.xbcrypt文件。

--ftwrl-wait-query-type=name:指定在xtrabackup发出全局锁之前,允许哪些类型的查询,默认为all(全部)。

--kill-long-query-type=name:指定在备份过程中杀死长时间运行查询的类型,默认为SELECT。

--history[=name]:该选项可在PERCONA_SCHEMA.xtrabackup_history表中跟踪备份历史。可以指定一个可选的历史系列名称,该名称将与正在备份的历史记录放在一起。

--kill-long-queries-timeout=#:指定在备份过程中杀死长时间运行查询的超时时间,默认值为0,长时间运行的查询可能会在备份期间对数据库服务器产生不必要的负载,因此通过指定超时时间来杀死它们,以减少备份期间的干扰。

--ftwrl-wait-timeout=#:设置等待FTWRL(Flush Tables with Read Lock)操作完成的超时时间。

--ftwrl-wait-threshold=#:设置FTWRL(Flush Tables with Read Lock)操作的等待阈值。

--debug-sleep-before-unlock=#:debug调试专用选项。

--safe-slave-backup-timeout=# :指定--safe-slave-backup等待Slave_open_temp_tables变为零的秒数(默认为300秒)。

--binlog-info[=name]:指定二进制日志(binlog)信息,值可以是OFF, ON, LOCKLESS、AUTO。

--reencrypt-for-server-id=#:当数据库的Server ID不同时,根据新的server_id生成新主密钥,将其存储到密钥文件中,并重新加密表空间头中的表空间密钥。该选项在--prepare使用。

--check-privileges:该选项检查Percona XtraBackup是否拥有所需的权限。如果当前操作权限不足,执行中止并打印出错信息。如果当前操作权限有,但其他XtraBackup操作权限可能不足,则不会中止进程,并打印警告信息。

xtrabackup: Error: missing required privilege LOCK TABLES on *.*
xtrabackup: Warning: missing required privilege REPLICATION CLIENT on *.*

--read-buffer-size[=#]:设置读缓冲区的大小,默认大小10MB,使用该选项,可以在10MB的基础上增加xbcloud/xbstream块大小,调整xbcloud/xbstream同时,也需要同时调整--encrypt-chunk-size和--read-buffer-size变量。

--ssl-mode=name:SSL连接模式,等同于MySQL的--ssl-mode选项。

--ssl:已弃用,请使用--ssl-mode。

--ssl-verify-server-cert:已弃用,请使用--ssl-mode=VERIFY_IDENTITY。

--ssl-ca=name:PEM格式的CA证书。

--ssl-capath=name:CA证书目录。

--ssl-cert=name:证书公钥。

--ssl-cipher=name:与MySQL该参数含义一致。

--ssl-key=name:证书私钥。

--ssl-crl=name:吊销的证书。

--ssl-crlpath=name:吊销的证书路径。

--tls-version=name:要使用的TLS版本,TLSv1,TLSv1.1,TLSv1.2

--server-public-key-path=name:RSA格式公钥路径。

-h, --datadir=name:指定数据库路径,与MySQL命令含义一致。

-t, --tmpdir=name:临时文件路径,可以同时指定多个,多个之间用(:)分割。

--parallel=#:创建备份时使用的线程数,可与--compress-threads=#一同使用。

--log[=name]:忽略。

--log-bin[=name]:二进制日志名称。

--innodb[=name]:忽略。

--defaults-group=name:配置文件中的组名称,默认mysqld。

--open-files-limit=#:文件描述符最大打开数。

--redo-log-version=#:重放日志版本,与--prepare使用。

--server-id=#:server id。

--xtrabackup-plugin-dir=name:xtrabackup插件目录。

--generate-new-master-key:复制时生成的新的主密钥。

--generate-transition-key:生成临时密钥存储在密钥中,允许在两个不同的密钥版本之间进行平稳过渡。

InnoDB的一些选项,通常我们不需要手动指定,具体如下:

--innodb-adaptive-hash-index
--innodb-additional-mem-pool-size
--innodb-autoextend-increment
--innodb-buffer-pool-size
--innodb-checksums
--innodb-data-file-path
--innodb-data-home-dir
--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-force-recovery
--innodb-io-capacity
--innodb-lock-wait-timeout
--innodb-log-buffer-size
--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-write-io-threads
--innodb-buffer-pool-filename

原文链接:MySQL数据库备份软件Percona XtraBackup,转载请注明来源!

0