xtarbackup安装调试
xtarbackup介绍
xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具
xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:
xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力
常用选项: --host 指定主机 --user 指定用户名 --password 指定密码 --port 指定端口 --databases 指定数据库 --incremental 创建增量备份 --incremental-basedir 指定包含完全备份的目录 --incremental-dir 指定包含增量备份的目录 --apply-log 对备份进行预处理操作 一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。 --redo-only 不回滚未提交事务 --copy-back 恢复备份目录
第一种[root@localhost ~]# rpm -qa |grep libgcrypt
libgcrypt-1.8.3-4.el8.x86_64如本地安装了libgcrypt183,就下载下方的包wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.14/binary/tarball/percona-xtrabackup-2.4.14-Linux-x86_64.libgcrypt183.tar.gz第二种
1,安装依赖库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
2,安装软件
yum install -y percona-xtrabackup-24.x86_64
3,最低权限
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT,PROCESS ON *.* TO ‘bkpuser‘@‘localhost‘;
检查是否安装成功
|
1
2
3
|
[root@localhost ~]# xtrabackup --versionxtrabackup: recognized server arguments: --datadir=/opt/data --server-id=10 --log_bin=mysql_binxtrabackup version 2.4.14 based on MySQL server 5.7.19 Linux (x86_64) (revision id: ef675d4) |
进行全备份
备份数据存放在/data/backup/下面,innobackupex会自动创建一个文件夹,是当前系统的时间戳
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=192.168.248.130 /opt/backupxtrabackup: recognized server arguments: --datadir=/opt/data --server-id=10 --log_bin=mysql_binxtrabackup: recognized client arguments: --datadir=/opt/data --server-id=10 --log_bin=mysql_bin201231 14:34:04 innobackupex: Starting the backup operation..................................................................................................xtrabackup: Transaction log of lsn (2727446) to (2727455) was copied.201231 14:34:19 completed OK![root@localhost ~]# ll /opt/backup/2020-12-31_14-34-04/total 12340-rw-r-----. 1 root root 488 Dec 31 14:34 backup-my.cnf-rw-r-----. 1 root root 365 Dec 31 14:34 ib_buffer_pool-rw-r-----. 1 root root 12582912 Dec 31 14:34 ibdata1drwxr-x---. 2 root root 4096 Dec 31 14:34 mysqldrwxr-x---. 2 root root 8192 Dec 31 14:34 performance_schemadrwxr-x---. 2 root root 8192 Dec 31 14:34 sysdrwxr-x---. 2 root root 52 Dec 31 14:34 t1-rw-r-----. 1 root root 21 Dec 31 14:34 xtrabackup_binlog_info-rw-r-----. 1 root root 135 Dec 31 14:34 xtrabackup_checkpoints-rw-r-----. 1 root root 522 Dec 31 14:34 xtrabackup_info-rw-r-----. 1 root root 2560 Dec 31 14:34 xtrabackup_logfile |
|
1
2
|
mysql> drop database t1;Query OK, 1 row affected (0.01 sec) |
恢复全备
恢复备份到mysql的数据文件目录,这一过程要先关闭mysql数据库,重命名或者删除原数据文件目录都可以,再创建一个新的数据文件目录,将备份数据复制到新的数据文件目录下,赋权,修改权限,启动数据库
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#停止mysql服务[root@localhost opt]# service mysqld stopShutting down MySQL.. SUCCESS#合并数据[root@localhost opt]# innobackupex --apply-log /opt/backup/2020-12-31_14-34-04/#移走原数据目录[root@localhost opt]# mv /opt/data /tmp/#恢复数据[root@localhost opt]# innobackupex --copy-back /opt/backup/2020-12-31_14-34-04/............................................201231 15:33:14 completed OK![root@localhost opt]# ll /opt/backup/ data/[root@localhost opt]# chown -R mysql.mysql /opt/data/#启动mysql查看数据是否恢复[root@localhost opt]# service mysqld startStarting MySQL.Logging to '/opt/data/localhost.localdomain.err'... SUCCESS![root@localhost opt]# mysql -uroot -p123456 -e 'show databases;'mysql: [Warning] Using a password on the command line interface can be insecure.+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys || t1 |+--------------------+ |
增量备份
在进行增量备份时,首先要进行一次全量备份,第一次增量备份是基于全备的,之后的增量备份是基于上一次的增量备份,以此类推。
在test表中插入一些数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
mysql> select * from test;+----+-------+------+| id | name | age |+----+-------+------+| 1 | tom | 20 || 2 | jerry | 21 || 3 | xx | 22 |+----+-------+------+mysql> insert test(name,age) values('xuaos',23),('xiaos',25);Query OK, 2 rows affected (0.01 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> select * from test;+----+-------+------+| id | name | age |+----+-------+------+| 1 | tom | 20 || 2 | jerry | 21 || 3 | xx | 22 || 4 | xuaos | 23 || 5 | xiaos | 25 |+----+-------+------+5 rows in set (0.00 sec) |
增量备份1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
root@localhost incremental]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=192.168.248.130 --incremental /opt/incremental --incremental-basedir=/opt/backup/2020-12-31_14-34-04.........................................................................xtrabackup: Transaction log of lsn (2730794) to (2730803) was copied.201231 15:54:53 completed OK![root@localhost incremental]# du -sh /opt/backup/2020-12-31_14-34-04/142M /opt/backup/2020-12-31_14-34-04/[root@localhost incremental]# du -sh /opt/incremental/2020-12-31_15-54-51/3.2M /opt/incremental/2020-12-31_15-54-51/[root@localhost incremental]# cat /opt/incremental/2020-12-31_15-54-51/xtrabackup_checkpointsbackup_type = incrementalfrom_lsn = 2727446to_lsn = 2730794last_lsn = 2730803compact = 0recover_binlog_info = 0flushed_lsn = 2730803 |
增量备份2 (基于上一次增量备份)
表中插入数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Database changedmysql> insert test(name,age) values('adasd',23),('sdiiuf',45);Query OK, 2 rows affected (0.00 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> select * from test;+----+--------+------+| id | name | age |+----+--------+------+| 1 | tom | 20 || 2 | jerry | 21 || 3 | xx | 22 || 4 | xuaos | 23 || 5 | xiaos | 25 || 6 | adasd | 23 || 7 | sdiiuf | 45 |+----+--------+------+7 rows in set (0.00 sec)<br> |
增量备份(2)
|
1
2
3
4
5
6
7
8
9
|
[root@localhost incremental]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=192.168.248.130 --incremental /opt/incremental/ --incremental-basedir=/opt/incremental/2020-12-31_15-54-51/.............................................................................xtrabackup: Transaction log of lsn (2733484) to (2733493) was copied.201231 16:08:53 completed OK!drwxr-x---. 6 root root 259 Dec 31 16:08 2020-12-31_16-08-51[root@localhost ~]# ll /opt/incremental/total 0drwxr-x---. 6 root root 259 Dec 31 15:54 2020-12-31_15-54-51drwxr-x---. 6 root root 259 Dec 31 16:08 2020-12-31_16-08-51 |
增量备份的恢复
恢复完全备份(注意这里一定要加--redo-only参数,该参数的意思是只应用xtrabackup日志中已提交的事务数据,不回滚还未提交的数据)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
root@localhost ~]# mysql -uroot -p123456 -e 'drop database t1;'[root@localhost ~]# mysql -uroot -p123456 -e 'show databases;;'mysql: [Warning] Using a password on the command line interface can be insecure.+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys |+--------------------+[root@localhost ~]# service mysqld stopShutting down MySQL.. SUCCESS!#恢复完全备份(注意这里一定要加--redo-only参数,该参数的意思是只应用xtrabackup日志中已提交的事务数据,不回滚还未提交的数据)[root@localhost ~]# innobackupex --apply-log --redo-only /opt/backup/2020-12-31_14-34-04/#将增量备份1应用到完全备份[root@localhost ~]# innobackupex --apply-log --redo-only /opt/backup/2020-12-31_14-34-04/ --incremental-dir=/opt/incremental/2020-12-31_15-54-51/..............................................201231 16:24:18 completed OK!#将增量备份2应用到完全备份(注意恢复最后一个增量备份时需要去掉--redo-only参数,回滚xtrabackup日志中那些还未提交的数据[root@localhost ~]# innobackupex --apply-log /opt/backup/2020-12-31_14-34-04/ --incremental-dir=/opt/incremental/2020-12-31_16-08-51.......................................................201231 16:27:17 completed OK!#恢复[root@localhost ~]# innobackupex --copy-back /opt/backup/2020-12-31_14-34-04/.....................................................201231 16:39:40 [01] ...done201231 16:39:40 completed OK![root@localhost ~]# chown -R mysql.mysql /opt/data/[root@localhost ~]# service mysqld startStarting MySQL.Logging to '/opt/data/localhost.localdomain.err'... SUCCESS![root@localhost ~]# mysql -uroot -p123456 -e 'show databases;;'mysql: [Warning] Using a password on the command line interface can be insecure.+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys || t1 |+--------------------+[root@localhost ~]# mysql -uroot -p123456 -e 'select * from t1.test;'mysql: [Warning] Using a password on the command line interface can be insecure.+----+--------+------+| id | name | age |+----+--------+------+| 1 | tom | 20 || 2 | jerry | 21 || 3 | xx | 22 || 4 | xuaos | 23 || 5 | xiaos | 25 || 6 | adasd | 23 || 7 | sdiiuf | 45 |+----+--------+------+ |

浙公网安备 33010602011771号