基于xtrbackup对mysql的备份还原

MySQL备份还原总结

在对数据库备份的时候如果出现Operating system error number 24 in a file operation.这样的错误说明打开的文件太多。

解决方案ulimit -n 1048576

然后在进行对数据库的备份即可

1、介绍

所用的工具为xtrbackup该工具是由perconan公司提供的开源的而且功能非常强大。这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

(1)备份过程快速、可靠;

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

(3)能够基于压缩等功能节约磁盘空间和流量;

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

(5)还原速度快;

对InnoDB存储引擎实现热备而对于MyISAM存储引擎只能实现温备份

2、安装

其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 获得。

yum intall --percona-xtrabackup-2.2.5-5027.el7.x86_64.rpm

检查生成的文件

rpm -ql percona-xtrabackup

/usr/bin/innobackupex //实现备份还原的命令

/usr/bin/xbcrypt

/usr/bin/xbstream

/usr/bin/xtrabackup

/usr/share/doc/percona-xtrabackup-2.2.5

/usr/share/doc/percona-xtrabackup-2.2.5/COPYING

3、完全备份

innobackupex --user=DBUSER --password=DBUSERPASS  /path/to/BACKUP-DIR/(备份到哪里)

如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:

mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;

mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;

mysql> FLUSH PRIVILEGES;

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

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

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

4、准备(prepare)一个完全备份

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

nnobakupex命令的--apply-log选项可用于实现上述功能。如下面的命令:

# innobackupex --apply-log  /path/to/BACKUP-DIR

在实现“准备”的过程中,innobackupex通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。

5、从一个完全备份中恢复数据

innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

# innobackupex --copy-back  /path/to/BACKUP-DIR

请确保如上信息的最行一行出现“innobackupex: completed OK!”。

当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。如:

# chown -R  mysql:mysql  /data/mysql/

6、使用innobackupex进行增量备份

每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。

要实现第一次增量备份,可以使用下面的命令进行:

# innobackupex --incremental /export/increment --incremental-basedir=BASEDIR

其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/export/increment目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。

需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:

(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。

(2)基于所有的备份将未提交的事务进行“回滚”。

于是,操作就变成了:

# innobackupex --apply-log --redo-only BASE-DIR

接着执行:

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

而后是第二个增量:

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;

7、恢复数据和完全备份的一样只要准备做好了就可以了

innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

# innobackupex --copy-back  /path/to/BACKUP-DIR

请确保如上信息的最行一行出现“innobackupex: completed OK!”。

当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。如:

# chown -R  mysql:mysql  /data/mysql/

下面是两个备份的脚本

完全备份脚本

fullbackup.sh

#!/bin/bash

#Implement a full backup of the MySQL database

#user:[email protected]

#

#

ulimit -n 1048576

name=`/usr/bin/ls -ln /export/oldbackup/ | /usr/bin/tail -n 1 | /usr/bin/awk {print‘$9‘}`

nameu=`/usr/bin/basename /export/oldbackup/$name`

user=encompass

password=aniu7436

backupdir=/export/backup

num=`/usr/bin/ls -l /export/backup | /usr/bin/wc -l`

/bin/mysql -u$user -p$password -e "flush logs;"

/bin/echo "0" > /tmp/test.yon

/usr/bin/innobackupex --user=$user --password=$password $backupdir  && /bin/echo "1" > /tmp/test.yon && /bin/echo "To complete a full backup at `/bin/date`" >> /tmp/my.txt

if [ `cat /tmp/test.yon` -eq 1 ] && [ $num -eq 3 ]; then

headname=`/usr/bin/ls -ln /export/backup/ | /usr/bin/head -n 2 | /bin/grep - | /usr/bin/awk {print‘$9‘}`

/usr/bin/rm -rf /export/backup/$headname

fi

增量备份脚本

incrementalbackup.sh

#!/bin/bash

#Realize incremental backup for the MySQL database

#[email protected]

ulimit -n 1048576

dirnum=`/usr/bin/ls -l /export/backup | /usr/bin/wc -l`

if [ `cat /tmp/test.yon` -eq 0 ] || [ $dirnum -eq 1 ]; then

exit;

fi

incrementaldir=/export/incremental/

username=encompass

passwd=aniu7436

name=`/usr/bin/ls -ln /export/backup/ | /usr/bin/tail -n 1 | /usr/bin/awk {print‘$9‘}`

nameincremental=`/usr/bin/ls -ln /export/incremental/$name | /usr/bin/tail -n 1 | /usr/bin/awk {print‘$9‘}`

num=`/usr/bin/ls -l /export/incremental/$name | /usr/bin/wc -l`

count=`/usr/bin/ls -l /export/incremental/ | /usr/bin/wc -l`

/bin/mysql -u$username -p$passwd -e "flush logs;"

/bin/echo "0" > /tmp/test.yon

if [ $num -lt 2 ]; then

/bin/echo "111111111111111111111111111"

/usr/bin/mkdir $incrementaldir$name

/usr/bin/innobackupex --user=$username --password=$passwd --incremental  $incrementaldir$name   --incremental-basedir=/export/backup/$name && /bin/echo "1" > /tmp/test.yon && /bin/echo "To complete a incremental backup at `date`" >> /tmp/my.txt

if [ $? -ne 0 ]; then

names=`/usr/bin/ls -ln /export/incremental/$name | /usr/bin/tail -n 1 | /usr/bin/awk {print‘$9‘}`

/usr/bin/rm -rf /export/incremental/$name/$names &&  /bin/echo "1" > /tmp/test.yon

fi

else

/bin/echo "222222222222222222222222222"

/usr/bin/innobackupex --user=$username --password=$passwd --incremental   $incrementaldir$name  --incremental-basedir=$incrementaldir$name/$nameincremental && /bin/echo "1" > /tmp/test.yon && /bin/echo "To complete a incremental backup at `date`" >> /tmp/my.txt

if [ $? -ne 0 ]; then

names=`/usr/bin/ls -ln /export/incremental/$name | /usr/bin/tail -n 1 | /usr/bin/awk {print‘$9‘}`

/usr/bin/rm -rf /export/incremental/$name/$names &&  /bin/echo "1" > /tmp/test.yon

fi

fi

if [ `cat /tmp/test.yon` -eq 1 ] &&  [ $count -eq 3 ]; then

headname=`/usr/bin/ls -ln $incrementaldir | /usr/bin/head -n 2 | /bin/grep - | /usr/bin/awk {print‘$9‘}`

/usr/bin/rm -rf $incrementaldir$headname

fi

时间: 2024-07-30 09:37:10

基于xtrbackup对mysql的备份还原的相关文章

MySQL之备份还原,主从复制,主主复制。

数据库作为我们的日常工作中不可缺少的部分,那它内部数据的重要性显而易见,所以数据安全至关重要.确保数据的安全,我们就必须做好数据备份.简单说几个MySQL常用的备份工具以及如何利用这些工具实现数据的备份. 一:MySQL自带的工具---mysqldump,相信大家应该还有映像:# ls /usr/local/mysql/bi我们会看到此命令. 用法:mysqldump [options] [db_name [tbl_name ...]] 常用选项: --databases --备份数据库,后面可

MySQL的备份还原(xtrabackup)

MySQL的备份还原(xtrabackup) xtrabackup简介 xtrabackup是percona提供的MySQL数据库的备份工具,是唯一开源的能对innodb和xtradb数据库进行热备的工具 xtrabackup的特点 1.备份还原过程快.可靠 2.备份过程不会打断正在执行的事务 3.能够基于压缩等功能介于磁盘空间和流量 4.自动实现备份检验 5.开源免费 xtrabackup备份过程 xtrabackup安装 xtrabackup在centos的EPEL源中,可以在配置完EPEL

MYSQL数据库备份还原

MYSQL数据库备份还原 一.  数据库备份 备份数据是数据库管理最常用的操作.为了保证数据库中数据的安全,数据管理员需要定期地进行数据备份.一旦数据库遭到破坏,即可通过备份的文件来还原.因此,数据备份是很重要的工作. 1.使用mysqldump 命令备份 mysqldump 命令可以将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中.mysqldump 命令的工作原理很简单: 它先查出需要备份的表的结构,再在文本文件中生成一个CREATE 语句,然后将表中的所有记

MySQL的备份还原(mysqldump)

MySQL的备份还原(mysqldump) MySQL的还原前提是要建立在,有完全备份和二进制日志开启的前提下,并且二进制日志文件和完全备份存放在与数据库文件不同的磁盘上,否则当磁盘发生损坏数据将无法进行恢复. 开启二进制日志 开启二进制日志需要将MySQL中的sql_log_bin和log_bin这两个选项1.开启sql_log_bin系统中默认开启sql_log_bin选项所以此处无需修改 MariaDB [(none)]> SHOW VARIABLES LIKE 'sql_log_bin'

xtrabackup进行MySQL数据库备份/还原

http://hongge.blog.51cto.com/ 使用xtrabackup进行MySQL数据库备份 前面介绍mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mysqldump备份就不太适合了. 这时就需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup. Xtrabackup实现是物理备份,而且是物理热备 目前主流的有两个工

java实现mysql的备份还原

此文章是基于 1. 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 2. jquery+springMVC实现文件上传 3. 自制xml实现SQL动态参数配置 4. web工程常用路径的获取方法 5. 常用文件(夹)处理方法工具类 一. 简介 备份和导入是一个互逆的过程.  备份:程序调用mysql的备份命令,读出控制台输入流信息,写入.sql文件:  导入:程序调用mysql的导入命令,把从.sql文件中读出的信息写入控制台的输出流  注意:用Java执

备份校验两不误,MySQL自动备份还原校验设计详解

作者介绍庞阔,优朋普乐传媒运维基础部经理.负责数据库运营管理及平台设计开发,监控设计改进,问题跟踪处理,机房网络维护管理,目前四个专利已在专利局申请中.擅长数据库运维管理及Shell.Perl.PHP编写. 最近关于数据库故障出现的问题较多,不论大小公司对数据的备份要求都很高,但对校验数据备份的有效性要求更为迫切,很多公司对于自动备份和还原都已经形成体系,但对于还原后的备份有效性校验可能都不太完善,而且目前网上也没有较为完善的检验机制(可能我没找到). 对数据库备份的有效性校验的方法或样例选择,

基于LV快照实现Mysql的备份还原

搭建环境: centos7 关闭SELinux: setenforce 0关闭防火墙: systemctl stop firewalld 搭建步骤: 创建逻辑卷 # pvcreate /dev/sda6          # vgcreate vg0 /dev/sda6      # lvcreate -L 5G -n lv_mysql  vg0     # lvcreate -L 3G -n lv_binlog vg0     # mkfs.xfs /dev/vg0/lv_mysql    

基于Xtrabackup进行MySQL数据库备份

一.Xtrabackup备份恢复原理 备份innodb表时,xtrabackup若干个线程拷贝独立表空间的.ibd文件,并不停监视此过程中redo log的变化,添加到自己的事务日志文件(xtrabackup_logfile)中.在此过程中,发生的物理写操作越多,xtrabackup_logfile越大.在拷贝完成后的第一个prepare阶段,xtrabackup采用类似于innodb崩溃恢复的方法,把数据文件恢复到与日志文件一致的状态,并把未提交的事务回滚.如果同时需要备份myisam表以及i