2022
我们一起努力

初识MariaDB之4——Xtrabackup备份与还原 - MySQL数据库

一、基础知识

mysqldump是mysql自带的一个单线程的逻辑备份工具,当数据量很大时,使用mysqldump备份的时间会非常长,且无法做增量备份,xtrabackup是一款基于底层块复制、开源的备份工具,可以对数据库在线实现备份。xtrabackup支持对Innodb和Xtradb存储引擎的完全、增量和差异备份,对于不支持事物的MyISAM存储引擎只能完全备份。

二、备份工具

Xtrabackup工具用到的命令为xtrabackup和innobackupex,而innobackupex又是将xtrabackup使用perl脚本语言封装的二次版本,其目的时为了便于使用

本文重点介绍innobackupex为例,介绍完全备份、增量备份和差异备份

三、实验说明

本次实验采用CentOS7.4系统,数据库版本为MariaDB 5.5.56,innobackupex 版本为2.3.6。

1.完全备份

(1)创建备份账户

MariaDB [hellodb]> grant all privileges on *.* to 'backup'@'localhost' identified by 'backuppassword';

MariaDB [hellodb]> flush privileges;

(2)创建备份目录

[root@node1 ~]# mkdir -pv /data/back

[root@node1 ~]# chown -R mysql.mysql /data/back

(3)执行备份

innobackupex –defaults-file=/etc/my.cnf –user=backup –password=backuppassword  /data/back

看到completed OK!提示后表示备份成功,上述命令还可以使用–databases="db1 db2"来备份制定的库,或者使用–no-timestamp不自动生成时间戳

(4)关闭数据库服务,删除数据,模拟数据库损坏

[root@node1 back]# systemctl stop mariadb.service

(5)恢复前准备(将已提交的事物同步到磁盘,未提交的事务回滚)

innobackupex –defaults-file=/etc/my.cnf –user=backup –password=backuppassword  –apply-log /data/back/2018-04-24_07-38-47/

(6)恢复数据(如果用root账号操作,需要更改恢复后数据目录的属组和属主)

innobackupex –defaults-file=/etc/my.cnf –user=backup –password=backuppassword  –copy-back /data/back/2018-04-24_07-38-47/

(7)重启数据库服务,至此操作完成

2.增量备份

初识MariaDB之4——Xtrabackup备份与还原 - MySQL数据库

增量备份的实现是根据每一个Innodb页都有一个log sequence number(LSN),当数据发生变化时,其所在的Innodb页的LSN会自动增长,增量备份就是根据LSN的范围序列实现备份,每次备份的LSN号可以在xtrabackup_checkpoints中查看。其备份的方式与全备略有不同,增量备份需要给予一个全被或者上一次增量来进行,具体步骤如下:

(1)创建一个完全备份

[root@node1 ~]# innobackupex –defaults-file=/etc/my.cnf –user=backup –password=backuppassword  /data/back

(2)基于已创建的完全备份,做增量备份

[root@node1 ~]# innobackupex –defaults-file=/etc/my.cnf –user=backup –password=backuppassword –incremental /data/incremental/ –incremental-basedir=/data/back/2018-04-25_06-32-18/

(3)基于已第一次创建的增量备份,做第二次增量备份(将–incremental-basedir指向完备份,则做的是差异备份)

[root@node1 ~]# innobackupex –defaults-file=/etc/my.cnf –user=backup –password=backuppassword –incremental /data/incremental/ –incremental-basedir=/data/incremental/2018-04-25_06-34-15/

(4)删除数据库文件,模拟故障(提前保存二进制文件,备份到故障发生点之间的还原还需要通过二进制文件)

[root@node1 ~]# cat /data/incremental/2018-04-25_06-39-57/xtrabackup_binlog_info

[root@node1 ~]# mysqlbinlog –start-position=1721 mysql-binlog.000002 > /data/incremental/binlog.sql

[root@node1 ~]# systemctl stop mariadb.service

[root@node1 ~]# rm -rf /var/lib/mysql*

(5)恢复前准备(出除最后一个增量外其他都需要使用–redo-only选项,其作用是不进行回滚操作,因为增量1中未提交的事务在增量2中可能会提交,所以不回滚。最后1个增量也可以用–redo-only选项,就算他不回滚,根据mariadb的crash-recover机制,启动时也会回滚未提交事务)

[root@node1 ~]# innobackupex –apply-log –redo-only /data/back/2018-04-25_06-32-18/

[root@node1 ~]# innobackupex –apply-log –redo-only /data/back/2018-04-25_06-32-18/ –incremental-dir=/data/incremental/2018-04-25_06-34-15/

[root@node1 ~]# innobackupex –apply-log –redo-only /data/back/2018-04-25_06-32-18/ –incremental-dir=/data/incremental/2018-04-25_06-39-57/

[root@node1 ~]# chown -R mysql.mysql /var/lib/mysql

(6)恢复数据库

[root@node1 ~]# innobackupex –copy-back  /data/back/2018-04-25_06-32-18/

[root@node1 ~]# mysql < /data/incremental/binlog.sql

补充说明:

1.xtrabackup是通过读取LSN从而指导数据的更改的每一个innodb page页的大小默认是16K,实际测试中发现,如果数据量变化很小,即使binlog中的position发生了变了,使用增量备份的时候LSN号不会发生变化,但是恢复后的数据是一致的

2.在恢复增量备份的准备阶段时–incremental-dir选项后面不能使用相对路径,否则会提示找不到要恢复增量备份的xtrabackup_logfile

赞(0)
文章名称:《初识MariaDB之4——Xtrabackup备份与还原 - MySQL数据库》
文章链接:https://www.fzvps.com/100299.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!