首頁 資料庫 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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1244
24
開源!超越ZoeDepth! DepthFM:快速且精確的單目深度估計! 開源!超越ZoeDepth! DepthFM:快速且精確的單目深度估計! Apr 03, 2024 pm 12:04 PM

0.這篇文章乾了啥?提出了DepthFM:一個多功能且快速的最先進的生成式單目深度估計模型。除了傳統的深度估計任務外,DepthFM還展示了在深度修復等下游任務中的最先進能力。 DepthFM效率高,可以在少數推理步驟內合成深度圖。以下一起來閱讀這項工作~1.論文資訊標題:DepthFM:FastMonocularDepthEstimationwithFlowMatching作者:MingGui,JohannesS.Fischer,UlrichPrestel,PingchuanMa,Dmytr

使用ddrescue在Linux上恢復數據 使用ddrescue在Linux上恢復數據 Mar 20, 2024 pm 01:37 PM

DDREASE是一種用於從檔案或區塊裝置(如硬碟、SSD、RAM磁碟、CD、DVD和USB儲存裝置)復原資料的工具。它將資料從一個區塊設備複製到另一個區塊設備,留下損壞的資料區塊,只移動好的資料區塊。 ddreasue是一種強大的恢復工具,完全自動化,因為它在恢復操作期間不需要任何干擾。此外,由於有了ddasue地圖文件,它可以隨時停止和恢復。 DDREASE的其他主要功能如下:它不會覆寫恢復的數據,但會在迭代恢復的情況下填補空白。但是,如果指示工具明確執行此操作,則可以將其截斷。將資料從多個檔案或區塊還原到單

如何多條件使用Excel過濾功能 如何多條件使用Excel過濾功能 Feb 26, 2024 am 10:19 AM

如果您需要了解如何在Excel中使用具有多個條件的篩選功能,以下教學將引導您完成對應步驟,確保您可以有效地篩選資料和排序資料。 Excel的篩選功能是非常強大的,能夠幫助您從大量資料中提取所需的資訊。這個功能可以根據您設定的條件,過濾資料並只顯示符合條件的部分,讓資料的管理變得更有效率。透過使用篩選功能,您可以快速找到目標數據,節省了尋找和整理數據的時間。這個功能不僅可以應用在簡單的資料清單上,還可以根據多個條件進行篩選,幫助您更精準地定位所需資訊。總的來說,Excel的篩選功能是一個非常實用的

Google狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理訓練最快選擇 Google狂喜: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進行了基準測試。首先,他們為生成式和非生成式人工智慧任務選擇了一組主流

如何在 PHP 中使用 MySQL 備份和還原? 如何在 PHP 中使用 MySQL 備份和還原? Jun 03, 2024 pm 12:19 PM

在PHP中備份和還原MySQL資料庫可透過以下步驟實現:備份資料庫:使用mysqldump指令轉儲資料庫為SQL檔。還原資料庫:使用mysql指令從SQL檔案還原資料庫。

iPhone上的蜂窩數據網路速度慢:修復 iPhone上的蜂窩數據網路速度慢:修復 May 03, 2024 pm 09:01 PM

在iPhone上面臨滯後,緩慢的行動數據連線?通常,手機上蜂窩互聯網的強度取決於幾個因素,例如區域、蜂窩網絡類型、漫遊類型等。您可以採取一些措施來獲得更快、更可靠的蜂窩網路連線。修復1–強制重啟iPhone有時,強制重啟設備只會重置許多內容,包括蜂窩網路連線。步驟1–只需按一次音量調高鍵並放開即可。接下來,按降低音量鍵並再次釋放它。步驟2–過程的下一部分是按住右側的按鈕。讓iPhone完成重啟。啟用蜂窩數據並檢查網路速度。再次檢查修復2–更改資料模式雖然5G提供了更好的網路速度,但在訊號較弱

特斯拉機器人進廠打工,馬斯克:手的自由度今年將達到22個! 特斯拉機器人進廠打工,馬斯克:手的自由度今年將達到22個! May 06, 2024 pm 04:13 PM

特斯拉機器人Optimus最新影片出爐,已經可以在工廠裡打工了。正常速度下,它分揀電池(特斯拉的4680電池)是這樣的:官方還放出了20倍速下的樣子——在小小的「工位」上,揀啊揀啊揀:這次放出的影片亮點之一在於Optimus在廠子裡完成這項工作,是完全自主的,全程沒有人為的干預。而且在Optimus的視角之下,它還可以把放歪了的電池重新撿起來放置,主打一個自動糾錯:對於Optimus的手,英偉達科學家JimFan給出了高度的評價:Optimus的手是全球五指機器人裡最靈巧的之一。它的手不僅有觸覺

阿里7B多模態文件理解大模型拿下新SOTA 阿里7B多模態文件理解大模型拿下新SOTA Apr 02, 2024 am 11:31 AM

多模態文件理解能力新SOTA!阿里mPLUG團隊發布最新開源工作mPLUG-DocOwl1.5,針對高解析度圖片文字辨識、通用文件結構理解、指令遵循、外部知識引入四大挑戰,提出了一系列解決方案。話不多說,先來看效果。複雜結構的圖表一鍵識別轉換為Markdown格式:不同樣式的圖表都可以:更細節的文字識別和定位也能輕鬆搞定:還能對文檔理解給出詳細解釋:要知道,“文檔理解”目前是大語言模型實現落地的一個重要場景,市面上有許多輔助文檔閱讀的產品,有的主要透過OCR系統進行文字識別,配合LLM進行文字理

See all articles