欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

基于Xtrabackup备份mysql(MairaDB)

程序员文章站 2024-01-25 11:42:40
...

一、Xtrabackup1、Xtrabackup介绍PerconaXtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份,据官方介绍,这也

一、Xtrabackup

1、Xtrabackup介绍

Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具

2、Xtrabackup的特点

(1)在线热备整个库的InnoDB、XtraDB表

(2)备份过程不会打断正在执行的事务;

(3)在xtrabackup的上一次整库备份基础上做增量备份(innodb only)

(4)自动实现备份检验;

(5)以流的形式产生备份,可以直接保存到远程主机上

3、Xtrabackup有两个主要的工具

(1)xtrabackup

xtrabackup的增量备份只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表

(2)innobackupex

innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

4、增量备份的过程

(1)首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。

(2)在进程增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。

  首先,在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。

  因为logfile里面记录全部的数据修改情况,所以,即使在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。

5、Xtrabackup备份原理

(1)XtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。

(2)InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:

  ①、XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走。为什么要急着复制走呢? 因为transactions log文件大小有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧的数据。

  ②、在prepare过程中,XtraBackup使用复制到的transactions log对备份出来的innodb data file进行crash recovery。

6、实现细节

XtraBackup以read-write模式打开innodb的数据文件,然后对其进行复制。其实它不会修改此文件。也就是说,运行XtraBackup的用户,必须对innodb的数据文件具有读写权限。之所以采用read-write模式是因为XtraBackup采用了其内置的innodb库来打开文件,而innodb库打开文件的时候就是rw的。

7、Xtrabackup的安装

(1)所需软件,直接到percona官网下载即可

percona-toolkit-2.2.4-1.noarch.rpm percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm

因为percona-toolkit是perl组件,所以会依赖很多perl库,所以选择yum方式安装

二、Xtrabackup完全备份的实现

1、前提准备

(1)创建数据备份目录

[root@shuishui ~]# mkdir /backups/

(2)修改二进制日志文件存储路径

[root@shuishui ~]# vim /etc/my.cnf log-bin=/mydata/binlogs/master-bin

(3)授权一个最小权限的用户进行复制

MariaDB [(none)]> grant reload,lock tables,replication client on *.* to 'backup'@'localhost' identified by 'backup'; MariaDB [(none)]> flush privileges;

2、完整备份的实现

(1)导入一个数据库,就不自己建库了

MariaDB [hellodb]> set sql_log_bin=0; #导入数据库过程无需记录二进制日志,把以先暂时关闭 MariaDB [hellodb]> source hellodb.sql; MariaDB [hellodb]> show databases; +--------------------+ | Database | +--------------------+ | hellodb | | information_schema | | makingware | | mysql | | performance_schema | | test | | ultrax | +--------------------+ MariaDB [hellodb]> set sql_log_bin=1; #开启二进制日志

(2)做完整备份

[root@shuishui ~]# innobackupex --user=backup --password=backup --host=localhost /backups/ #做完备 …… …… innobackupex: Backup created in directory '/backups/2014-04-21_11-28-06' #备份存储路径 innobackupex: MySQL binlog position: filename 'master-bin.000013', position 105544 #二进制日志及位置信息 140421 11:28:15 innobackupex: Connection to database server closed 140421 11:28:15 innobackupex: completed OK! #只有到了这里才说明备份成功

看一下备份目录中生成的一些文件

[root@shuishui ~]# cd /backups/2014-04-21_11-28-06/ [root@shuishui 2014-04-21_11-28-06]# ll total 12388 -rw-r--r--. 1 root root 357 Apr 21 11:28 backup-my.cnf drwxr-xr-x. 2 root root 4096 Apr 21 11:28 hellodb -rw-r-----. 1 root root 12582912 Apr 21 11:28 ibdata1 drwxr-xr-x. 2 root root 4096 Apr 21 11:28 makingware drwx------. 2 root root 4096 Apr 21 11:28 mysql drwxr-xr-x. 2 root root 4096 Apr 21 11:28 performance_schema drwxr-xr-x. 2 root root 4096 Apr 21 11:28 test drwxr-xr-x. 2 root root 61440 Apr 21 11:28 ultrax -rw-r--r--. 1 root root 13 Apr 21 11:28 xtrabackup_binary -rw-r--r--. 1 root root 27 Apr 21 11:28 xtrabackup_binlog_info -rw-r-----. 1 root root 89 Apr 21 11:28 xtrabackup_checkpoints -rw-r-----. 1 root root 2560 Apr 21 11:28 xtrabackup_logfile [root@shuishui 2014-04-21_11-28-06]#