利用Xtrabackup在不停机的情况下备用数据库迁移
什么是Xtrabackup?
答:Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
下载Percona XtraBackup
https://www.percona.com/downloads/XtraBackup/LATEST/
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.8-1.el6.x86_64.rpm yum install libev-4.15-1.el6.rf.x86_64.rpm
yum install percona-xtrabackup-24-2.4.8-1.el6.x86_64.rpm
一、备份过程
参数
--databases=name :指定将要备份的数据库列表(不指定为全备)
--incremental :建立一个增量备份
--incremental-lsn=LSN : 指定增量备份将要开始的LSN,它替代选项--incremental-basedir
--slave-info 备份复制从服务端,主从信息记录在ibbackup_slave_info文件中
1:全量备份
命令 读取指定的my.cnf文件 用户 密码 IP 全备地址
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=10.4.90.90 /root/111/full/
2:第一次增量备份
create database test2;
命令 读取指定的my.cnf文件 用户 密码 IP 创建测试库test1,在全量备份的基础上再进行增量备份 增量命令 第一次增量地址
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=10.4.90.90 --incremental-basedir=/root/111/full/2017-08-31_10-28-43/ --incremental /root/111/1/incremental
3:第二次增量备份
create database test3;
命令 读取指定的my.cnf文件 用户 密码 IP 创建测试库test2,在全量备份的基础上再进行增量备份 增量命令 第二次增量地址
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=10.4.90.90 --incremental-basedir=/root/111/1/incremental/2017-08-31_10-29-24 --incremental /root/111/2/incremental
4:第三次增量备份
create database test3;
命令 读取指定的my.cnf文件 用户 密码 IP 创建测试库test3,在全量备份的基础上再进行增量备份 增量命令 第三次增量地址
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=10.4.90.90 --incremental-basedir=/root/111/2/incremental/2017-08-31_10-32-02/ --incremental /root/111/3/incremental
二、恢复过程
进行增量还原数据库,先停止数据库,在删除删除数据库的data
1:第一次还原全量恢复
命令 读取指定的my.cnf文件 用户 密码 从备份恢复 选项用于准备全库备份和合并处最有一个备份外的所有增量备份 全备地址
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log --redo-only /root/111/full/2017-08-31_10-28-43
--apply-log :准备(prepare)一个完全备份(一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态)
--redo-only :该选项强制跳过rollback阶段,只进行redo。这是有必要使用的,如果备份后,要使用增量改变的。
从一个完全备份中恢复数据.恢复的时候记得删除data目录,程序会自己建立data目录的,如果有的话程序会忽略恢复过程。导致恢复失败。
2:第一次还原增量恢复
命令 读取指定的my.cnf文件 用户 从备份恢复 全备地址 增量地址
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /root/111/full/2017-08-31_10-28-43 --incremental-dir=/root/111/1/incremental/2017-08-31_10-29-24/
3:第二次还原增量恢复
命令 读取指定的my.cnf文件 用户 从备份恢复 全备地址 增量地址
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /root/111/full/2017-08-31_10-28-43 --incremental-dir=/root/111/2/incremental/2017-08-31_10-32-02/
4:第三次还原增量恢复
命令 读取指定的my.cnf文件 用户 从备份恢复 全备地址 增量地址
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /root/111/full/2017-08-31_10-28-43 --incremental-dir=/root/111/2/incremental/2017-08-31_10-32-02/
三、复制所有的备份到他们原来的位置
命令 读取指定的my.cnf文件 用户 全备地址
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /root/111/full/2017-08-31_10-28-43/
--copy-back :从一个完全备份中恢复数据(innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息)
授权新data目录的权限
chown -R mysql.mysql data
全量备份某个数据库,需要先备份下面2个,要不启动不了。
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=10.4.90.90 --databases=mysql /root/111/full/
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=10.4.90.90 --databases=performance_schema /root/111/full/
然后在备份你想要的数据库
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=10.4.90.90 --databases=test1 /root/111/full/
mysql5.5 建立同步用户
grant replication slave on *.* to 'backup'@'%' identified by '123456';
利用Xtrabackup在不停机的情况下备用数据库迁移的更多相关文章
- m_Orchestrate learning system---二十九、什么情况下用数据库做配置字段,什么情况下用配置文件做配置
m_Orchestrate learning system---二十九.什么情况下用数据库做配置字段,什么情况下用配置文件做配置 一.总结 一句话总结: 配置文件 开发人员 重置 数据库 非开发人员 ...
- mysql大表在不停机的情况下增加字段该怎么处理
MySQL中给一张千万甚至更大量级的表添加字段一直是比较头疼的问题,遇到此情况通常该如果处理?本文通过常见的三种场景进行案例说明. 1. 环境准备 数据库版本: 5.7.25-28(Percona 分 ...
- 如何在不改SQL的情况下优化数据库
主题简介 在数据库运维中我们会遇到各种各样的问题,这些问题的根源可能很明显,也可能被某种表象掩盖而使我们认不清.所以运维面临的两大问题就是,第一我们没有看清本质,第二应用不允许修改.那么我们如何解决这 ...
- [Android]利用run-as命令在不root情况下读取data下面的数据
正文 一.关键步骤 主要是run-as命令: over@over-ThinkPad-R52:~$ adb shell $ run-as com.package $ cd /data/data/co ...
- java 不利用第三个变量的情况下将值互换
package com.zcj.eg001; public class VarChange { public static void main(String[] args) { int a = 10; ...
- docker默认存储空间用完情况下,做迁移数据
由于docker默认存放数据路径为/var/lib/docker,但运行了一段时间后,发现/var/lib/docker下的目录文件过大,导致此分区空间不够用.通过以下方法,解决该问题. 如何避免: ...
- 总结Oracle8i 的UNDO表空间损坏(ORA-01092及ORA-00600【4193】)情况下的数据库不完全恢复的经历
服务器断电重启导致备份生产环境的恢复目录库无法进行启动,提示Ora-01092例程终止.强行断开连接 查看跟踪日志: Wed Jan 10 08:41:37 2018 Errors in file d ...
- Atitit.有分区情况下的表查询策略流程
Atitit.有分区情况下的表查询策略流程 1. 分区表查询策略流程1 2. 常见数据库oracle mysql的分区查询语句1 2.1. 跨分区查询(oracle)1 2.2. 单分区查询 (ora ...
- SQL Server 2008 R2 下移动数据库的存储位置
使用场景:1. 该数据库增长的较大,存储磁盘空间不足: 2. 在特定情况下该数据库需要移动到另外一块磁盘上(呵呵...我的情况就是之前的磁盘要还给别人) 步骤: 1. 新建查询 SELECT na ...
随机推荐
- 将txt文档按行分割
昨天遇到了一个需求,需要将txt文档按行分割,并指定了行数, 最近在用python,就在网上搜了一下,在参考了http://blog.csdn.net/zhang_red/article/detail ...
- nyoj_6:喷水装置(一)
要让总的使用到的装置数尽可能少,则可以贪心每次选取未使用的半径最大的装置 题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=6 #inclu ...
- JDBC&&c3p0、事务、批处理、多线程 于一体的经典秘方QueryRunner
目录: 基础篇_功能各自回顾 JDBC基础代码回顾(使用JdbcUtils工具简化) c3p0数据库连接池的使用(使用JdbcUtils工具简化) 大数据的插入(使用c3p0+JdbcUtils工具简 ...
- 快速了解cpu、核与线程
作为一个后台开发人员,我想有必要了解这些基础知识.如果本文有不严谨或者疏忽的地方,请指正. cpu与核心 物理核 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数 虚拟核 所谓的4核 ...
- DL4NLP——词表示模型(一)表示学习;syntagmatic与paradigmatic两类模型;基于矩阵的LSA和GloVe
本文简述了以下内容: 什么是词表示,什么是表示学习,什么是分布式表示 one-hot representation与distributed representation(分布式表示) 基于distri ...
- 踩坑之路_"var name = ' ';"_迷之BUG
情景介绍:最近写一个拖拽生成图表的工具,自己的思路每次mousedown的时候动态将this的name属性值赋值给全局中变量(自己手贱测试时直接将变量名命名为了'name',一大波bug还有30s到达 ...
- 【原创】09. easyui-tabs 配合 iframe 使用,请求两次等问题
描述 需要把已经做好的几个设备管理页面.转为子菜单管理:直接使用 easyui-tabs 配合 iframe 是最省时省力的. 存在问题 当点击 "设备管理" 会出现子页面多次加载 ...
- LoadRunner性能测试-loadrunner事务
事务(Transaction): 简单来说就是用来模拟用户的一个相对完整的业务过程.添加事务,是用来衡量响应时间的重要方法.我们可以通过事务计时来对不同压力负载下的性能指标进行对比. 插入事务的方法: ...
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
- js中this的指向总结
// this要在执行时才能确认值,定义时无法确认.下面是常见的几种this指向. //1.在构造函数执行 function Obj(name,age){ //1.实例化时:会创建一个 空对象 ...