- 前置要求
- 1.完整备份
- 2.增量备份
- 3.部分备份
- xtrabackup—tables">3.1使用xtrabackup—tables
- xtrabackup—tables-file">3.2.使用xtrabackup—tables-file
- xtrabackup —databases和xtrabackup —databases-file">3.3.使用xtrabackup —databases和xtrabackup —databases-file
- 3.4.部分恢复/恢复单个表
- 3.4.1.导出表
- xtrabackup —export">3.4.2.准备备份,请在命令中添加额外的参数xtrabackup —export
- 3.4.3.导入表
- 3.4.部分恢复/恢复单个数据库
Percona XtraBackup是基于MySQL的服务器的开源热备份实用程序,在备份过程中不会锁定数据库。
它可以从MySQL 5.1 [1],5.5、5.6和5.7服务器以及带有XtraDB的MySQL的Percona服务器上的InnoDB,XtraDB和MyISAM表中 备份数据。
有关其许多高级功能的高级概述,包括功能比较,请参见关于Percona XtraBackup。
无论是24x7高负载服务器还是低事务量环境,Percona XtraBackup都旨在使备份成为无缝过程,而不会破坏生产环境中服务器的性能。有商业支持合同。
重要的
Percona XtraBackup 2.4不支持对在MySQL 8.0,用于MySQL 8.0的Percona Server或Percona XtraDB Cluster 8.0中创建的数据库进行备份。
前置要求
在安装有MySQL的服务器中安装Percona XtraBackup
1.完整备份
将数据备份到【/home/data/backups/full/】目录中
xtrabackup --user=root --password=123456 --backup --target-dir=/home/data/backups/full/
1.2.准备备份
使用 xtrabackup --backup 选项进行备份后,首先需要准备好备份才能还原。xtrabackup --prepare步骤可以使文件在单个时刻完美地保持一致。如果打算将备份作为进一步增量备份的基础,则在准备备份时应使用 xtrabackup --apply-log-only选项,否则将无法对其应用增量备份。 有关更多详细信息,请参见有关准备增量备份的文档。
xtrabackup --prepare --target-dir=/home/data/backups/full/
1.3.恢复备份
必须先准备好备份,然后才能还原它。恢复备份之前,datadir 必须为空。同样需要注意的是,必须先关闭MySQL服务器,然后才能执行还原操作。您无法还原到正在运行的mysqld实例的 datadir (导入部分备份时除外)。
可以使用 scp 命令将备份的数据移动到其他MySQL服务器中进行恢复
scp -r /home/data/backups/full/ root@192.168.28.150:/home/data/backups/full/
1.3.1.关闭MySQL服务
service mysql stop
1.3.2.清空datadir目录
rm -rf /xxx/xxx
1.3.3.开始还原数据
xtrabackup --copy-back --target-dir=/home/data/backups/full/
1.3.4.更改数据目录权限
您需要将文件的所有权更改为mysql,因为它们将由创建备份的用户拥有
chown -R mysql:mysql /home/mysql-5.7.26/
1.3.5.启动MySQL服务
service mysql start
2.增量备份
2.1.基于完整备份进行增量备份,使用如下命令
xtrabackup --user=root --password=123456 --backup --target-dir=/home/data/backups/increment/inc1 --incremental-basedir=/home/data/backups/increment/full
现在可以将此增量目录用作另一个增量备份的基础
xtrabackup --user=root --password=123456 --backup --target-dir=/home/data/backups/increment/inc2 --incremental-basedir=/home/data/backups/increment/inc1
2.2.观察增量备份情况
查看基础备份xtrabackup_checkpoints文件
cat full/xtrabackup_checkpoints#例如展示如下内容backup_type = full-backupedfrom_lsn = 0to_lsn = 2527770last_lsn = 2527779compact = 0recover_binlog_info = 0
查看增量备份xtrabackup_checkpoints文件
from_lsn 是备份的起始LSN,对于增量备份,它必须与先前/基本备份的 to_lsn (如果它是最后一个检查点)相同。
cat inc1/xtrabackup_checkpoints#例如展示如下内容backup_type = incrementalfrom_lsn = 2527770to_lsn = 2528044last_lsn = 2528053compact = 0recover_binlog_info = 0
在这种情况下,您可以看到to_lsn (最后一个检查点LSN)和last_lsn (最后一个复制的LSN)之间存在差异,这意味着在备份过程中服务器上有一些流量。
2.3.准备增量备份
增量备份的xtrabackup —prepare步骤与完全备份不同。 在完全备份中,执行两种类型的操作以使数据库保持一致:已提交的事务相对于数据文件从日志文件中重放,未提交的事务被回滚。 在准备增量备份时,您必须跳过未提交事务的回滚,因为在备份时未提交的事务可能正在进行中,并且很可能会在下一次增量备份中提交。
您应该使用 xtrabackup —apply-log-only 选项来防止回滚阶段。
如果不使用xtrabackup —apply-log-only选项来防止回滚阶段,则增量备份将无用。 事务回滚后,无法再应用增量备份。
2.3.1.要准备基本备份,您需要像往常一样运行 xtrabackup —prepare ,但是要防止回滚阶段
xtrabackup --prepare --apply-log-only --target-dir=/home/data/backups/increment/full
2.3.2.要将第一个增量备份应用于完整备份,请运行以下命令
xtrabackup --prepare --apply-log-only --target-dir=/home/data/backups/increment/full --incremental-dir=/home/data/backups/increment/inc1
3.3.准备第二个增量备份是一个类似的过程:将增量应用到(已修改的)基本备份,您将及时将其数据前滚到第二个增量备份的点
xtrabackup --prepare --target-dir=/home/data/backups/increment/full --incremental-dir=/home/data/backups/increment/inc2
说明:合并除最后一个以外的所有增量时,应使用xtrabackup —apply-log-only。
这就是为什么上一行不包含xtrabackup —apply-log-only选项的原因。
即使在最后一步使用了xtrabackup —apply-log-only,备份仍将保持一致,但在这种情况下,服务器将执行回滚阶段。
2.4.恢复备份
一旦准备好,增量备份就与完整备份相同,并且可以用相同的方式还原它们,请参考恢复备份。
3.部分备份
⚠警告
如果在备份过程中删除了任何匹配或列出的表,则xtrabackup将失败。
不要复制回准备好的备份。还原部分备份应通过导入表而不是使用该—copy-back选项来完成。不建议在运行部分备份之后运行增量备份。
尽管在某些情况下可以通过复制回文件来完成还原,但这在许多情况下可能导致数据库不一致,因此不建议这样做。
3.1使用xtrabackup—tables
第一种方法涉及xtrabackup —tables选项。 该选项的值是一个正则表达式,它与标准的表名(包括数据库名)匹配,格式为databasename.tablename.
要仅备份某个数据库数据库中的所有表,可以使用以下命令:
xtrabackup --user=root --password=123456 --backup --target-dir=/home/data/backups/tables/ --tables="^ngcc_db[.].*"
要仅备份某个数据库中的一个表,可以使用以下命令:
xtrabackup --user=root --password=123456 --backup --target-dir=/home/data/backups/table/ --tables="^ngcc_db[.]voicemail_user"
3.2.使用xtrabackup—tables-file
xtrabackup —tables-file指定一个文件,该文件可以包含多个表名,文件中每行一个表名。 仅备份文件中命名的表。 名称完全匹配,区分大小写,没有模式或正则表达式匹配。 表名必须完全合格,格式为databasename.tablename。
echo "mydatabase.mytable" > /tmp/tables.txtxtrabackup --user=root --password=123456 --backup --target-dir=/home/data/backups/fileTable/ --tables-file=/tmp/tables.txt
3.3.使用xtrabackup —databases和xtrabackup —databases-file
xtrabackup —databases接受以空格分隔的数据库和表列表,以格式databasename[.tablename].进行备份。 除了此列表之外,请确保指定mysql,sys, 和performance_schema数据库。 使用xtrabackup —copy-back.还原数据库时,这些数据库是必需的。
使用--databases备份,可以使用以下命令
xtrabackup --user=root --password=123456 --backup --databases="ngcc_db.voicemail_user ngcc_test" --target-dir=/home/data/backups/partial/
使用--databases-file备份,可以使用以下命令
echo "mydatabase.mytable" > /tmp/databases.txtxtrabackup --user=root --password=123456 --backup --databases-file=/tmp/databases.txt --target-dir=/home/data/backups/fileDatabase/
xtrabackup —databases-file指定一个文件,该文件可以以databasename[.tablename]格式包含多个数据库和表,该文件中每行一个元素名称。 名称完全匹配,区分大小写,没有模式或正则表达式匹配。
如果在准备步骤中处理的表是在备份开始后创建的,则即使未在参数中明确列出这些表,也可以将它们添加到备份中。
3.4.部分恢复/恢复单个表
在5.6之前的服务器版本中,即使使用innodb_file_per_table,也无法通过复制文件在服务器之间复制表。 但是,使用Percona XtraBackup,您可以从任何InnoDB数据库导出单个表,然后将它们导入到具有XtraDB或MySQL 5.6的MySQL的Percona Server中。 (源不必是XtraDB或MySQL 5.6,但目的地必须是。)这仅适用于单个.ibd文件,并且不能导出其自身.ibd文件中未包含的表。
3.4.1.导出表
该表应该已经以innodb_file_per_table模式创建,因此像往常一样使用xtrabackup —backup进行备份后,.ibd文件应该存在于目标目录中:
find /home/data/backups/fileTable/ -name voicemail_user.*#输出如下/home/data/backups/fileTable/voicemail_user.ibd
3.4.2.准备备份,请在命令中添加额外的参数xtrabackup —export
xtrabackup --prepare --export --target-dir=/home/data/backups/fileTable/
现在,您应该在目标目录中看到一个.exp文件:
find /home/data/backups/fileTable/ -name voicemail_user.*#输出如下/home/data/backups/fileTable/voicemail_user.exp/home/data/backups/fileTable/voicemail_user.ibd/home/data/backups/fileTable/voicemail_user.cfg
这三个文件都是将表导入到运行Percona Server for MySQL(带有XtraDB或MySQL 5.7)的服务器所需的全部文件。 如果服务器使用InnoDB表空间加密,则将为加密表列出其他.cfp文件。
3.4.3.导入表
在启用了XtraDB和innodb_import_table_from_xtrabackup选项的运行Percona Server for MySQL的目标服务器上,或在MySQL 5.6上,创建具有相同结构的表,然后执行以下步骤:
1.在MySQL中执行如下语句
ALTER TABLE ngcc_db.voicemail_user DISCARD TABLESPACE;
如果看到以下消息,则必须启用innodb_file_per_table并再次创建该表
ERROR 1030 (HY000): Got error- 1 from storage engine
2.将导出的文件复制到目标服务器的数据目录的ngcc_db/子目录中
cp /home/data/backups/fileTable/ngcc_db/voicemail_user.ibd /home/mysql-5.7.26/data/ngcc_dbcp /home/data/backups/fileTable/ngcc_db/voicemail_user.exp /home/mysql-5.7.26/data/ngcc_dbcp /home/data/backups/fileTable/ngcc_db/voicemail_user.cfg /home/mysql-5.7.26/data/ngcc_db
3.设置mysql数据目录权限
chown -R mysql:mysql /home/mysql-5.7.26/data/
4.在MySQL中执行表空间导入
ALTER TABLE ngcc_db.voicemail_user IMPORT TABLESPACE;
现在应该导入该表,并且您应该可以从中进行SELECT并查看导入的数据。
在您对导入的表运行ANALYZE TABLE之前,导入的表空间的持久统计信息将为空。 它们将为空,因为它们存储在系统表mysql.innodb_table_stats和mysql.innodb_index_stats中,并且在导入期间不会由服务器进行更新。 这是由于上游bug#72368.。
3.4.部分恢复/恢复单个数据库
3.4.1.准备备份
使用 xtrabackup --backup 选项进行备份后,首先需要准备好备份才能还原。xtrabackup --prepare步骤可以使文件在单个时刻完美地保持一致。
xtrabackup --prepare --target-dir=/home/data/backups/full/
3.4.2.恢复备份
请确保mysql,sys, 和performance_schema数据库都在备份中,使用xtrabackup —copy-back.还原数据库时,这些数据库是必需的。
恢复单个数据库和完整备份的恢复操作一致请参考恢复备份。
