利用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 ...
随机推荐
- ThinkPHP 实现验证码渲染、校验、点击刷新
一.在控制器中写方法,生成验证码,代码如下: /** * 验证码生成 * expire 验证码的有效期(秒) * useImgBg 是否使用背景图片 默认为false * fontSize 验证码字体 ...
- Android Studio2.1 Run APP:Error: Execution failed for task
Android Studio2.1 Run APP时,遇到错误 Error: Execution failed for task ':app:clean'. Unable to delete file ...
- 华为OJ之最长公共子串
题目描述: 对于两个给定的字符串,给出他们的最长公共子串. 题目分析: 1,最长公共子串(LCS)实际上是最长公共子序列的一种特殊情况,相当于是求连续的最长子序列.我们今天先解决这个特殊情况,后续博文 ...
- MySQL日志文件之错误日志和慢查询日志详解
今天天气又开始变得很热了,虽然很热很浮躁,但是不能不学习,我在北京向各位问好.今天给大家分享一点关于数据库日志方面的东西,因为日志不仅讨厌而且还很重要,在开发中时常免不了与它的亲密接触,就在前几天公司 ...
- 获取cpu真实型号
感谢文洋兄的思路.亲测有效. [root@storage GetCpuType]# ./main.o Intel(R) Xeon(R) CPU C5528 @ 2.13GHz #include < ...
- SQL Server ---T-SQl基本语句
T-SQL 是 SQL-Server 的结构化查询语言. 基本数据操作语言. 基础语句 先创建表 我后面的列子都是用的这一个表,列名啥的 就大概看看吧~~ 纯粹为了学习语句,语法~~所以先创建个表吧~ ...
- java利用接口和适配器进行完全解耦--参考《thinking in java》
一.当使用父子类来实现以下东西时,其实是用了向上转型,这段代码的确简单了很多,复用性也很好,但是我们会发现Apply.process()和Processor类耦合过紧,其实apply.process( ...
- 面向对象设计——抽象工厂(Abstract Factory)模式
定义 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类.抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么.这样一来,客户就能从具体的产 ...
- Wamp之mysql密码故事
注:有时候修改mysql密码会出现如下状况:密码改了,但新密码就是进不进去. 原因大概是语法错误.例如: >update user set password='hooray' where use ...
- jsp页面中某个src,如某个iframe的src,应该填写什么?可以是html、jsp、servlet、action吗?是如何加载的?
jsp页面中某个src,如某个iframe的src,应该填写什么?可以是html.jsp.servlet.action吗?是如何加载的? 如有个test工程,其某个jsp中有个iframe,代码如下: ...