首页 数据库 mysql教程 Xtrabackup与innobackupex热备份MySQL数据_MySQL

Xtrabackup与innobackupex热备份MySQL数据_MySQL

May 27, 2016 pm 01:46 PM
备份 数据

Xtrabackup与innobackupex热备份MySQL数据

 

一.Xtrabackup 简介及备份原理说明:

 

Xtrabackup是由percona开发的一个开源软件,能够非常快速地备份与恢复mysql数据库,且支持在线热备份(备份时不影响数据读写),此软件可以说是innodb热备工具ibbackup的一个开源替代品

 

Xtrabackup中包含两个工具:

 

1、xtrabackup:用于热备份innodb,xtradb引擎表的工具,不能备份其他表。

 

2、innobackupex:对xtrabackup封装的perl脚本,提供了用于myisam(会锁表)和innodb引擎,及混合使用引擎备份的能力。

 

Xtrabackup可以做什么

 

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

 

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

 

3、以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)

 

MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下:

 

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

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

 

在Xtrabackup的wiki上简单的介绍了一下实现的原理:

 

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

 

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

 

Tip1:Xtrabackup是一个用于备份InnoDB/XtrDB的工具,真正的在线备份(不影响数据的读写),InnoDB Hot Backup的开源替代品。

 

Tip2:在使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题。

 

备份原理

 

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

 

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

 

1.It applies committed transaction log entries to the data files

 

2.it performs an undo operation on any transactions that modified data but did not commit.

 

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

 

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

 

实现细节

 

文件权限

 

xtrabackup以read-write模式打开innodb的数据文件,然后对其进行复制。其实它不会修改此文件。也就是说,运行xtrabackup的用户,必须对innodb的数据文件具有读写权限。

 

为什么要用rw模式呢?直接read模式不好么?因为xtrabackup采用了其内置的innodb库来打开文件,而innodb库打开文件的时候就是rw的。

 

Tuning the OS Buffers

 

因为XtraBackup要从文件系统中复制大量的数据,所以它尽可能地使用posix_fadvise(),来告诉OS不要缓存读取到的数据,从而提升性能。因为这些数据不会重用到了,OS却没有这么聪明。如果要缓存一下的话,几个G的数据,会对OS的虚拟内存造成很大的压力,其它进程,比如mysqld很有可能被swap出去,这样系统就会受到很大影响了。

 

posix_fadvise(file,0,0, POSIX_FADV_DONTNEED)

 

而且XtraBackup在读取数据的时候还尽可能地预读:

 

posix_fadvise(file,0,0, POSIX_FADV_SEQUENTIAL)

 

复制数据文件

 

在备份innodb page的过程中,XtraBackup每次读写1MB的数据,1MB/16KB=64个page。

 

这个不可配置。读1MB数据之后,XtraBackup一页一页地遍历这1MB数据,使用innodb的buf_page_is_corrupted()函数检查此页的数据是否正常,如果数据不正常,就重新读取这一页,最多重新读取10次,如果还是失败,备份就失败了,退出。

 

It skips this check on the doublewrite buffer??

 

在复制transactions log的时候,每次读写512KB的数据。同样不可以配置。

 

二.下载及安装配置

 

1. Xtrabackup二进制64位下载地址:

http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6/Linux/binary/x86_64/

 

2.MySQL5.1.56的下载地址:

http://dev.mysql.com/downloads/mysql/5.1.html#downloads

操作系统环境:

CentOS release 5.4 (Final) x86_64 GNU/Linux 2.6.18-164.el5

 

2.安装配置

(1)安装配置mysql-5.1.56

 

在MySQL 5.1.38前的版本中,当你需要安装InnoDB Plugin时,必须下载Plugin的文件,解压后再进行一系列的安装。从MySQL 5.1.38开始往后,MySQL包含了2个不同版本的InnoDB存储引擎—一个是旧版本的引擎,称之为build-in innodb;另一个是1.0.4版本的InnoDB存储引擎。

Shell> tar –zxvvf mysql-5.1.56.tar.gz

Shell> cd mysql-5.1.56

Shell> ./configure --prefix=/opt/mysql5156 \

--with-charset=utf8 --with-collation=utf8_general_ci \

--with-extra-charsets=latin1,gb2312  \

--with-plugins=innobase,innodb_plugin,myisam,heap,csv,federated,blackhole \

--enable-local-infile --enable-thread-safe-client

Shell> make

Shell >make install

Shell> cp support-files/my-medium.cnf /etc/my.cnf

Shell>cd /opt/mysql5156

Shell>chown -R mysql .

Shell>chgrp -R mysql .

Shell>bin/mysql_install_db -user=mysql

Shell>chown -R root .

Shell> chown -R mysql var

 

配置启动plugin-innodb

Shell > vi /etc/my.cnf

port= 3307

socket  = /tmp/mysql5156.sock

 

[mysqld]

port= 3307

socket  = /tmp/mysql5156.sock

ignore_builtin_innodb

 

启动:shell>/opt/mysql5156/bin/mysqld_safe –user=mysql &

加载plugin-innodb:

mysql>INSTALL PLUGIN INNODB SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_TRX SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_LOCKS SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_LOCK_WAITS SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_CMP SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_CMP_RESET SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_CMPMEM SONAME 'ha_innodb_plugin.so';

mysql >INSTALL PLUGIN INNODB_CMPMEM_RESET SONAME 'ha_innodb_plugin.so';

 上述语句只需执行一次就ok了,即使重启mysqld也不需要再次安装了。

 mysql > show plugins;

 mysql> select @@innodb_version;

+------------------+

| @@innodb_version |

+------------------+

| 1.0.15   |

+------------------+

1 row in set (0.00 sec)

mysql执行INSTALL PLUGIN INNODB SONAME 'ha_innodb_plugin.so';如果报错提示:ERROR 1289 (HY000): The ‘plugin’ feature is disabled; you need MySQL built with ‘HAVE_DLOPEN’ to have it working

 

经上网搜索找到解决问题方法:

 

在编译时不要用静态编译,将下面两个从编译参数中删除:

--with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static。至于原因不是很清楚。

 

(2)安装配置Xtrabackup

 

先看看如何安装Xtrabackup,最简单的安装方式是使用RPM包,不过想使用源代码方式安装的话,其安装方式有点古怪,因为它采用的在MySQL源代码上打补丁构建的方式安装的。这里使用二进制包的安装方式,相对比较灵活。

Shell> mkdir /usr/local/xtrabackup

Shell> tar -zxvf xtrabackup-1.6.tar.gz -C /usr/local/xtrabackup

Shell>cd /usr/local/xtrabackup/bin

Shell>ln -s innobackupex-1.5.1 innobackupex

 

配置环境变量:

Shell>export PATH=$PATH:/usr/local/xtrabackup/bin

 

修改mysql配置文件:

Shell> vi /etc/my.cnf

 

添加或修改:datadir = /usr/local/mysql/var(数据库目录)

 

特别注意:default_table_type = InnoDB (必须改,否则进行增量备份的时候不成功)

 

三.xtrabackup的备份与恢复使用

关于xtrabackup的参数选项,如下:

--defaults-file=

#默认配置文件的路径,如果补该参数,xtrabackup将从依次从以下位置查找配置文件:

/etc/my.cnf 

/etc/mysql/my.cnf

/usr/local/etc/my.cnf

~/.my.cnf

 

并读取配置文件中的[mysqld]和[xtrabackup]配置段

--defaults-extra-file=

#如果使用了该参数,在读取了全局配置文件之后,会再读取这里指定的配置文件

--target-dir=name

#备份文件的存放目录路径

--backup

#实施备份到target-dir

--prepare

#实施对备份文件迚行恢复前的准备(生成InnoDB log file)

--print-param

#打印备份或恢复时需要的参数

--use-memory=#

#该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量

--suspend-at-end

#在target-dir目录下产生一个xtrabackup_suspended文件,将xtrabackup进程挂起,不停地将数据文件的变化同步到备份文件,直到用户手工删除xtrabackup_suspended文件

--throttle=

#每秒IO次数,限制backup时使用的I/O操作量,使备份对数据库正常业务的影响最小化--log-stream

 

该参数在backup的时候使用,将xtrabackup_logfile的内容输出到标准输出,使用该参数时会自动使用--suspend-at-end参数,innobackupex脚本的--stream模式会使用该参数。

--incremental-lsn=name

#增量备份时只拷贝LSN比该参数指定值新的ibd pages,前次备份到了哪个LSN可以看前次备份集的xtrabackup_checkpoints文件。

--incremental-basedir=name

#该参数在backup的时候使用,备份比该参数指定位置的备份集新的idb pages

--incremental-dir=name

#该参数在prepare的时候使用,指定prepare时产生的.delta文件和日志文件的存放路径

--tables=name

#在备份file-per-table类型的数据文件时使用,使用正则表达式指定需要备份的innodb 表

--datadir=name

#MySQL数据库的数据文件目录。

xtrabackup只备份InnoDB数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)

1.普通备份(全量备份)

shell>mkdir -p /backup/xtrabackup

shell>xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/backup/xtrabackup

全量备份模拟恢复:

需要执行两次xtrabackup --prepare

shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/xtrabackup

shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/xtrabackup

 

删除数据库目录下的数据文件:

Shell>rm -rf /usr/local/mysql/var/ib*

Shell>cp /backup/xtrabackup/ib* /usr/local/mysql/var

Shell>chown -R mysql.root /usr/local/mysql/var

 

重启测试是否恢复成功。

 

注意,xtrabackup只备份数据文件,并不备份数据表结构(.frm),所以使用xtrabackup恢复的时候,你必须有对应表结构文件(.frm)。

 

2. 普通备份(增量备份)

 

增量备份优点:

 

1、数据库太大没有足够的空间全量备份,作增量备份有效节省空间,且效率高。

 

2、支持热备份。备份过程不锁表,不受时间限制,不影响用户使用。

 

3、每日备份只产生少量数据,远程备份传输更方便。同时节省空间。

 

4、备份恢复基于文件操作,降低直接对数据库操作风险。

 

5、备份效率更高,恢复效率更高。

 

增量备份及模拟恢复步骤:

shell>mkdir -p /backup/xtrabackup/base

shell>mkdir -p /backup/xtrabackup/delta

 

(1)先做一次全量备份,因为后面的增量备份要以此为基础

shell>xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/backup/xtrabackup/base

shell>ls /backup/xtrabackup/base

ibdata1  xtrabackup_checkpoints  xtrabackup_logfile

 

(2)以此全量备份为基础进行增量备份

Shell>xtrabackup --defaults=/etc/my.cnf  --backup --target-dir=/backup/xtrabackup/delta/ --incremental-basedir=/backup/xtrabackup/base/

shell>ls /backup/xtrabackup/delta

ibdata1.delta  xtrabackup_checkpoints  xtrabackup_logfile

 

ps:在增量备份的目录下,数据文件都是以.delta结尾的。增量备份只备份上一次全量备份后被修改过的page,所以增量备份只暂用较少的空间。增量备份可以在增量备份的基础上增量。

 

(注意:/backup/xtrabackup/delta/是每次都需修改的。比如第二次增量就改成/backup/xtrabackup/delta2,当然可以写个脚本进行自动备份)

 

增量备份模拟恢复过程:

 

我们需要分别对全量、增量备份各做一次prepare操作。

shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/xtrabackup/base/

shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/xtrabackup/base/

--incremental-dir=/backup/xtrabackup/delta/

shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/backup/xtrabackup/base/

shell>rm -rf /usr/local/mysql/var/ib* #删除原来数据目录下的数据文件

Shell>cp /backup/xtrabackup/base/ib* /usr/local/mysql/var

Shell>chown -R mysql.root /usr/local/mysql/var

 

重启后测试是否成功。

 

再次提醒,xtrabackup只备份InnoDB数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)。

 

3.增量备份

 

对比innobackupex和xtrabackup我们可以看到,innobackupex操作起来更方便,但是innobackupex会有短暂的锁表(时间依赖于MyISAM大小)。xtrabackup备份还有另一个重要特性:增量备份。(未来的版本innobackupex也可能增长该功能)

比如表中目前有10条数据,先备份.备份到/usr/local/backup/1/目录 (完整备份)

shell> xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/usr/local/backup/1/

 

查看它的lsn点:

shell> cat xtrabackup_checkpoints 

backup_type = full-backuped

from_lsn = 0:0

to_lsn = 0:592411

 

再向表中插入数据,增量备份

shell>xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/usr/local/backup/2/ --incremental-basedir=/usr/local/backup/1/

 

把增量备份到2(1到2的增量备份)

 

查看它的lsn点:

shell>cat xtrabackup_checkpoints 

backup_type = incremental

from_lsn = 0:592411

to_lsn = 0:908563

 

再向表中插入数据,增量备份

shell>xtrabackup --defauls-file=/etc/my.cnf --backup --target-dir=/usr/local/backup/3/ --incremental-basedir=/usr/local/backup/1/

 

把增量备份到3(1到3的增量备份,2的备份已经包含在里面了,按照这种方式备份的话,最后的还原只需要还原完全备份和最后一份增量备份即可)

查看它的lsn点:

shell>cat xtrabackup_checkpoints 

backup_type = incremental

from_lsn = 0:592411

to_lsn = 0:1507854

 

或则另一种增量备份方式:

shell>xtrabackup --defauls-file=/etc/my.cnf --backup --target-dir=/usr/local/backup/3/ --incremental-basedir=/usr/local/backup/2/

把增量备份到3(2到3的增量备份,各个增量备份独立,按照这种方式备份的话,最后的还原需要还原完全备份和各个增量备份)

 

查看它的lsn点:

shell>cat xtrabackup_checkpoints 

backup_type = incremental

from_lsn = 0:908563

to_lsn = 0:1507854

 

增量备份模拟恢复:

 

我们需要分别对全量、增量备份各做一次prepare操作。

 

①:基于(1到3的增量备份,2的备份已经包含在里面了,按照这种方式备份的话,最后的还原只需要还原完全备份和最后一份增量备份即可)

 

把第1次的完备恢复

shell>xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/usr/local/backup/1/

 

继续把增量备份恢复上去

shell>xtrabackup --prepare --target-dir=/usr/local/backup/1/ --incremental-dir=/usr/local/backup/3/

shell>xtrabackup --prepare --target-dir=/usr/local/backup/1/ 

 

恢复完成 

 

接着

cd /usr/local/backup/1/

cp 1/ib* /usr/local/mysql/var/

chown –R mysql.root /usr/local/mysql/var

/etc/init.d/mysql restart

 

②基于(2到3的增量备份,各个增量备份独立,按照这种方式备份的话,最后的还原需要还原完全备份和各个增量备份)

 

把第1次的完备恢复

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/usr/local/backup/1/

 

继续把增量备份恢复上去

shell>xtrabackup --prepare --target-dir=/usr/local/backup/1/ --incremental-dir=/usr/local/backup/2/

 

继续把增量备份恢复上去

shell>xtrabackup --prepare --target-dir=/usr/local/backup/1/ --incremental-dir=/usr/local/backup/3/

 

恢复完成 

 

接着

cd /usr/local/backup/1/

cp 1/ib* /usr/local/mysql/var/

chown –R mysql.root /usr/local/mysql/var

/etc/init.d/mysql restart

 

四、innobackupex备份与恢复

Usage:

innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME]

 [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp]

 [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar]

 [--defaults-file=MY.CNF]

 [--databases=LIST] [--remote-host=HOSTNAME] BACKUP-ROOT-DIR

innobackup --apply-log [--use-memory=MB] [--uncompress] [--defaults-file=MY.CNF]

 [--ibbackup=IBBACKUP-BINARY] BACKUP-DIR

innobackup --copy-back [--defaults-file=MY.CNF] BACKUP-DIR

 

第一个命令行是热备份mysql数据库。

 

带有--apply-log选项的命令是准备在一个备份上启动mysql服务。

 

带有--copy-back选项的命令从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置。

 

参数注释:

--defaults-file=

#同xtrabackup的--defaults-file 参数;

--apply-log

#对xtrabackup的--prepare参数的封装;

--copy-back

#做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir;

--remote-host=HOSTNAME

#通过ssh将备份数据存储到进程服务器上;

--stream=[tar]

#备份文件输出格式,tar时使用tar4ibd,该文件可在XtarBackup binary文件中获得。如果备份时有指定--stream=tar,则tar4ibd文件所处目录一定要在$PATH中(因为使用的是tar4ibd去压缩,在XtraBackup的binary包中可获得该文件);

--tmpdir=DIRECTORY

#当有指定--remote-host or --stream时,事务日志临时存储的目录,默认采用MySQL配置文件中所指定的临时目录tmpdir;

--redo-only --apply-log组,

#强制备份日志时只redo,跳过rollback。这在做增量备份时非常必要;

--use-memory=

#该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量;

--throttle=IO

#同xtrabackup的--throttle参数;

--sleep=

#是给ibbackup使用的,指定每备份1M数据,过程停止拷贝多少毫秒,也是为了在备份时尽量减小对正常业务的影响,具体可以查看ibbackup的手册;

--compress[=LEVEL]

#对备份数据迚行压缩,仅支持ibbackup,xtrabackup还没有实现;

--include=REGEXP

#对xtrabackup参数--tables的封装,也支持ibbackup;

--databases=LIST

#列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份 ;

--uncompress

#解压备份的数据文件,支持ibbackup,xtrabackup还没有实现该功能;

--slave-info

#备份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info文件,这里会保存主日志文件以及偏移, 文件内容类似于:

CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

--socket=SOCKET

#MySQL服务器的socket文件位置

 

1、使用Innobachkupex备份(暂不支持增量备份)

 

(1)普通备份 

shell> mkdir -p /backup/innobackupex/ 

Shell>innobackupex --defaults-file=/etc/my.cnf  --user=root --password=root \

--databases='i_db' --no-lock /backup/ innobackupex /  \

2> /tmp/innobackup.log  

 

xtrabackup_51  Ver 1.5 Rev undefined for 5.1.52 unknown-linux-gnu (x86_64)

[01] Copying /usr/local/mysql/var/ibdata1

 to /backup/innobackupex/2011-04-12_00-44-29/ibdata1

[01]...done

xtrabackup: The latest check point (for incremental): '0:32538662'

xtrabackup: Stopping log copying thread.

xtrabackup: Transaction log of lsn (0 32538662) to (0 32538662) was copied.

 

注释:

 

使用mysql的root用户备份,密码为root 

 

备份文件的存放路径是/backup/innobackupex/,该目录下将创建以时间戳为名称的备份目录

--no-lock备份时不锁定表

--databases="i_db"用于指定要备份的数据库 

 

2>/tmp/backup.log是将备份过程中的输出信息保存到/tmp/backup.log

注意:在使用innobackupex进行备份时,在配置文件my.cnf中要明确指定mysql的数据文件目录,否则会报错。

[mysqld]

datadir=/usr/local/mysql/var

 

(2)打包(tar)备份 

Shell>innobackupex --defaults-file=/etc/my.cnf  --user=root --password=root \

--databases='i_db' --no-lock  --stream=tar  /backup/innobackupex/  \

2> /tmp/innobackup.log  1> /backup/innobackupex/i_aura.tar

这种备份时间会比较长,主要是执行打包操作。解包过程,需要使用tar ixvf解压对应的文件后,注意参数-i必须加入。

 

模拟恢复过程:

Shell> mysql –uroot –proot –e’drop database i_db’

Shell>mysqladmin –uroot –proot shutdown

Shell>rm –rf /usr/local/mysql/var/ib *

shell >cd /backup/innobackupex/

shell >tar ixvf i_aura.tar

shell>ls

backup-my.cnf  i_aura.tar  ibdata1  i_db  stderr  stdout  xtrabackup_binary  xtrabackup_checkpoints xtrabackup_logfile

 

准备还原

shell>innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-lock --apply-log  /data/back_data/

 

拷贝还原数据:

shell>innobackupex --defaults-file=/etc/my.cnf  –no-lock  --copy-back /backup/innobackupex/

Shell>cd /usr/local/mysql/var

Shell>chown -R mysql:root .   #一定要修改权限

shell> mysqld_safe –user=mysql &

检查删除的数据库,如果恢复则证明该恢复过程无误。

 

(3)压缩(tar)备份 

Shell>innobackupex --defaults-file=/etc/my.cnf  --user=root --password=root \

--databases=”i_db test”--no-lock  --stream=tar  /backup/innobackupex/  \

2> /tmp/innobackup.log  | gzip > /backup/innobackupex/i_aura.tar

 

这种备份时间会比较长,主要是执行压缩操作。 

 

解压缩过程,需要使用tar izxvf 解压对应的文件后,注意参数-i必须加入。

 

还原:

 

使用tar -izxvf解压对应的文件后,操作完全同普通备份。

模拟恢复过程:

Shell> mysql –uroot –proot –e’drop database i_db’

Shell>mysqladmin –uroot –proot shutdown

Shell>rm –rf /usr/local/mysql/var/ibdata1 ib_logfile*

shell >cd /backup/innobackupex/

shell >tar ixvf i_aura.tar

shell>ls

backup-my.cnf  i_aura.tar.gz  ibdata1  i_db  stderr  stdout  xtrabackup_binary xtrabackup_checkpoints  xtrabackup_logfile

 

准备还原:

shell> innobackupex --defaults-file=/etc/my.cnf  –no-lock  --apply-log /backup/innobackupex/……

 

拷贝还原数据:

shell> innobackupex --defaults-file=/etc/my.cnf  –no-lock  --copy-back /backup/innobackupex/

Shell>cd /usr/local/mysql/var

Shell>chown -R mysql:root .

shell> mysqld_safe -user=mysql &

 

检查删除的数据库,如果恢复则证明该恢复过程无误。

 

(4)整库备份及恢复。

备份:

Shell>innobackupex --user=root --password=root --defaults-file=/etc/my.cnf \

 /backup/innobackupex/

 

检查备份的文件:

Shell>ls /backup/innobackupex/

2011-04-12_09-20-13

 

模拟恢复:

 

首先停掉数据库,然后删除数据库目录下的所有数据库文件。

Shell> mysql –uroot –proot shutdown

Shell>rm -rf /usr/local/mysql/var/*

 

首先写日志文件,然后恢复,如下。(注:2011-04-12_09-20-13是自动生成的以备份时间命名的文件夹,恢复时根据情况进行选择)

Shell>innobackupex --apply-log --defaults-file=/etc/my.cnf \

 /backup/innobackupex/2011-04-12_09-20-13

Shell>innobackupex --copy-back --defaults-file=/etc/my.cnf \

/backup/innobackupex/2011-04-12_09-20-13

 

使用cd或者ls 命令看看你的数据库目录下是不是有文件了?

 

修改数据库文件权限,否则无法启动。(这步我是cd到原数据库目录下进行的)

Shell>chown -R mysql:mysql .

 

重启数据库,测试恢复是否成功。

 

五.备份到远程服务器

 

(1)innobackupex远程备份方法一

当前数据库所在机器IP:192.168.1.131,现在要备份到192.168.1.132的/data目录下。

 

Shell>innobackupex --user=root --password=root --defaults=/etc/my.cnf --stream=tar /data | ssh root@192.168.1.132  cat " >" /data/backup.tar

 

接着需要输入远程服务器密码......然后就开始备份了,备份完成后登陆到远程服务器看看是不是有了呢?

 

目前使用xtrabackup增量备份是不支持到远程的。如何解决呢?可以使用nfs 网络文件系统把远程服务器磁盘挂载到本地。

 

(2)innobackupex远程备份方法二

#在本地后台启动1234监听,以便接受备份文件

nc -d -l 1234 > /data/$A/20100118000001.tar &

#ssh到服务器A执行备份,并将备份包推送到备份机B上。同时记录下log。

ssh $A ‘innobackupex-1.5.1 --stream=tar --include=’renren.*’ --throttle=500 --socket=/data/mysql/backup/mysql.sock --defaults-file=/data/dbbackup/my.cnf --user=root --password=xxxxxxx --slave-info /data/dbbackup | nc  $B 1234′ /data/xtrabackup.log 2>&1

参数解释:

--stream=tar : 告诉xtrabackup,备份需要以tar的文件流方式输出。

--include=’renren.*’:备份包含的库表,如例:意思是要备份renren库中所有的表。如果需要全备份,则省略这个参数;如果需 要备份renren库下的2个表:tableA & tableB,则写成:--include=’renren.tableA|renren.tableB’;再如果renren库下只有2个前缀是 table的表,你还可以写成:--include=’renren.table*’。

--throttle=500:xtrabackup在备份过程中,IO操作比较多,因此需要限定一下IO操作。以免服务器压力过大,不过好像作用不太明显,也不知道是不是设置的还是过大。待测…

--socket=/data/mysql/backup/mysql.sock:指定mysql.sock所在位置,以便备份进程登录mysql.

--defaults-file=/data/dbbackup/my.cnf :如果您的/etc/my.cnf中没有使用如[mysqld3306]的片段启动mysql,则不需要这行参数,如果使用了上面的片段,那么 xtrabackup是无法解析/etc/my.cnf文件的(严格上来说是会解析错误),所以,我们需要手工完成一个my.cnf文件,文件片段如下, 只需要指定6个参数即可让xtrabackup正常工作,各参数意思请参考mysql文档:

[mysqld]

datadir=/data/var

innodb_data_home_dir = /data/ibdata

innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend

innodb_log_group_home_dir = /data/iblogs

innodb_log_files_in_group = 2

innodb_log_file_size = 1G

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用ddrescue在Linux上恢复数据 使用ddrescue在Linux上恢复数据 Mar 20, 2024 pm 01:37 PM

DDREASE是一种用于从文件或块设备(如硬盘、SSD、RAM磁盘、CD、DVD和USB存储设备)恢复数据的工具。它将数据从一个块设备复制到另一个块设备,留下损坏的数据块,只移动好的数据块。ddreasue是一种强大的恢复工具,完全自动化,因为它在恢复操作期间不需要任何干扰。此外,由于有了ddasue地图文件,它可以随时停止和恢复。DDREASE的其他主要功能如下:它不会覆盖恢复的数据,但会在迭代恢复的情况下填补空白。但是,如果指示工具显式执行此操作,则可以将其截断。将数据从多个文件或块恢复到单

开源!超越ZoeDepth! DepthFM:快速且精确的单目深度估计! 开源!超越ZoeDepth! DepthFM:快速且精确的单目深度估计! Apr 03, 2024 pm 12:04 PM

0.这篇文章干了啥?提出了DepthFM:一个多功能且快速的最先进的生成式单目深度估计模型。除了传统的深度估计任务外,DepthFM还展示了在深度修复等下游任务中的最先进能力。DepthFM效率高,可以在少数推理步骤内合成深度图。下面一起来阅读一下这项工作~1.论文信息标题:DepthFM:FastMonocularDepthEstimationwithFlowMatching作者:MingGui,JohannesS.Fischer,UlrichPrestel,PingchuanMa,Dmytr

如何多条件使用Excel过滤功能 如何多条件使用Excel过滤功能 Feb 26, 2024 am 10:19 AM

如果您需要了解如何在Excel中使用具有多个条件的筛选功能,以下教程将指导您完成相应步骤,确保您可以有效地对数据进行筛选和排序。Excel的筛选功能是非常强大的,能够帮助您从大量数据中提取所需的信息。这个功能可以根据您设定的条件,过滤数据并只显示符合条件的部分,让数据的管理变得更加高效。通过使用筛选功能,您可以快速找到目标数据,节省了查找和整理数据的时间。这个功能不仅可以应用在简单的数据列表上,还可以根据多个条件进行筛选,帮助您更精准地定位所需信息。总的来说,Excel的筛选功能是一个非常实用的

谷歌狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理训练最快选择 谷歌狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理训练最快选择 Apr 01, 2024 pm 07:46 PM

谷歌力推的JAX在最近的基准测试中性能已经超过Pytorch和TensorFlow,7项指标排名第一。而且测试并不是在JAX性能表现最好的TPU上完成的。虽然现在在开发者中,Pytorch依然比Tensorflow更受欢迎。但未来,也许有更多的大模型会基于JAX平台进行训练和运行。模型最近,Keras团队为三个后端(TensorFlow、JAX、PyTorch)与原生PyTorch实现以及搭配TensorFlow的Keras2进行了基准测试。首先,他们为生成式和非生成式人工智能任务选择了一组主流

超级智能体生命力觉醒!可自我更新的AI来了,妈妈再也不用担心数据瓶颈难题 超级智能体生命力觉醒!可自我更新的AI来了,妈妈再也不用担心数据瓶颈难题 Apr 29, 2024 pm 06:55 PM

哭死啊,全球狂炼大模型,一互联网的数据不够用,根本不够用。训练模型搞得跟《饥饿游戏》似的,全球AI研究者,都在苦恼怎么才能喂饱这群数据大胃王。尤其在多模态任务中,这一问题尤为突出。一筹莫展之际,来自人大系的初创团队,用自家的新模型,率先在国内把“模型生成数据自己喂自己”变成了现实。而且还是理解侧和生成侧双管齐下,两侧都能生成高质量、多模态的新数据,对模型本身进行数据反哺。模型是啥?中关村论坛上刚刚露面的多模态大模型Awaker1.0。团队是谁?智子引擎。由人大高瓴人工智能学院博士生高一钊创立,高

iPhone上的蜂窝数据互联网速度慢:修复 iPhone上的蜂窝数据互联网速度慢:修复 May 03, 2024 pm 09:01 PM

在iPhone上面临滞后,缓慢的移动数据连接?通常,手机上蜂窝互联网的强度取决于几个因素,例如区域、蜂窝网络类型、漫游类型等。您可以采取一些措施来获得更快、更可靠的蜂窝互联网连接。修复1–强制重启iPhone有时,强制重启设备只会重置许多内容,包括蜂窝网络连接。步骤1–只需按一次音量调高键并松开即可。接下来,按降低音量键并再次释放它。步骤2–该过程的下一部分是按住右侧的按钮。让iPhone完成重启。启用蜂窝数据并检查网络速度。再次检查修复2–更改数据模式虽然5G提供了更好的网络速度,但在信号较弱

美国空军高调展示首个AI战斗机!部长亲自试驾全程未干预,10万行代码试飞21次 美国空军高调展示首个AI战斗机!部长亲自试驾全程未干预,10万行代码试飞21次 May 07, 2024 pm 05:00 PM

最近,军事圈被这个消息刷屏了:美军的战斗机,已经能由AI完成全自动空战了。是的,就在最近,美军的AI战斗机首次公开,揭开了神秘面纱。这架战斗机的全名是可变稳定性飞行模拟器测试飞机(VISTA),由美空军部长亲自搭乘,模拟了一对一的空战。5月2日,美国空军部长FrankKendall在Edwards空军基地驾驶X-62AVISTA升空注意,在一小时的飞行中,所有飞行动作都由AI自主完成!Kendall表示——在过去的几十年中,我们一直在思考自主空对空作战的无限潜力,但它始终显得遥不可及。然而如今,

首个自主完成人类任务机器人出现,五指灵活速度超人,大模型加持虚拟空间训练 首个自主完成人类任务机器人出现,五指灵活速度超人,大模型加持虚拟空间训练 Mar 11, 2024 pm 12:10 PM

这周,由OpenAI、微软、贝佐斯和英伟达投资的机器人公司FigureAI宣布获得接近7亿美元的融资,计划在未来一年内研发出可独立行走的人形机器人。而特斯拉的擎天柱也屡屡传出好消息。没人怀疑,今年会是人形机器人爆发的一年。一家位于加拿大的机器人公司SanctuaryAI最近发布了一款全新的人形机器人Phoenix。官方号称它能以和人类一样的速率自主完成很多工作。世界上第一台能以人类速度自主完成任务的机器人Pheonix可以轻轻地抓取、移动并优雅地将每个对象放置在它的左右两侧。它能够自主识别物体的

See all articles