服务器mysql数据库 备份软件_mysql数据库备份工具xtrabackup

3cf1f9670e78e014817a770b6a62ffe8.png

其他高版本测试缺少依赖

2.xtrabackup参数说明

简介:

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

Xtrabackup有两个主要的工具:xtrabackup、innobackupex

(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表

(2)innobackupex则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁

innobackupex常用参数

1 --compact 创建一个不包含第二索引(除了主键之外的索引)的备份2 --decompress 解压之前所有以–compress参数备份出来的带有.qp格式的备份文件,--parallel参数会允许同时解锁或解压多个文件。需要安装qpress软件。3 --defaults-file=[MY.CNF] 配置文件的路径4 --incremental-basedir 以上一次全量或增量备份的路径,作为增量备份的基础。指定这个参数的同时,应该同样指定--incremental参数5 --incremental 创建增量备份,当指定这个参数的时候,应该指定--incremental-lsn或--incremental-basedir参数,否则将会备份到--incremental-basedir路径6 --apply-log 在备份目录下,通过应用名称为xtrabackup_logfile的交易日志文件来准备备份。同时,创建新的交易日志。7 --redo-only 当准备数据库的全备或合并增量备份时,需要指定这个参数。这个参数实际上执行的是xtrabackup --apply-log-only,会让xtrabackup跳过回滚节点,只做“redo”步骤。当数据库需要应用增量备份时,需要指定这个参数。8 --incremental-dir=DIRECTORY 指定增量备份的目录,需要搭配--incremental参数。9 --no-timestamp 这个参数会让xtrabackup在备份的时候不创建带有时间格式的子文件夹。当指定了这个参数,备份会直接创建在指定的备份目录下10 --stream=STREAMNAME 指定流备份的格式。备份将会以指定格式输出到STDOUT。目前支持的格式有tar 和 xbstream。如果指定了这个参数,后面需要接tmpdir目录作为处理流的一个中间目录。11 --slave-info当备份一个作为复制环境的服务器时,这个参数会自动将CHANGE MASTER语句写到备份中,在恢复备份后,不必执行CHANGE MASTER语句。12 --tables-file=FILE 这个参数会接受一个字符串,这个字符串指定了一个文件,这个文件包含了要备份的表名,格式如database.table,一行一个。13 --use-memory=# 这个参数用于在准备备份时,xtrabackup执行crash recovery所使用的内存大小。这个参数仅和--apply-log搭配时才生效。

使用--stream=tar备份,压缩、解压、已经压缩后的大小都优于-stream=xbstream,推荐使用--stream=tar方式压缩,解压时还可以配合tar

3.全量备份

shell > vim script/backupdb.sh#!/bin/bashdbname='alldatabases'dbuser='user'dbpassword='passwd'backup_dir='/data/backup_db'backup_log='/root/script/logs/backup.log'mtime=`date +%Y-%m`

dtime=`date +%d`

log(){echo -e "`date"+%F %T"` DBname: $1 State: $2\n" >>$backup_log

}

[! -d $backup_dir/$mtime ] && mkdir -p $backup_dir/$mtime

cd $backup_dir/$mtime && /usr/bin/innobackupex --no-lock --user=$dbuser --password=$dbpassword --no-timestamp $dbname > /dev/null 2>&1

if [ $? -eq 0 ];thenlog $dbname'Backup success.'dbakfile=$dbname.$dtime.tar.gztar zcf $dbakfile $dbname --remove-files

[ $? -eq 0 ] && log $dbakfile 'Packaging success.' || log $dbakfile 'Packaging failed.'

elselog $dbname'Backup failed.'

fi

4.全备还原

shell > /etc/init.d/mysql.server stop # 首先关闭数据库

shell> cd /data/backup_db # 切换到备份目录

shell> mv /usr/local/mysql-5.5.52/data data.old # 将原来的数据目录备份一下

shell> tar zxf alldatabase.11.tar.gz # 然后将原来的备份解压缩

shell> innobackupex --apply-log alldatabase # 在备份上应用日志,一般没有看到报错且最后显示 OK 就没有问题 ( --use-memory 使用该参数加快速度 )12:07:33 completed OK!shell> innobackupex --copy-back alldatabase # 将备份还原到 my.cnf 指定的 datadir 中,不指定 --defaults-file,默认 /etc/my.cnf

Error: datadir must be specified. # 报错信息显示,在默认配置文件/etc/my.cnf 中,没有找到 datadir 配置项

shell> vim /etc/my.cnf # 加入 datadir 配置项

datadir= /usr/local/mysql-5.5.52/data

shell> innobackupex --copy-back alldatabase # 再次执行 copy 动作,没有报错且显示 OK12:17:52 completed OK!shell> ll -d /usr/local/mysql-5.5.52/data

drwxr-x--- 6 root root 4096 10月 11 12:17 /usr/local/mysql-5.5.52/data

shell> chown -R mysql.mysql /usr/local/mysql-5.5.52/data # 修改数据目录权限

shell> /etc/init.d/mysql.server start

# 备份已经恢复!

# 回顾整个恢复过程,发现一个问题:之前数据库里的东西全部没有了...

# 也就是说,innobackupex 只适用于该 MySQL 中除系统库外,只有一个库的备份。

# 虽然有选项 --databases 可以指定备份哪个数据库,但是备出来的结果却是 all databases,且恢复的时候也是全部覆盖。(默认不指定备份数据库,则全库备份)

# 1、采用 innobackupex 备份整库,然后恢复到一台新库上,再通过 mysqldump 将需要还原的单库备份一次,之后导入需要恢复的数据库中 ( 要考虑恢复时间 )。

# 2、采用 innobackupex 备份只有一个业务库的 MySQL Server,恢复到只有该业务库的 MySQL Server 中。

# 3、如果一个 MySQL Server 中有多个数据库,又只想备份某个库,且该库体积比较小的情况下,建议使用 mysqldump 备份。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值