MySQL备份还原之xtrabackup
使用工具:xtrabackup (非mysql自带工具,需额外下载安装)
下载地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具,开源免费,是目前较为受欢迎的主流备份工具。
测试环境:
OS:CentOS7.8
DB:MySQL8.0.20 (二进制安装,部分目录已调整)
rpm:percona-xtrabackup-80-8.0.14-1.el7.x86_64.rpm
(安装后有xtrabackup、xbcloud、xbstream、xbcrypt、xbcloud_osenv、xbrlapi)
一、备份数据库
1、全备
xtrabackup --backup --target-dir=/mysql/backup/full --user=root --password=123456 --socket=/mysql/data/mysqld.sock
--backup:表示该操作为备份操作
--target-dir:指定备份文件的存放路径
--user:备份使用的数据库用户
--password:该用户的密码
--socket:指定socket启动文件路径
2、基于全备的增量备份
xtrabackup --backup --target-dir=/mysql/backup/increment01 --incremental-basedir=/mysql/backup/full --user=root --password=123456 --socket=/mysql/data/mysqld.sock
--incremental-basedir:表示在某个备份的基础上进行增量备份
3、在第一次增量备份的基础上进行增量备份
xtrabackup --backup --target-dir=/mysql/backup/increment02 --incremental-basedir=/mysql/backup/increment01 --user=root --password=123456 --socket=/mysql/data/mysqld.sock
二、恢复数据库
方式一:(恢复到全库,即只恢复到全备,不恢复增量备份)
1、关闭mysql
2、清空mysql的数据目录(清空前,请备份)
3、恢复数据库(将全备复制到数据目录下)
xtrabackup --copy-back --target-dir=/mysql/backup/full
--copy-back:将备份的数据copy至数据目录下(数据目录请查看参数文件my.cnf)
4、恢复后,需要将数据目录下恢复的文件重新赋予权限
chown -R mysql.mysql /mysql/data
5、启动mysql
方式二:(恢复到增量备份,即在全备的基础上也恢复增量备份)
1、预恢复全量备份
xtrabackup --prepare --apply-log-only --target-dir=/mysql/backup/full
--prepare:表示还原,即恢复
--apply-log-only:表示不回滚事务,因为后面有基于全备的增量备份,所以不需要回滚,如果没有增量备份则去掉该参数
2、将第一次增备加载至全备中
xtrabackup --prepare --apply-log-only --target-dir=/mysql/backup/full --incremental-dir=/mysql/backup/increment01
3、将第二次增备份同样加载至全备中
xtrabackup --prepare --target-dir=/mysql/backup/full --incremental-dir=/mysql/backup/increment02
因为这是最后一次恢复,所以需要回滚,即将未结束的事务回滚,去掉--apply-log-only参数
恢复阶段:可以将全备理解成一个集合,所有的增备都需要汇总到这个集合(全备)里,才能进行完整的恢复操作
4、关闭mysql服务
5、清空mysql的数据目录(清空前,请备份)
6、恢复数据库
xtrabackup --copy-back --target-dir=/mysql/backup/full
--copy-back:将备份的数据copy至数据目录下(数据目录请查看my.cnf)
7、恢复后,需要将数据目录下恢复的文件重新赋予权限
chown -R mysql.mysql /mysql/data
8、启动mysql
注:在执行1、2、3步前,最好将备份都保留一份到其他目录(这样如果恢复不成功,还可以再重新操作)。因为还原过程中用到的备份文件在下次还原使用时会报错,报错如下:
xtrabackup: error: xtrabackup_logfile was already used to '--prepare'.
三、用法及相关参数介绍
用法:
Usage: [xtrabackup [--defaults-file=#] --backup | xtrabackup [--defaults-file=#] --prepare] [OPTIONS]
参数:
--target-dir,destination directory,备份的目标目录。
如果目录不存在,xtrabackup将创建它。
如果目录确实存在且为空,则xtrabackup将成功;xtrabackup不会覆盖现有的文件;会在操作系统层面报错,文件存在。
--backup ,take backup to target-dir,执行备份到备份目录。
--prepare ,prepare a backup for starting mysql server on the backup,为启动备份上的mysql服务器准备一个备份。(类似innobackupex --apply-log)
--apply-log-only ,此项较为重要。主要应用与增备,在常规备份中,执行两种操作以使数据库保持一致:从日志文件对数据文件重播已提交的事务,回滚未提交的事务。在准备备份时,必须跳过未提交事务的回滚,因为在备份时未提交的事务可能正在进行中,它们很可能在下一次增量备份中提交。您应该使用—apply-log-only选项来防止回滚阶段。
警告:如果您不使用—apply-log-only选项来防止回滚阶段,那么您的增量备份将是无用的。事务回滚后,无法应用进一步的增量备份。
--compress,压缩,该选项告诉xtrabackup使用指定的压缩算法压缩所有输出数据,包括事务日志文件和元数据文件。目前唯一支持的算法是quicklz。与--compress-threads配合使用。
--compact,通过跳过二级索引页创建一个紧凑的备份。
--compress-threads,此选项指定xtrabackup用于并行数据压缩的工作线程数量。该选项默认为1。并行压缩(压缩线程)可以与并行文件复制(并行)一起使用。例如,--parallel=4 --compress --compress-threads=2将创建4个I/O线程,读取数据并将其传输到2个压缩线程。
--copy-back,将先前备份目录中的所有文件复制到其原始位置。除非指定强制非空目录选项,否则此选项不会复制现有文件。与MariaDB的Mariabackup的一项copy-back类似,做的时候确保datadir目录为空,你可以把原目录改个名字,再创建一个新的目录。
--databases,此选项指定应该备份的数据库和表的列表,它支持database_name.table_name,比如只想备份test库下的su表,--databases=test.su。
--databases-exclude,排除基于名称的数据库,基本语法与--databases相同,不想备份的数据库或表。注意点!此选项优先级高于--databases。
--galera-info,该选项创建xtrabackup_galera_info文件,该文件包含备份时的本地节点状态。选项应该在执行Percona XtraDB集群备份时使用。
--incremental ,该选项告诉xtrabackup创建增量备份。它被传递给xtrabackup子进程。指定此选项后,还可以指定--incremental-lsn或--incremental-basedir。如果两个选项都没有提供,则默认情况下将option——incremental-basedir传递给xtrabackup,设置为备份基本目录中的第一个时间戳备份目录。与原来旧版本--incremental类似。
--slave-info,此选项在备份复制从属服务器时非常有用。它打印主服务器的二进制日志位置。它还将此信息作为更改主命令写入xtrabackup_slave_info文件。可以通过在这个备份上启动一个从服务器并发出一个CHANGE master命令来设置这个主服务器的新从服务器,该命令的二进制日志位置保存在xtrabackup_slave_info文件中。
--parallel=#,指定备份时拷贝多个数据文件并发的进程数,默认值为1。
--defaults-file=[MY.CNF],唯一从给定文件读取默认选项,必须是个真实文件,必须在命令行第一个选项位置指定。




