生产环境究竟是使用mysqldump还是xtrabackup来备份与恢复数据库.docx
《生产环境究竟是使用mysqldump还是xtrabackup来备份与恢复数据库.docx》由会员分享,可在线阅读,更多相关《生产环境究竟是使用mysqldump还是xtrabackup来备份与恢复数据库.docx(27页珍藏版)》请在冰豆网上搜索。
![生产环境究竟是使用mysqldump还是xtrabackup来备份与恢复数据库.docx](https://file1.bdocx.com/fileroot1/2022-10/29/95adfd15-bec6-49ed-8984-83e99ca2b5c5/95adfd15-bec6-49ed-8984-83e99ca2b5c51.gif)
生产环境究竟是使用mysqldump还是xtrabackup来备份与恢复数据库
生产环境究竟是使用mysqldump还是xtrabackup来备份与恢复数据库
一个合格的运维工程师或者dba工程师,如果有从事数据库方面的话,首先需要做的就是备份,如果没有备份,出现问题的话,你的业务就会出问题,你的工作甚至会。
。
。
所以备份是重要的,但光有备份还不行,备份后如果出现问题,你还得使用备份数据来恢复,但恢复数据的时间一般都是很长的,不符合业务需求,所以一个快速备份与恢复的软件就很有必要。
之前我在维护mysql数据库的时候,使用mysqldump来进行备份与恢复,在备份的时候锁住表,然后全部备份,在数据少的时候没问题,但如果数据很多,不允许锁表,同时需要恢复数据块的情况,mysqldump就不适合了,我在恢复一个4G数据文件的数据库的时候,恢复的数据是使用mysqldump的数据,恢复了3个小时还没有反应,造成的影响很严重,所以我开始寻找其他的别发软件来满足以上的需求,幸好找到了,就是使用xtrabackup来进行备份与恢复,恢复4G数据文件的数据库,仅需要14秒,同时在备份的时候不会锁表,而且支持增量备份,所以把我的比较分享给大家,希望对大家有益!
Xtrabackup是percona公司的开源项目,用以实现类似innodb官方的热备份工具InnoDBHotBackup的功能,能够非常快速地备份与恢复mysql数据库。
Xtrabackup中包含两个工具:
xtrabackup是用于热备份innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。
由于innobackupex的功能更为全面和完善,所以,本文以innobackupex作为基础进行研究描述。
下面介绍xtrabackup的全部、增量的备份与恢复。
一、下载与安装
1、下载
wget
2、安装依赖库
如果是debian系列的话
apt-getinstalldebhelperautotools-devlibaio-devwgetautomakelibtoolbisonlibncurses-devlibz-devcmakebzr
如果是redhat系列的话
yuminstallcmakegccgcc-c++libaiolibaio-develautomakeautoconfbzrbisonlibtoolncurses-develzlib-devel
3、解压
tarzxvfxtrabackup-1.6.7.tar.gz
4、进入目录
cdxtrabackup-1.6.7
5、复制
cdbin
cp*/usr/bin
然后就安装完成了,下面开始备份
其中,
innobackupex是我们要使用的备份工具;
xtrabackup是被封装在innobackupex之中的,innobackupex运行时需要调用它;
xtrabackup_51是xtrabackup运行时需要调用的工具;
tar4ibd是以tar流的形式产生备份时用来打包的工具。
6、对某个数据库进行全部备份的命令介绍
innobackupex--user=root--password=123456--defaults-file=/etc/mysql/f--database=test--stream=tar/tmp/data/2>/tmp/data/err.log|gzip1>/tmp/data/test.tar.gz
说明:
--database=test单独对test数据库做备份,若是不添加此参数那就那就是对全库做备份
2>/tmp/data/err.log输出信息写入日志中
1>/tmp/data/test.tar.gz打包压缩存储到该文件中
二、对数据库的全部备份与恢复
下面开始测试xtrabackup的全部备份
(1)先进入mysql里创建一个新的test数据库
root@client2:
/tmp#mysql-uroot-p
Enterpassword:
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis40
Serverversion:
5.5.28-0ubuntu0.12.04.3-log(Ubuntu)
Copyright(c)2000,2012,Oracleand/oritsaffiliates.Allrightsreserved.
OracleisaregisteredtrademarkofOracleCorporationand/orits
affiliates.Othernamesmaybetrademarksoftheirrespective
owners.
Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.
mysql>dropdatabasetest;
QueryOK,3rowsaffected(0.13sec)
mysql>createdatabasetest;
QueryOK,1rowaffected(0.00sec)
mysql>usetest;
Databasechanged
mysql>createtabletest(idint);
QueryOK,0rowsaffected(0.06sec)
mysql>insertintotestvalues
(1);
QueryOK,1rowaffected(0.04sec)
mysql>insertintotestvalues
(2);
QueryOK,1rowaffected(0.01sec)
mysql>insertintotestvalues(3);
QueryOK,1rowaffected(0.00sec)
mysql>insertintotestvalues(4);
QueryOK,1rowaffected(0.00sec)
mysql>insertintotestvalues(5);
QueryOK,1rowaffected(0.01sec)
mysql>select*fromtest;
+------+
|id|
+------+
|1|
|2|
|3|
|4|
|5|
+------+
5rowsinset(0.00sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)
(2)然后备份test的整个数据库
使用下面的backup.sh脚本
root@client2:
/tmp#catbackup.sh
#!
/bin/bash
user='root'
passwd='123456'
database=test
my_config='/etc/mysql/f'
log=$database-$(date+%Y%m%d%H%M).log
str=$database-$(date+%Y%m%d%H%M).tar.gz
backup_dir='/tmp/data'
echo"Starttobackupat$(date+%Y%m%d%H%M)"
if[!
-d"$backup_dir"];then
mkdir$backup_dir
fi
innobackupex--user=$user--password=$passwd--defaults-file=$my_config--database=$database--stream=tar$backup_dir2>$backup_dir/$log|gzip1>$backup_dir/$str
if[$?
-eq0];then
echo"Backupisfinish!
at$(date+%Y%m%d%H%M)"
exit0
else
echo"BackupisFail!
at$(date+%Y%m%d%H%M)"
exit1
fi
现在开始运行此脚本
root@client2:
/tmp#shbackup.sh
Starttobackupat201303072101
Backupisfinish!
at201303072102
然后到data里查看结果
root@client2:
/tmp#cddata
root@client2:
/tmp/data#ll
total3272
drwxr-xr-x2rootroot4096Mar721:
01./
drwxrwxrwt13rootroot4096Mar721:
02../
-rw-r--r--1rootroot3780Mar721:
02test-201303072101.log
-rw-r--r--1rootroot3336909Mar721:
02test-201303072101.tar.gz
root@client2:
/tmp/data#cattest-201303072101.log
InnoDBBackupUtilityv1.5.1-xtrabackup;Copyright2003,2009InnobaseOy
andPerconaInc2009-2012.AllRightsReserved.
Thissoftwareispublishedunder
theGNUGENERALPUBLICLICENSEVersion2,June1991.
13030721:
01:
39innobackupex:
Startingmysqlwithoptions:
--defaults-file='/etc/mysql/f'--password=xxxxxxxx--user='root'--unbuffered--
13030721:
01:
39innobackupex:
Connectedtodatabasewithmysqlchildprocess(pid=12441)
13030721:
01:
45innobackupex:
Connectiontodatabaseserverclosed
IMPORTANT:
Pleasecheckthatthebackupruncompletessuccessfully.
Attheendofasuccessfulbackupruninnobackupex
p