Mysql数据库之备份还原(mysqldump,LVM快照,select备份,xtrabackup)
备份类型:
热备份:读写不受影响
温备份:仅可执行读备份
冷备份:离线备份,读写均不能执行,关机备份
物理备份和逻辑备份
物理备份:复制数据文件,速度快。
逻辑备份:将数据导出之文本文件中,必要时候,把他还原回去。
完全备份、增量备份、差异备份
完全备份:备份全部数据
增量备份:仅备份上次完全备份以来变化的数据
差异备份:仅备份上次备份或增量备份以后变化的数据
备份是什么?数据、配置文件、二进制日志、事务日志、-+
MyISAM:不支持热备份,借助逻辑卷(LV),否则只能用温备份。
Innodb:支持热备份,必须得使用一些工具(mysqldummp/xtrabackup开源)。
mysqldump:逻辑备份工具,MyISAM(温),Innodb(热备份)
mysqlhotcopy:物理备份工具、温备份/冷备份
cp:冷备份
LV:逻辑卷的快照功能,几乎热备份
mysqldump备份
原理:将整个表中的数据备份为批量插入的insert语句
在备份数据之前必须要做的防护措施
1、将缓冲区中的数据同步到存储硬盘中去 、锁表:flush tables with read lock
2、解锁:unlock tables
3、关闭二进制日志:set sql_log_bin=0;
4、滚动日志:FLUSH LOGS;
命令选项:
--master-data={0|1|2}
0:不记录二进制日志文件及其路径
1:以chnage master to 的方式记录位置,可用于恢复后直接启动从服务器
2:以chnage master to 的方式记录位置,一般默认为被注释掉
Ionndb热备份
--single-transaction --->启动热备分
--all-databases --->备份所有库
--databases 库名,库名 --->备份指定库
MyISAM温备份
--lock-all-tabls --->执行温备份
--lock-tables --->只备份一张表
备份库或者表
[root@pc2 ~]# mysqldump -uroot -p jiaowu jij > /root/ jiaowu.sql
关键字 选项 库名 表名 导出的路径 备份后的文件名
还原库 或者表
还原之前必须得先创建一个新库(sun)
[root@pc2 ~]# mysql -uroot -p -hlocalhost sun < biao.sql ;
指定库名 导入的路径 备份的文件名
备份策略
每周完全备份+每日增量备份
完全备份:mysqldump
增量备份:备份二进制文件文件(备份之前flush logs)
当我们把整所有库都删掉时,要先去初始化数据库
若启动不起来:killall mysqld
逻辑备份
1、浮点数据丢失精度
2、备份出的数据更占用存储空间,压缩后可 大大节省空间
3、不适合对大数据做完全备份
select备份
备份:select * into outfile '/tmp/ss.txt' from courses;
还原的时候注意:要恢复的表格式要事先创建好,然后才能还原。
还原 load data infile '/tmp/sss.txt' into table 表名
使用LVM快照进行数据库备份
set sql_log_bin=0; --->关闭记录二进制文件,开启=1
show master status; --->查看当前二进制日志
SHOW BINLOG EVENTS IN '日志名'; --->查看二进制日志中的事件
前提:
1、数据文件在逻辑卷上
2、此逻辑卷所在卷组必须有足够的空间够快照卷使用
3、数据文件和事务日志要在同一个逻辑卷中
过程
1、启动一个事务:start transaction;
2、在一个表中插入数据:insert into tutors (Tname) values ('stu001');
3、提交事务:commit;
4、刷新表并且给所有表加锁:flush tables with read lock; 并且执行一次flush logs,滚动日志
5、通过另外一个终端保留二进制日志文件及相关位置信息
mysql -urooot -p -hlocalhost -e 'show master status\G' > /路径/master.info
6、创建快照卷
lvcreate -L 大小 -s -p -r -n名称 lv名称 卷组路径
7、释放锁 mysql> unlock tables;
8、挂载快照卷,备份
mount 、 cp -a
9、删除快照卷
10、增量备份二进制日志
二进制日志相关的几个选项
若进不去mysql字符界面:
[client]
socket=/tmp/mysql.sock
xtrabackup数据库备份
下载xtrabackup这个工具:www.percona.com
安装之前会有依赖包:libev-4.15-1.el6.rf.i686.rpm
perl-DBD-MySQL
使用rpm安装xtrabackup :rpm -ivh percona-xtrabackup-2.3.4-1.el6.i686.rpm
xtrabackup
--defaults-file= //mysql主配置文件
--user=root //mysql 用户
--password='oracle' //mysql密码
--socket=/var/lib/mysql/mysql.sock /data/mysql/backup/full //mysqlsock文件,可选!
备份
innobackupex --user=root /usr 备份整个数据库,备份文件放在/usr/下面
备份完成之后,他会在/usr/目录下创建一个以当前时间命令的文件夹!
在这个文件夹里面都有
xtrabackup_binlog_info:二进制文件信息
xtrabackup_logfile :纯数据文件,
xtrabackup_checkpoints :检查点,
backup-my.cnf :备份命令用到的配置选项信息
现在模拟mysql数据库损坏,service mysqld stop ,然后把/mydata/data目录下的所有数据删除!
在备份之后需要做一些准备操作,在能进行还原
1、将那些已经提交的事务同步到数据文件,从日志文件同步到数据文件。
2、将那些尚未提交的事务给他做回滚
使用--apply-log实现回滚,将那些已经提交的事务同步到数据文件
准备操作
innobackupex --appli-log /usr/2016-05-16_16-57-49/
关键字 选项 指定备份目录
当出现completed OK时,你的准备操作已经完成!
当准备操作完成之后又出现新的数据怎么办?
做即时点还原
首先在mysql中做滚动日志,flush logs;
然后把数据目录中的二进制文件读取出来拷贝到另一个地方,以后可以拿来用就可以了!
cp mysql-bin.000005 /root/ (当前位置在/mydata/data)
还原
还原前要保证数据目录中必须是空的!
要想在一个完全备份中恢复数据,只需要使用--copy-back
innobackupex --copy-back /usr/2016-05-16_16-57-49/
选项 备份文件路径
当出现completed OK!时,还原成功!
然后修改数据目录的权限 chown -R mysql:mysql /mydata/data/
然后再进行即时还原,把我们原先cp出去的那个二进制日志文件制作成sql脚本,导入到mysql中!把mysql还原到崩溃的那一刻。
找到cp出去的那个二进制日志文件,读取那个文件并保存为sql脚本
mysqlbinlog /tmp/mysql-bin.000002 > /tmp/sd.sql
进入mysql页面中:
set sql_log_bin=0;
source /tmp/sd.sql; :执行这个cp出去的sql脚本。
set sql_log__bin=1; :还原回设置
这就是xtrabackup +二进制日志进行备份!
xtrabackup支持对Innodb存储引擎做增量备份。
使用xtrabackup实现增量备份
先进行一次完全备份!
要想实现增量备份,加一个选项 --incermental-dir
第一次增量备份:innobackupex --incremental /存放路径 --incremental-basedir 完全备份文件路径
第二次增量备份:innobackupex --incremental /存放路径 --incremental-basedir 上一次增量备份文件的路径
准备操作!
innobackupex --apply-log --redo-only 完全备份文件夹位置
对第一次增量备份合并到完全备份中去
innobackupex --apply-log --redo-only 指定完全备份文件位置 --incremental-dir=第一次增量备份文件位置
对第二次增量本分合并到完全备份中去
innobackupex --apply-log --redo-only 指定完全备份文件位置 --incremental-dir=第二次增量备份文件位置
现在还原的时候,只还原完全备份就可以了,因为,所有的redo操作都已经合并到完全备份中去了。
使用xtrabackup实现增量备份还原
破坏mysql,把数据目录中的文件都删了!
innobackupex --copy-back 指定完全备份位置
Mysql数据库之备份还原(mysqldump,LVM快照,select备份,xtrabackup)的更多相关文章
- Mysql数据库备份—-通过LVM快照实现备份还原
一.实验环境 一台测试机:A(172.18.30.1) 操作系统:Centos7 操作对象数据库版本:mariadb-10.2 二.实现目的 从A机器(172.18.30.1)简单搭建数据库,创建测试 ...
- mysql数据库基于LVM快照的备份
lvm-snapshot: 基于LVM快照的备份 1.事务日志跟数据文件必须在同一个卷上 2.创建快照卷之前,要请求mysql的全局锁,在快照创建完成之后释放锁 3 ...
- MySQL的备份和恢复-基于LVM快照的备份(lvm-snapshot)
MySQL的备份和恢复-基于LVM快照的备份(lvm-snapshot) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是快照卷 如上图所示,原卷和快照卷可以不一样大,因为 ...
- mysql数据库导出时报错mysqldump: Got error: 145的解决方法
在给mysql数据库备份时,报错:mysqldump: Got error: 145: Table './jxzhtopenfire/ofoffline' is marked as crashed ...
- MySQL基于LVM快照的备份恢复(临时)
目录1.数据库全备份2.准备LVM卷3.数据恢复到LVM卷4.基于LVM快照备份数据5.数据灾难恢复6.总结 写在前面:测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷, ...
- mysql 基于lvm快照的备份
1.查看磁盘数 ls /dev/ | grep sd 2.快照备份 pvcreate /dev/sdb #制作成物理卷vgcreate testvg /dev/sdblvcreate -L200M - ...
- MySQL备份还原——mysqldump工具介绍
mysqldump是一款MySQL逻辑备份的工具,他将数据库里面的对象(表)导出成SQL脚本文件.有点类似于SQL SEVER的"任务-生成脚本"的逻辑备份功能.mysqldump ...
- LVM快照(snapshot)备份
转载自:http://wenku.baidu.com/link?url=cbioiMKsfrxlzrJmoUMaztbrTelkE0FQ8F9qUHX7sa9va-BkkL4amvzCCAKg2hBv ...
- Sql Server 备份还原失败错误ERROR:3145(备份集中的数据库备份与现有的数据库不同)及解决办法
SQL Server备份文件bak,备份后还原出现错误3145,备份集中的数据库备份与现有的 'xxx' 数据库不同. 解决办法如下: 1,新建一个与现有数据库重名的数据库. 如果您不知道数据库名称, ...
- MySQL数据库(表)的导入导出(备份和还原)
一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...
随机推荐
- vue动画效果出现重叠,并且出现滚动条
背景 使用 vue 结合 animated css 第三方动画样式,简单地给页面组件加上切换时的 fade 淡入/淡出动画效果 当调试效果时发现,展示效果出现了问题,并且出现滚动条 原因 退场动画还没 ...
- JAVA基础概念(二)
一.java修饰符和使用场景 修饰符是用来定义类.方法或者变量的访问权限,分为两大类: 访问修饰符: 限定类.属性.方法是否可以被程序里其他部分访问和调用. private<default< ...
- 阿里邮箱地址,smpt
企业邮箱的POP3.SMTP.IMAP地址是什么? 企业邮箱POP.SMTP.IMAP地址列表如下: (阿里云邮箱web端通用访问地址:https://qiye.aliyun.com/),客户端推荐以 ...
- Codeforces Global Round 4 题解
技不如人,肝败吓疯…… 开场差点被 A 题意杀了,幸好仔细再仔细看,终于在第 7 分钟过掉了. 跟榜.wtf 怎么一群人跳题/倒序开题? 立刻紧张,把 BC 迅速切掉,翻到了 100+. 开 D.感觉 ...
- [LeetCode] 36. Valid Sudoku 验证数独
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...
- ApplicationInsights的探测器尝鲜
通常我们可以依靠ApplicationInsights(以下简称ai)来收集比如请求(request),依赖项(dependencies),异常(exception)等信息,但是无法收集到比如一个方法 ...
- Python连载29-log的使用需求实现举例
一.Format类 1.直接实例化 2.可以继承Format添加特殊字符 3.三个参数 (1)fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值 (2)datemt:指定日 ...
- javascript参数化拼接字符串两种方法
javascript如果直接使用字符串+的话,会被大量单引号搞晕,可以有两种比较简单的方法使用参数化拼接. 方式一,传统js //示例:StringFormat("abc{0}def&quo ...
- java跳出循环break;return;continue使用
for(int i=0;i<5;i++){ if(i==2){ System.out.println("i==2时忽略了"); continue;//忽略i==2时的循环 } ...
- cmd命令和linux命令的区别
cmd命令和linux命令看起来很相似,都是在一个控制台输入一些特定的指令去完成一些特定的操作.可是用过的朋友就会发现这些指令是有很多不同的,可是到底有什么不同,要说又说不上来,所以要了解一下. cm ...