MYSQL备份与恢复
备份恢复概述
为什么要备份
灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作测试等数据丢失场景。
备份类型
- 完全备份 :备份整个数据集
- 部分备份:只备份数据子集,如部分库或表
- 增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)依赖的数据,备份较快,还原复杂
- 差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单;注:二进制日志文件不应该与数据文件放在同一磁盘
- 冷备:读、写操作均不可进行,数据库停止服务
- 热备:读操作可以执行;写操作不可执行
- 温备:读、写操作均可执行
- MyISAM:温备,不支持热备
- InnoDB:都支持
- 物理备份:直接复制数据文件进行备份,与存储引擎有关,占用较多的空间,速度快
- 逻辑备份:从数据库中导出数据另存而进行的备份,与存储引擎无关,占用空间较少,速度慢,可能丢失精度
备份内容
- 数据
- 二进制日志、InnoDB的事务日志
- 用户账号,权限设置,程序代码(存储过程、函数、触发器、事件调度器)
- 服务器的配置文件
备份注意要点
- 能容忍最多丢失多少数据
- 备份产生的负载
- 备份过程的时长
- 温备的持锁多久
- 恢复数据需要在多长时间内完成
- 需要备份和恢复哪些数据
还原要点
- 做还原测试,用于测试备份的可用性
- 还原演练,写成规范的技术文档
备份工具
- cp,tar等复制归档工具:物理备份工具,适用所有存储引擎;只支持冷备;完全和部分备份
- LVM的快照:先加读锁,做快照后解锁,几乎热备;借助文件系统工具进行备份
- mysqldump:逻辑备份工具,适用所有存储引擎,对MyISAM存储引擎进行温备;支持完全或部分备份,对InnoDB存储引擎支持热备,结合binlog的增量备份
- xtrabackup:由Percona提供支持对InnoDB做热本(物理备份)的工具,支持完全备份、增量备份
- MariaDB Backup:从MariaDB 10.1.26开始集成,基于Percona XtraBackup2.3.8实现
- mysqlbackup:热备份,Mysql Enterprise Edition组件
- mysqlhotcopy:PERL语言实现,几乎冷备,仅适用于MyISAM存储引擎,使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库
基于LVM的快照备份
(1)请求锁定所有表 |
mysqldump备份工具
mysqldump说明
逻辑备份工具:
mysqldump,mydumper,phpMyAdmin
Schema和数据存储在一起、巨大的SQL语句、单个巨大的备份文件
mysqldump:是MySQL的客户端命令,通过mysql协议连接至mysql服务器进行备份
命令格式:
# 支持指定数据库和指定多表的备份,但数据库本身定义不备份 |
mysqldump参考:
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
mysqldump常见通用选项:
# 备份所有数据库,含create database |
mysqldump的MyISAM存储引擎相关备份选项:
MyISAM不支持事务,只能支持温备;不支持热备,所以必须先锁定要备份的库,而后启动备份操作
# 加全局读锁,锁定所有库的所有表,同时加--single-transaction或--lock-tables选项会关闭此选项功能;注意:数据量大时,可能会导致长时间无法并发访问数据库 |
mysqldump的InnoDB存储引擎先关备份选项:
InnoDB存储引擎支持事务,可以利用事务的相应的隔离级别,实现热备,也可以实现温备但不建议使用
# 此选项InnoDB中推荐使用,不适用MyISAM,此选项会开始备份前,先执行START TRANSACTION指令开启事务 |
生产环境实战备份策略
InnoDB建议备份策略
mysqldump -uroot -p -A -F -E -R --triggers --single-transaction --master-data=1 --flush-privileges --default-character-set=utf8 --hex-blob > ${BACKUP}/fullbak_${BACKUP_TIME}.sql |
MyISAM建议备份方案策略
mysqldump -uroot -p -A -F -E -R -x --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > ${BACKUP}/fullbak_${BACKUP_TIME}.sql |
实战:mysqldump备份还原
特定数据库的备份脚本
|
分库备份脚本
|
完全备份与还原
# 前提开启二进制日志 |
xtrabackup备份工具
XtraBackup工具介绍
Percona公司 http://www.percona.com
Percona-server
InnoDB—>XtraDB
Xtrabackup 备份工具:Percona提供的MySQL数据库备份工具,唯一开源的能够对InnoDB和Xtradb数据库进行热备的工具
手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html
下载:https://www.percona.com/downloads/
Xtrabackup特点:
- 备份还原过程快速、可靠
- 备份过程不会打断正在执行的事务
- 能够基于压缩等功能节约磁盘空间和流量
- 自动实现备份检验
- 开源、免费
XtraBackup工具文件组成
XtraBackup2.2版之前包括4个可执行文件:
- innobackupex:Perl脚本
- XtraBackup:C/C++,编译的二进制程序
- xbcrypt:加解密
- xbstream:支持并发写的流文件格式
说明:XtraBackup是用来备份InnoDB表的,不能备份非InnoDB表,和MySQL Server没有交互;innobackupex脚本用来备份非InnoDB表,同时会调用XtraBackup命令来备份InnoDB表,还会和MySQL Server发送命令进行交互,如加全局锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在XtraBackup至上做了一层封装实现的
Xtrabackup的新版本变化
xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex 功能全部集成到 xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过 xtrabackup替换innobackupex
备份生成的相关文件
使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相 关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配 置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在备 份目录中创建如下文件
- xtrabackup_info:文本文件,innobackupex工具执行时的相关信息,包括版本,备份选项,备份 时长,备份LSN(log sequence number日志序列号),BINLOG的位置
- xtrabackup_checkpoints:文本文件,备份类型(如完全或增量)、备份状态(如是否已经为 prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。 LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
- xtrabackup_binlog_info:文本文件,MySQL服务器当前正在使用的二进制日志文件及至备份这一 刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
- backup-my.cnf:文本文件,备份命令用到的配置选项信息
- xtrabackup_logfile:备份生成的二进制日志文件
XtraBackup安装
在EPEL源中
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm |
XtraBackup用法
XtraBackup工具备份和还原,需要三步实现
1.备份:对数据库做完全备份或增量备份
2.预准备:还原前,先对备份的数据,整理至一个临时目录
3.还原:将整理好的数据,复制回数据库目录中
XtraBackup选项参考:
https://www.percona.com/doc/percona-xtrabackup/LATEST/genindex.html
备份
innobackupex [option] BACKUP-ROOT-DIR |
选项说明:
# 该选项表示备份账号 |
Prepare预准备
innobackupex --apply-log [option] BACKUP-DIR |
选项说明:
# 一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚 未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。此选项作 用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态 |
还原
innobackupex --copy-back [选项] BACKUP-DIR |
选项说明:
# 做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir |
还原注意事项
1.datadir 目录必须为空。除非指定innobackupex –force-non-empty-directorires选项指定,否则– copy-back选项不会覆盖
2.在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中
3.由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户, 执行chown -R mysql:mysql /data/mysql,以上需要在用户调用 innobackupex之前完成
Xtrabackup 完全备份及还原
基于Centos7的MySQL5.7实现
# 1.安装XtraBackup,依次执行 |
Xtrabackup 完全备份,增量备份及还原
# 1.完全备份 |