MariaDB xtrabackup物理备份与还原

时间:2022-01-28 09:52:07

xtrabackup物理备份

1.1 安装xtraback

安装依赖:

[root@localhost ~]# yum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes libaio*

安装:

[root@localhost ~]# rpm -ivh percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm
Preparing... ########################################### [100%]
1:percona-xtrabackup ########################################### [100%]

查看安装结果:

[root@localhost ~]# rpm -qa |grep xtrabackup
percona-xtrabackup-2.1.5-680.rhel6.x86_64

Xtrabackup中主要包含两个工具:

  • xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表, 也不能备份数据表结构;
  • innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。

1.2 使用xtrabackup实现对MySQL的备份

1.2.1 完全备份:

基本语法:

innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --user=root --password=123456  /backup

--defaults-file=/etc/my.cnf.d/server.cnf 备份的配置文件的目录

--user 备份的用户

--password 备份的密码

/backup 备份到路径

--database 需要备份的数据库

--use-memory “准备”指定的内存 默认=100M

--apply-log “准备”的主要作用正是通过回滚未提交的事务及同步

已经提交的事务至数据文件也使得数据文件处于一致性状态。

全备之后的所有文件

[root@mysql03 2018-03-14_16-04-32]# ll
total 12316
-rw-r--r-- 1 root root 287 Mar 14 16:04 backup-my.cnf
drwx------ 2 root root 4096 Mar 14 16:04 glare_test
-rw-r----- 1 root root 12582912 Mar 14 16:04 ibdata1
drwx------ 2 root root 4096 Mar 14 16:04 mysql
drwxr-xr-x 2 root root 4096 Mar 14 16:04 performance_schema
-rw-r--r-- 1 root root 13 Mar 14 16:04 xtrabackup_binary
-rw-r----- 1 root root 89 Mar 14 16:04 xtrabackup_checkpoints
-rw-r----- 1 root root 2560 Mar 14 16:04 xtrabackup_logfile

各文件说明:

(1)xtrabackup_checkpoints 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是

如何发生改变的。

(2)xtrabackup_binlog_info mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(5)backup-my.cnf —— 备份命令用到的配置选项信息;

在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

在备份的过程中出现的问题:

2018-03-14 15:54:43 7f091ba47720  InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
2018-03-14 15:54:43 7f091ba47720 InnoDB: File name ./ib_logfile0
2018-03-14 15:54:43 7f091ba47720 InnoDB: File operation call: 'open' returned OS error 71.
2018-03-14 15:54:43 7f091ba47720 InnoDB: Cannot continue operation.
innobackupex: Error: The xtrabackup child process has died at /usr/bin/innobackupex line 2579.

原因:

在/etc/my.cnf.d/server.cnf配置文件没有设置basedir的路径,xtrbackup找不到mysql的路径。

在/etc/my.cnf.d/server.cnf文件添加mysql的路径。

datadir=/var/lib/mysql
log_bin=mysql-bin xtrabackup备份需要开启binlog
binlog_format=row

binlog日志格式 mix 混合 statement语句 row行模式

备份全库

[root@mysql03 backup]# innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --user=root --password=123456 /backup
出现下列情况备份成功!
innobackupex: MySQL binlog position: filename 'mysql-bin.000002', position 977
180315 14:12:09 innobackupex: Connection to database server closed
180315 14:12:09 innobackupex: completed OK!

全备完成之后,更新一下数据库,增加一些内容

MariaDB [glare_test]> select * from test02;
+--------+------+-------+
| player | item | count |
+--------+------+-------+
| 4 | 4 | 4 |
| 5 | 5 | 5 |
+--------+------+-------+
2 rows in set (0.00 sec)

添加一些数据测试

MariaDB [glare_test]> insert into test02 (player, item, count) values (6, 6, 6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
MariaDB [glare_test]> insert into test02 (player, item, count) values (10, 6, 6),(11,7,7),(12,8,8),(13,9,9),(16,10,10);
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0

然后用mysqlbinlog做增量备份

查看binlog的位置

[root@mysql03 2018-03-15_14-12-05]# cat xtrabackup_binlog_info
mysql-bin.000002 977

企业一般来说,如果数据量比较大的话,会采用线上服务器同步一台专门备份的服务器采用物理备份全备+二进制进日志增量备份的方式。

二进制日志备份方式 --start-position=107 可以不用指定,默认是这个位置

mysqlbinlog /var/lib/mysql/mysql-bin.000002 >`date +%F`.sql

1.1 恢复任意时间点备份步骤:(备份齐全的情况下)

  1. 停止mysql的服务
  2. 清空MariaDB目录下的内容
  3. 选择要恢复的备份的文件解压缩到数据库目录下。
  4. Innobackupex应用日志。
  5. 修改MariaDB目录的权限。
  6. 重启服务。
  7. 将本地存储binlog日志用mysqlbinlog命令导出成sql文件,并检查sql文件的最后执行时间。
  8. 临时关闭MariaDB的binlog,将增量恢复sql文件source到mysql中。
  9. 开启binlog,一般开发会在某些表设置有修改时间的字段,这时候执行sql查看修改的时间与需要恢复时间是否大概一致。

可以根据这9个步骤写成脚本,方便以后处理全备恢复的问题。