mysql的备份和还原
用处:
1、灾难恢复
2、审计
3、测试
备份类型: 热备份、温备份、冷备份 热备份:在线备份,读写操作可继续进行,不受影响,只有基于事务的存储引擎才能完成 温备份:能读不能写 冷备份:读写均不能进行,离线备份 物理备份、逻辑备份 物理备份:复制数据文件 逻辑备份:把数据从库中提出出来保存为文本文件,无法保证浮点型的精度,和存储引擎无关,跨平台好,mysqldump 完全备份、增量备份、差异备份 完全备份:全部备份 增量备份:仅备份上次完全备份或增量备份以后变化的数据 差异备份:仅备份上次完全备份以来变化的数据 还原:需要测试 备份对象: 数据 配置文件 代码:存储过程,存储函数,触发器 OS相关的配置文件,如crontab配置计划及相关的脚本 跟复制相关的配置信息 二进制日志文件 热备份: myisam:几乎不可能,可以用逻辑卷来备份,最好温备份 innodb:可以,xtrabackup,mysqldump 物理备份还是逻辑备份: 物理备份:速度快,和文件系统无关 逻辑备份:速度慢,丢失浮点数精度,方便使用文本处理工具直接对其处理,可移植性强跨mysql服务器版本 备份策略: 完全+增量 完全+差异 备份工具: mysqldump:逻辑备份,myisam(温备份),innodb(热备份),备份和恢复过程较慢,适于备份10G以下的数据,因为速度太慢。mysqldumper:多线程的mysqldump。很难实现差异或增量备份。 mysqlhotcopy:物理备份,温备份工具,仅适用于MyIsam引擎 lvm-snapshot:接近于热备的工具,因为要先请求全局锁,而后创建快照,并在创建快照之后释放全局锁,使用cp,tar等工具进行物理备份,备份恢复速度快。很难实现增量备份,并且请求全局锁需要等待一段时间,在繁忙的服务器上尤其如此 innodb:不能立即创建快照 备份备份工具:select clause into outfile ‘/path/to/somefile’ 恢复:load data infile ‘/path/from/somefile’ 不会备份关系定义,仅备份表中的数据 也是逻辑备份工具,速度上快于mysqldump 没法实现增量 第三组工具: innodb:ibbackup商业工具 xtrabackup:开源工具
备份策略:
1、mysqldump
2、lvm+二进制日志
3、xtrabackup
mysqldump用法:
mysqldump [options] [db_name[tbl_name ...]]
-u:指定用户名
-h:指定主机
--all-databases:备份所有数据库
--databases:备份指定的多个库tb1tb2 >/tmp/a.sql,这种会自动创建库
恢复时需先有数据库,没有则需创建
注意:备份前要加锁
--lock-all-tables:请求锁定所有表之后再备份,对myisam、innodb、aria做温备
--single-tranaction:单事务,能够对innodb存储引擎实现热备,会自动加锁,与—lock-all-tables不能同时使用
备份代码:
--events:备份事件、调度器、代码
--routines:备份存储过程和存储函数
--triggers:备份触发器
备份时滚动日志:
--flush-logs:备份前、加锁后,滚动日志
复制时的同步位置标记:
--master-data={0|1|2}0:不记录,1:记录为changemaster语句2、记录为注释change master语句的
使用mysqldump备份:
请求锁:--lock-all-tables或—single-tranaction进行innodb热备
滚动日志:--flush-logs
选择要备份的库:--databases
记录二进制日志文件及位置:--master-data=
恢复:恢复过程没有必要记录到二进制日志中,所以临时关闭二进制日志,关闭其他用户连接source
备份策略:基于mysqldump
备份:mysqldump+二进制日志文件;
周日做一次完全备份:备份的同时滚动日志
周一至周六:备份二进制日志;
恢复:
完全备份+各二进制日志文件中至此刻的事件
对MySQL配置文件,以及与MySQL相关的OS配置文件在每次修改后都应该直接进行备份;
例1:备份和恢复单个库:
备份hellodb数据库
查看
删除mysql中的数据库
导入备份
说明导入之前数据库必须存在才行
创建数据库
导入备份
查看表
例2:备份所有库:
--all-databases
如果mysql数据库被删除,恢复时自动创建数据库
例3:备份多个库:
--databases db1 db2
如果mysql数据库被删除,恢复时自动创建数据库
例4:备份前应事先加锁
--lock-all-tables建议使用
--lock-tables,会导致表时间不一致,不建议使用
例5:
创建ha数据库
使用数据库ha,插入数据
查看表
查看表中数据
备份
查看二进制日志位置
新增内容
查看新增数据
删除数据库
备份新增数据的二进制日志文件
恢复前先临时关闭二进制日志功能(当前会话)
导入完全备份
查看数据库
使用ha数据库,并查看表
导入增量备份
查看表
查看新增的数据
还原二进制日志功能
查看二进制日志位置
lvm-snapshot:基于LVM快照的备份
1、事务日志和数据文件必须在同一个卷上
2、创建快照卷之前,要请求全局锁,在快照创建完成之后释放锁
3、请求全局锁完成后做日志滚动;做二进制日志文件及位置标记(手动进行);
备份步骤:
1、请求全局锁,并滚动日志
mysql> FLUSH TABLES WITH READLOCK;
mysql> FLUSH LOGS;
2、做二进制日志文件及位置标记(手动进行);
# mysql -e ‘show master status‘> /path/to/somefile
3、创建快照卷
# lvcreate -L -s -n -p r /path/to/some_lv
4、释放全局锁
mysql> UNLOCK TABLES;
5、挂载快照卷并备份
# cp
6、备份完成之后,删除快照卷
恢复:
1、二进制日志保存好;
提取备份之后的所有事件至某sql脚本中;
2、还原数据,修改权限及属主属组等,并启动mysql
3、做即时点还原
使用Xtrabackup进行MySQL备份:
1、简介
Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;
安装:
[[email protected] ~]# yum -y install percona-toolkit-2.2.4-1.noarch.rpm percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm
innobackupex:
完全备份:
[[email protected] data]# mkdir /mybackups #准备备份目录
临时改变二进制日志功能,导入数据库
查看数据库
开启二进制功能
查看表的属性
备份
停止mysql服务
删除mysql所有数据库
准备阶段
复制备份回mysql数据目录
进入mysql数据目录
更改属主属组并启动服务
查看数据库
增量备份
每一次恢复后都要立即做一次完全备份
查看备份文件
新增数据
增量备份
查看备份
再新增数据
增量备份
查看备份信息
最后二进制日志的位置
新增数据
删除数据库
恢复完全备份
恢复第一次增量
恢复第二次增量
查看完全备份的及时点,和最后一次的增量及时点一样
二进制点也和最后一次增量一样
更改属主属组
保存二进制日志
启动服务器
关闭二进制功能,导入数据
开启二进制功能
查看数据