xtrabackup备份恢复mysql
1. 工具介绍
Xtrabackup是由percona提供的mysql数据库备份工具,Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份,不会锁表 。
Xtrabackup中主要包含两个工具:
xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,可以备份和恢复MyISAM表以及数据表结构。
Percona XtraBackup 2.4.11之后innobackupex与xtrabackup软连,故后期版本命令中移除了innobackupex。
增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。
innobackupex备份时会以备份时的时间作为目录,而xtrabackup只会备份到指定的具体目录,除非目录不存在才会创建。
2. 下载安装
8.X
2.X
以2.X版本为例
[root@centos ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar
[root@centos ~]# tar -xvf Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar
[root@centos ~]# yum -y install ./percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm
[root@centos ~]# innochecksum --version
innochecksum Ver 5.7.28, for Linux (x86_64)
3. 备份/恢复
3.1 参数说明
-u, --user=name
-p, --password=***
-P, --port=#
-H, --host=name
-S, --socket=name
--backup #创建备份并且放入--target-dir目录中
--target-dir #指定backup的目的地,如果目录不存在,xtrabakcup会创建。如果目录存在且为空则成功。不会覆盖已存在的文件。
示例:$ innobackupex --backup --target-dir=/data/backup/
3.2 全量备份
[root@centos ~]# innobackupex --defaults-file=/data/mysql/etc/my.cnf -uroot -pAa123456 /data/backup/ --socket=/tmp/mysql.sock
[root@centos backup]# pwd
/data/backup
#备份后的目录,会创建以当前日期为名称的目录
[root@centos backup]# ls
2023-03-12_20-12-47
[root@centos backup]#
–datadir是要备份的mysql数据目录
3.3 恢复
首先停止mysql,然后删除mysql中数据目录下所有内容,然后再执行恢复操作
[root@centos ~]# systemctl stop mysqld
[root@centos ~]# mv /data/mysql/data /data/mysql/data.bak
[root@centos ~]# innobackupex --apply-log --use-memory=4G /data/backup/2023-03-12_20-12-47
[root@centos ~]# innobackupex --defaults-file=/data/mysql/etc/my.cnf --copy-back /data/backup/2023-03-12_20-12-47
4. 使用备份建立mysql-slave主从复制
4.1 非GTID模式
在备份的文件xtrabackup_info中会记录此次备份的position位置和binlog文件名称:
[root@centos 2023-03-12_20-12-47]# cat xtrabackup_info
uuid = e1c0ac5d-c0d1-11ed-a057-0a8534c74352
name =
tool_name = innobackupex
tool_command = --host=localhost --user=root --password=... /data/backup
tool_version = 2.4.26
ibbackup_version = 2.4.26
server_version = 5.7.24-log
start_time = 2023-03-12 20:12:47
end_time = 2023-03-12 20:31:58
lock_time = 4
binlog_pos = filename 'bin-log.005063', position '90176486'
innodb_from_lsn = 0
innodb_to_lsn = 6144481160531
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
[root@centos 2023-03-12_20-12-47]#
在配置master to指向的时候需要填写上面binlog_pos信息
mysql>change master to master_host='18.18.18.18',master_port=3306,master_user='backup',master_password='Aa123456',MASTER_LOG_FILE='bin-log.005063', MASTER_LOG_POS=90176486;
4.2 GTID模式
GTID编号同样记录在备份目录的xtrabackup_info文件中
[root@centos 2023-03-14_18-06-37]# cat xtrabackup_info
uuid = eb5c3048-c24f-11ed-a5f3-005056893992
name =
tool_name = innobackupex
tool_command = --defaults-file=/data/mysql/etc/my.cnf -uroot -pAa123456 /data/backup/ --socket=/data/mysql/mysql.sock
tool_version = 2.4.9
ibbackup_version = 2.4.9
server_version = 5.7.28-log
start_time = 2023-03-14 18:06:40
end_time = 2023-03-14 18:06:42
lock_time = 0
binlog_pos = filename 'binlog.000014', position '194', GTID of the last change 'e63e5207-1342-11ed-971a-005056893992:1-475,
eca2ddf0-6097-11eb-8bee-0aed26cb74eb:1-1765088,
eca2ddf0-6097-11eb-8bee-0aed26cb74ee:1-2006286'
innodb_from_lsn = 0
innodb_to_lsn = 3378351
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
[root@centos 2023-03-14_18-06-37]#
如果gtid有多个值,在设置GLOBAL.GTID_PURGED的时候也要写多个
mysql>SET @@GLOBAL.GTID_PURGED='e63e5207-1342-11ed-971a-005056893992:1-475,eca2ddf0-6097-11eb-8bee-0aed26cb74eb:1-1765088,eca2ddf0-6097-11eb-8bee-0aed26cb74ee:1-2006286';
mysql>change master to master_host='18.18.18.18',master_port=3306,master_user='backup',master_password='Aa123456',master_auto_position=1;
5. 其他参数
--apply-log-only:prepare备份的时候只执行redo阶段,用于增量备份。
--backup:创建备份并且放入--target-dir目录中
--close-files:不保持文件打开状态,xtrabackup打开表空间的时候通常不会关闭文件句柄,目的是为了正确处理DDL操作。如果表空间数量非常巨大并且不适合任何限制,一旦文件不在被访问的时候这个选项可以关闭文件句柄.打开这个选项会产生不一致的备份。
--compact:创建一份没有辅助索引的紧凑备份
--compress:压缩所有输出数据,包括事务日志文件和元数据文件,通过指定的压缩算法,目前唯一支持的算法是quicklz.结果文件是qpress归档格式,每个xtrabackup创建的*.qp文件都可以通过qpress程序提取或者解压缩
--compress-chunk-size=#:压缩线程工作buffer的字节大小,默认是64K
--compress-threads=#:xtrabackup进行并行数据压缩时的worker线程的数量,该选项默认值是1,并行压缩('compress-threads')可以和并行文件拷贝('parallel')一起使用。例如:'--parallel=4 --compress --compress-threads=2'会创建4个IO线程读取数据并通过管道传送给2个压缩线程。
--create-ib-logfile:这个选项目前还没有实现,目前创建Innodb事务日志,你还是需要prepare两次。
--datadir=DIRECTORY:backup的源目录,mysql实例的数据目录。从my.cnf中读取,或者命令行指定。
--defaults-extra-file=[MY.CNF]:在global files文件之后读取,必须在命令行的第一选项位置指定。
--defaults-file=[MY.CNF]:唯一从给定文件读取默认选项,必须是个真实文件,必须在命令行第一个选项位置指定。
--defaults-group=GROUP-NAME:从配置文件读取的组,innobakcupex多个实例部署时使用。
--export:为导出的表创建必要的文件
--extra-lsndir=DIRECTORY:(for --bakcup):在指定目录创建一份xtrabakcup_checkpoints文件的额外的备份。
--incremental-basedir=DIRECTORY:创建一份增量备份时,这个目录是增量别分的一份包含了full bakcup的Base数据集。
--incremental-dir=DIRECTORY:prepare增量备份的时候,增量备份在DIRECTORY结合full backup创建出一份新的full backup。
--incremental-force-scan:创建一份增量备份时,强制扫描所有增在备份中的数据页即使完全改变的page bitmap数据可用。
--incremetal-lsn=LSN:创建增量备份的时候指定lsn。
--innodb-log-arch-dir:指定包含归档日志的目录。只能和xtrabackup --prepare选项一起使用。
--innodb-miscellaneous:从My.cnf文件读取的一组Innodb选项。以便xtrabackup以同样的配置启动内置的Innodb。通常不需要显示指定。
--log-copy-interval=#:这个选项指定了log拷贝线程check的时间间隔(默认1秒)。
--log-stream:xtrabakcup不拷贝数据文件,将事务日志内容重定向到标准输出直到--suspend-at-end文件被删除。这个选项自动开启--suspend-at-end。
--no-defaults:不从任何选项文件中读取任何默认选项,必须在命令行第一个选项。
--databases=#:指定了需要备份的数据库和表。
--database-file=#:指定包含数据库和表的文件格式为databasename1.tablename1为一个元素,一个元素一行。
--parallel=#:指定备份时拷贝多个数据文件并发的进程数,默认值为1。
--prepare:xtrabackup在一份通过--backup生成的备份执行还原操作,以便准备使用。
--print-default:打印程序参数列表并退出,必须放在命令行首位。
--print-param:使xtrabackup打印参数用来将数据文件拷贝到datadir并还原它们。
--rebuild_indexes:在apply事务日志之后重建innodb辅助索引,只有和--prepare一起才生效。
--rebuild_threads=#:在紧凑备份重建辅助索引的线程数,只有和--prepare和rebuild-index一起才生效。
--stats:xtrabakcup扫描指定数据文件并打印出索引统计。
--stream=name:将所有备份文件以指定格式流向标准输出,目前支持的格式有xbstream和tar。
--suspend-at-end:使xtrabackup在--target-dir目录中生成xtrabakcup_suspended文件。在拷贝数据文件之后xtrabackup不是退出而是继续拷贝日志文件并且等待知道xtrabakcup_suspended文件被删除。这项可以使xtrabackup和其他程序协同工作。
--tables=name:正则表达式匹配database.tablename。备份匹配的表。
--tables-file=name:指定文件,一个表名一行。
--target-dir=DIRECTORY:指定backup的目的地,如果目录不存在,xtrabakcup会创建。如果目录存在且为空则成功。不会覆盖已存在的文件。
--throttle=#:指定每秒操作读写对的数量。
--tmpdir=name:当使用--print-param指定的时候打印出正确的tmpdir参数。
--to-archived-lsn=LSN:指定prepare备份时apply事务日志的LSN,只能和xtarbackup --prepare选项一起用。
--user-memory = #:通过--prepare prepare备份时候分配多大内存,目的像innodb_buffer_pool_size。默认值100M如果你有足够大的内存。1-2G是推荐值,支持各种单位(1MB,1M,1GB,1G)。
--version:打印xtrabackup版本并退出。
--xbstream:支持同时压缩和流式化。需要客服传统归档tar,cpio和其他不允许动态streaming生成的文件的限制,例如动态压缩文件,xbstream超越其他传统流式/归档格式的的优点是,并发stream多个文件并且更紧凑的数据存储(所以可以和--parallel选项选项一起使用xbstream格式进行streaming)