Innobackupex MySQL 全备、增备及恢复
简介:
在这之前都是通过 mysqldump 来备份数据库的,由于是逻辑备份,所以采用这种备份方式数据是很安全的,跨平台、版本都很容易。
凡事有利必有弊,逻辑备份在你数据库比较大时,备份、恢复数据所耗费的时间也是蛮长的,所以要不断改进,使用物理备份。
由于线上数据库表使用的是混合引擎 MyISAM 跟 Innodb ,所以也不能使用 mysqlhotcopy ,这个工具还是蛮好用的,可惜只能备份 MyISAM。
Percona XtraBackup 是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,且是开源项目。
了解到 XtraBackup 工具下有一个 innobackupex 支持 MyISAM 跟 Innodb 的备份,所以来搞一搞。
一、安装 XtraBackup
shell > yum -y install https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
# 或者
shell > wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm shell > yum -y install epel-release shell > yum -y install rsync libev-devel numactl-devel perl-DBD-MySQL shell > rpm -ivh percona-xtrabackup--2.4.-.el6.x86_64.rpm
# 需要解决依赖关系
二、innobackupex 全备
shell > innobackupex --user=user --password=passwd --no-timestamp .//-/`date +%H-%M`.dbname
# --no-timestamp 如果不加的话会在备份目录下生成一个备份时间的目录,备份数据存在该目录下
# 将整个数据库备份到 ./2016/09-29/ 以备份时间加自定义名称的一个目录下
# 虽然可以使用 --stream=tar 加 | gzip > 的方式直接打包并压缩,但是备份速度就下降了,所以我宁愿快速备份,之后再去处理打包、压缩。
# 全备脚本
shell > vim script/backupdb.sh #!/bin/bash
# */ * * sh /root/script/backupdb.sh
# author: Wang XiaoQiang // dbname='alldatabases'
dbuser='user'
dbpassword='passwd' backup_dir='/data/backup_db'
backup_log='/root/script/logs/backup.log' ymtime=`date +%Y-%m`
dtime=`date +%d` wlog(){
echo -e "`date "+%F %T"` DBname: $1 State: $2\n" >> $backup_log
} [ ! -d $backup_dir/$ymtime ] && mkdir -p $backup_dir/$ymtime cd $backup_dir/$ymtime && /usr/bin/innobackupex --user=$dbuser --password=$dbpassword --no-timestamp $dbname > /dev/null >& if [ $? -eq ];then
wlog $dbname 'Backup success.'
dbakfile=$dbname.$dtime.tar.gz
tar zcf $dbakfile $dbname --remove-files
[ $? -eq ] && wlog $dbakfile 'Packaging success.' || wlog $dbakfile 'Packaging failed.'
else
wlog $dbname 'Backup failed.'
fi # End
三、innobackupex 全备恢复
shell > /etc/init.d/mysql.server stop # 首先关闭数据库 shell > cd /data/backup_db # 切换到备份目录 shell > mv /usr/local/mysql-5.5./data data.old # 将原来的数据目录备份一下 shell > tar zxf alldatabase..tar.gz # 然后将原来的备份解压缩 shell > innobackupex --apply-log alldatabase # 在备份上应用日志,一般没有看到报错且最后显示 OK 就没有问题 ( --use-memory 使用该参数加快速度 ) :: 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./data shell > innobackupex --copy-back alldatabase # 再次执行 copy 动作,没有报错且显示 OK :: completed OK! shell > ll -d /usr/local/mysql-5.5./data
drwxr-x--- root root 10月 : /usr/local/mysql-5.5./data shell > chown -R mysql.mysql /usr/local/mysql-5.5./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 备份。
三、innobackupex 增备
shell > mysql -uuser -ppassword -A # 创建测试库、表,插入测试数据 mysql> create database test_incre character set utf8; mysql> create table test_incre.incre(id int() not null,name varchar()); mysql> insert into test_incre.incre values(,'Wang XiaoQiang'); mysql> quit shell > innobackupex --user=user --password=password --database=test_incres --no-timestamp /data/backup_db/test_incre # 第一次全备
# 再次证明:--databases 就是来卖萌的,你可以去源数据库目录 du -sh 跟 目标备份目录 du -sh 比对,真的是一毛一样。
shell > mysql -uuser -ppassword -A # 添加测试数据 mysql> insert into test_incre.incre values(,'Xiao GuaiShou'); mysql> quit shell > innobackupex --user=user --password=password --database=test_incres --no-timestamp --incremental-basedir=/data/backup_db/test_incre --incremental /data/backup_db/test_incre01
# --incremental-basedir=/data/backup_db/test_incre 第一次增备指定全备路径
# --incremental 参数说明这是一次增备,并指定增备路径
# 全备目录 du -sh 跟 增备目录 du -sh 比较发现,增备目录只比全备目录少了 1G,这说明对于 MyISAM 表来讲,还是全备!!!
shell > mysql -uuser -ppassword -A # 再次添加测试数据 mysql> insert into test_incre.incre values(,'King'); mysql> quit shell > innobackupex --user=user --password=password --database=test_incres --no-timestamp --incremental-basedir=/data/backup_db/test_incre01 --incremental /data/backup_db/test_incre02
# 第二次增备是在第一次增备的基础上,所以 --incremental-basedir 指定的是第一次增备目录,最后指定的第二次增备目录
shell > cat test_incre/xtrabackup_checkpoints # backup_type 提示:这是一次全备,from_lsn 从 开始至 结束
backup_type = full-backuped
from_lsn =
to_lsn =
last_lsn =
compact =
recover_binlog_info = shell > cat test_incre01/xtrabackup_checkpoints # backup_type 提示:这是一次增备,from_lsn 从上次结束 lsn 开始至 结束
backup_type = incremental
from_lsn =
to_lsn =
last_lsn =
compact =
recover_binlog_info = shell > cat test_incre02/xtrabackup_checkpoints # backup_type 提示;这是一次增备,from_lsn 从上次结束 lsn 开始至 结束
backup_type = incremental
from_lsn =
to_lsn =
last_lsn =
compact =
recover_binlog_info =
# 好了,这就是增量备份了,可以发现:对于 MyISAM 来说全部是全量备份,并且根本没有什么 --databases 一说。
# 增备脚本
四、innobackupex 增备恢复
shell > /etc/init.d/mysql.server stop # 关闭数据库 shell > cd /data/backup_db shell > mv /usr/local/mysql-5.5./data data.old02 # 备份原有数据库 shell > innobackupex --apply-log --redo-only test_incre # 指定全备目录,--redo-only 对已提交的事务进行前滚,仅最后一次增备恢复不需要添加该参数 shell > innobackupex --apply-log --redo-only test_incre --incremental-dir=/data/backup_db/test_incre01 # --incremental-dir 指定第一次增备目录 ( 绝对路径 ) shell > innobackupex --apply-log test_incre --incremental-dir=/data/backup_db/test_incre02 # 指定第二次增备目录,最后一次增备还原不需要添加 --redo-only 参数 shell > innobackupex --copy-back test_incre # 最后一步,复制整合后的全备文件,位置为 my.cnf 中 datadir 指定路径 shell > chown -R mysql.mysql /usr/local/mysql-5.5./data shell > /etc/init.d/mysql.server start # 启动数据库,查看数据是否恢复 shell > mysql -uuser -ppassword -A mysql> select * from test_incre.incre;
+----+----------------+
| id | name |
+----+----------------+
| | Wang XiaoQiang |
| | Xiao GuaiShou |
| | King |
+----+----------------+
# OK,木有问题!
Innobackupex MySQL 全备、增备及恢复的更多相关文章
- Mongodb全备+增备+oplog恢复误删数据
此时测试表中有7条数据,做个全备. 全备: mongodump --host=192.168.43.43 --port=37017 --oplog --out=/opt/mongo/fullbacku ...
- PerconaXtraBackup --全备增备prepare restore
Xtrabackup Xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下: • xtrabackup只能备份innodb和xtradb引擎表,而不 ...
- mysql之 Innobackupex(全备+增量)备份恢复
MySQL的热备(物理备份)可以采取全备加增量备份的方式来减轻数据库I/O压力及系统资源的占用.增量备份主要是以全备或增量备份为基础,备份那些变更过的页面.其备份的原理是基于一个不断增长的LSN序列, ...
- innobackupex 单脚本循环7天一全备6增备脚本更新
#!/bin/bash #日期转为天数 function date2days { echo "$*" | awk '{ z=-$)/); y=$+-z; m=$+*z-; j=*m ...
- innobackupex 全备、增备脚本
全备脚本:innobackupex --defaults-file=/etc/my.cnf --user root --password mypasswd /mydata/fullbak/ 增备脚本: ...
- mysql全备和增量备份以及恢复过程(percona工具)
实验环境 系统环境,内核版本和xtrabackup工具版本 [root@linux-node1 mysql]# cat /etc/redhat-release CentOS Linux release ...
- 使用xtrabackup(innobackupex)实现MySQL的热备
mysql 的热备http://www.178linux.com/10139http://www.linuxidc.com/Linux/2014-04/99671.htmhttp://634871.b ...
- 基于Innobackupex的全备恢复
对于MySQL数据库的热备,xtrabackup是大多数DBA朋友们的选择.xtrabackup内嵌了一个innobackupex可用于热备MySQL数据库.本文描写叙述了基于innobackupex ...
- MySQL全备+binlog恢复方法之伪装master【原创】
利用mysql全备 +binlog server恢复方法之伪装master 单实例试验 一.试验环境 10.72.7.40 实例 mysql3306为要恢复的对象,mysql3306的全备+binlo ...
随机推荐
- Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn【报错】
自己的项目没有测通 可能是自己项目原因——因为自己项目中级联关系的类涉及太多 自己的项目[这样的配置报错] @OneToMany(fetch=FetchType.LAZY,cascade = { C ...
- stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)
STM32的I/O口可以由软件配置成如下8种模式:输入浮空.输入上拉.输入下拉.模拟输入.开漏输出.推挽输出.推挽式复用功能及开漏复用功能.每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CR ...
- flask第七篇——URL与视图函数的映射
有兴趣的朋友可以添加微信公众号:自动化测试实战 今天开始就要进入正题了.大家都准备好了吧~ 代码提示 先和大家说个小知识点:有同学后台说输入flask代码pycharm不提示,现在告诉你一个解决方法: ...
- 【DUBBO】zookeeper在dubbo中作为注册中心的原理结构
[一]原理图 [二]原理图解释 流程:1.服务提供者启动时向/dubbo/com.foo.BarService/providers目录下写入URL2.服务消费者启动时订阅/dubbo/com.foo. ...
- RBAC (基于角色的访问控制)
基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而 ...
- uGUI知识点剖析之AutoLayout
http://www.2fz1.com/post/unity-ugui-autolayout/ uGUI知识点剖析之AutoLayout 前文详细介绍过RectTransform,RectTransf ...
- jQuery的deferred对象详解(转载)
jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本.(由于无法转载,复制原文 .原文链接——原作者:阮一峰) 每个版本都会引入一些新功能.今天我想介绍的,就是从jQuery 1.5. ...
- 【转】刚发现一个linux在线文档库。很好很强大。
原文网址:http://blog.csdn.net/longxibendi/article/details/6048231 1.网址: http://www.mjmwired.net 2.比如查看这个 ...
- 数据库的备份与恢复(oracle 11g) (转)
一. 内容与步骤 (注意这里许多步骤需要同学们查资料,理解并消化后才能完成) 1.数据库创建 (1) 安装Oralce11g: (2) 创建至少两个以上用户: (3) 每个用户 ...
- python自动发送邮件
Python 的 smtplib 模块提供了发送电子邮件的功能.测试报告出来后,然后就把报告发送到邮箱. 一.先来看简单的列子 使用QQ邮箱发送邮件,使用的是授权码,需要先到QQ邮箱申请授权码. 邮箱 ...