码迷,mamicode.com
首页 > 数据库 > 详细

初识MariaDB之4——Xtrabackup备份与还原

时间:2018-05-09 16:48:47      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:mysql   mariadb   xtrabackup   

一、基础知识

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.增量备份

增量备份的实现是根据每一个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


初识MariaDB之4——Xtrabackup备份与还原

标签:mysql   mariadb   xtrabackup   

原文地址:http://blog.51cto.com/arkling/2114462

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!