MySQL实现备份(3)之xtrabackup 备份工具
xtrabackup工具:
是percona公司开发的一个用于对MySQL进行备份的工具。相对于mysqldump,xtrabackup支持增量备份、差异备份等。
使用手册;https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html
下载链接;https://www.percona.com/downloads/
xtrabackup版本:
-
Xtrabackup2.4之前
-
Xtrabackup2.4:能用来备份MySQL5.5、5.6和5.7
-
Xtrabackup8.0:只能用来备份MySQL8.0
xtrabackup的组成:
Xtrabackup2.4之前:有四个可执行文件
-
innobackupex: Perl 脚本(InnoDB 表和非innodb表都可以备份)
-
xtrabackup: C/C++,编译的二进制程序(用来备份 InnoDB 表的,不能备份非 InnoDB 表)
-
xbcrypt: 加解密
-
xbstream: 支持并发写的流文件格式
Xtrabackup2.4及以后:
- innobackupex和xtrabackup合二为一为xtrabackup
安装xtrabackup:
-
通过官网下载对应的rpm包或者deb包。
-
然后通过yum 或者apt进行安装,这样能解决依赖问题。
范例
1.使用xtrabackup实现完全备份
1.安装对应的安装包
2.创建存放备份文件的目录
[root@CentOS8 ~]# mkdir /backup
3.执行完全备份操作
[root@CentOS8 ~]# xtrabackup -uroot --backup --target-dir=/backup/base
xtrabackup: Transaction log of lsn (26887058) to (26887068) was copied.
220920 14:15:36 completed OK!
4.数据还原操作
(1)预准备:确保数据一致,提交完成的事务,回滚未完成的事务
[root@CentOS8 ~]# xtrabackup --prepare --target-dir=/backup/base #base这个目录文件可以不用创建,会自动生成
Shutdown completed; log sequence number 26887180
220920 14:19:44 completed OK!
(2)复制到数据库目录(数据库目录必须为空,MySQL服务不能启动)
[root@CentOS8 ~]# systemctl stop mysqld.service
[root@CentOS8 ~]# rm -rf /var/lib/mysql/*
[root@CentOS8 ~]# rm -rf /data/logbin/* #二进制日志存放位置
[root@CentOS8 ~]# xtrabackup --copy-back --target-dir=/backup/base
220920 14:22:22 [01] Copying ./mysql.ibd to /var/lib/mysql/mysql.ibd
220920 14:22:22 [01] ...done
220920 14:22:22 completed OK!
(3)更改复制文件的所有者和所属组
[root@CentOS8 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@CentOS8 ~]# chown -R mysql.mysql /data/logbin/
(4)启动数据库
[root@CentOS8 ~]# systemctl start mysqld.service
(5)检查
--copy-back:#做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir(会自动从配置文件中找到mysql数据存放的目录)
-u,--user:指定mysql用户名
-p,--password:指定用户的密码
--host:指定数据库的地址,默认为本机
--target-dir:指定备份文件所在位置
--prepare:回滚未完成的事务
还原注意事项:
-
datadir 目录必须为空。除非指定innobackupex --force-non-empty-directorires选项指定,否则--copy-back选项不会覆盖
-
在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中
-
由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户
执行chown -R mysql:mysql /data/mysql,以上需要在用户调用innobackupex之前完成
案例: 利用xtrabackup8.0 完全,增量备份及还原MySQL8.0
修改数据:mysql> insert into teachers values(null,'da wang','20','F');
Query OK, 1 row affected (0.18 sec)
mysql> insert into teachers values(null,'wang cai','10','F');
Query OK, 1 row affected (0.00 sec)
#第一次增量备份
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
xtrabackup: Transaction log of lsn (26916221) to (26916231) was copied.
220920 14:44:23 completed OK!
第二次:
[root@CentOS8 ~]# xtrabackup -uroot --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
xtrabackup: Transaction log of lsn (26917096) to (26917106) was copied.
220920 14:47:10 completed OK!
还原:
#项--apply-log-only 阻止回滚未完成的事务
[root@centos8 ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/base
合并第1次增量备份到完全备份
[root@centos8 ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
[root@centos8 ~]# xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
[root@CentOS8 ~]# rm -rf /var/lib/mysql/*
[root@CentOS8 ~]# rm -rf /data/logbin/*
还原属性:
[root@CentOS8 ~]# chown -R mysql:mysql /var/lib/mysql
[root@CentOS8 ~]# chown -R mysql:mysql /data/logbin/
启动服务:
[root@CentOS8 ~]# systemctl start mysqld.service
总结:
xtrabackup工具备份和还原,需要三步实现
-
备份:对数据库做完全或增量备份
-
预准备: 还原前,先对备份的数据,整理至一个临时目录
-
还原:将整理好的数据,复制回数据库目录中
备份格式:
innobackupex [option] BACKUP-ROOT-DIR
参数:
--user:#该选项表示备份账号
--password:#该选项表示备份的密码
--host:#该选项表示备份数据库的地址
--databases:#该选项接受的参数为数据库名,如果要指定多个数据库,彼此间需要以空格隔开;
如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。
如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表
--defaults-file:#该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置
--incremental:#该选项表示创建一个增量备份,需要指定--incremental-basedir
--incremental-basedir:#该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用
--incremental-dir:#该选项表示还原时增量备份的目录
--include=name:#指定表名,格式:databasename.tablename
Prepare预准备格式:
innobackupex --apply-log [option] BACKUP-DIR
参数:
--apply-log:
#一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。
#此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
还原格式:
innobackupex --copy-back [选项] BACKUP-DIR
innobackupex --move-back [选项] [--defaults-group=GROUP-NAME] BACKUP-DIR
参数:
--copy-back:#做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir
--move-back:#这个选项与--copy-back相似,唯一的区别是它不拷贝文件,而是移动文件到目的地。
注意事项:
-
datadir 目录必须为空
-
在restore之前,必须停止mysql
-
更改文件属性