1、MySQL备份方式
对于数据库的备份重要性不必多言,为了防止数据以各种方式丢失,损坏,必须对数据库进行定期备份。
首先考虑备份的时候对数据库业务的影响
热备:读写操作均可进行的状态下进行备份
温备:可读但不可写状态下进行的备份
冷备:读写操作均不可进行的状态下所做的备份
再者如果定期进行备份,如果每次都进行全量备份,显然一部分数据是重复,浪费大量磁盘空间
完全备份
差异备份:仅备份自上一次完全备份以来变化的那部数据
增量备份:仅备份自上一次完全备份或 增量备份以来变化的那部分数据
差异备份是按完全备份那一刻的备份数据为起点,进行备份
增量备份是按上一次备份那一刻的备份数据为起点,进行备份
差异备份比增量备份消耗更大的空间,但是增量备份恢复步骤比较多,需要按顺序依次恢复
备份数据两种方法
物理备份:复制数据文件进行备份
逻辑备份:从数据库中导出数据到文件中
这两种方式比较,物理备份更加效率,对数据库运行影响低一些;逻辑备份方式可选择的备份数据粒度更精细。
2、备份利器-xtrabackup
逻辑备份使用mysqldump,用法简单,这里不再详述;
物理备份方法首选xtrabackup开源工具。此款工具由percona开发,对使用Innodb引擎的表可进行热备,增量备份。对MyISAM引擎就不支持这些特性了。
2.1 安装
本文环境:CentOS7.2 ,percona-xtrabackup-2.3.2-1
官方下载传送
安装完成,rpm -ql percona-xtrabackup
查看安装文件,主程序为xtrabackup,另外有已脚本封装工具innobackupex,主要使用它。
2.2 备份
Usage:
innobackupex [--defaults-file=] --user= --password= --host= /PATH/TO/BACKUP_DIR
示例:
数据库正常运行的情况下,我们即可备份,允许远程备份
授权最小权限备份
mysql >grant reload,lock tables,replication client on . to 'user'@'host';
#进行全库备份,工具根据mysql配置,自动寻找数据路径
innobackupex --user=root --password=cutemysql /tmp/backup
看到OK! 标识即成功完成备份,数据存放路径也可看到
打包压缩,把数据copy到安全的地方去吧!
2.3 恢复
如果某一天数据库数据丢失了,还好我们有备份,冷静地恢复数据
Usage:
innobackupex --apply-log /PATH/TO/BACKUP_DIR #准备恢复数据
innobackupex --copy-back /PATH/TO/BACKUP_DIR #正式恢复数据
示例:
恢复的时候,要求数据库服务关闭,并且在本地执行操作,数据库数据路径为空
并且在/etc/my.cnf 中明确指定当前数据库事务日志的大小
innodb_log_file_size=5242880
首先进行备份数据准备处理
$ innobackupex --apply-log /tmp/backup/2016-11-22-11-22-20
看到OK ! 标识即为成功
恢复数据准备完成后,即可正式恢复数据
$ innobackupex --copy-back /tmp/backup/2016-11-22_11-22-20
数据库数据路径下已恢复数据,再更改文件属主之后,数据库即可正常启动!
$ chown -R mysql.mysql /var/lib/mysql
热备方式中,备份过程中数据库中产生的事务都会被xtrabackup记录,是为log sequence number(LSN)。在上面执行准备恢复数据语句后,innodb表的数据已经前滚至备份结束那一刻状态。如果要恢复启动备份结束后发生变化的数据,需要结合二进制日志进一步恢复
那么从哪一位置开始恢复二进制日志呢?在备份数据目录中,xtrabackup_binlog_info文件有记录
2.4 增量备份与恢复
2.4.1 增量备份
增量备份之前需要一个全量备份,全量备份目录为2016-11-22_15-59-24
#第一次增量备份
innobackupex --user=root --password=cutemysql --incremental ./ --incremental-basedir=./2016-11-22_15-59-24
#第二次增量备份,为了看出差异,自行提交一个事务
innobackupex --user=root --password=cutemysql --incremental ./ --incremental-basedir=./2016-11-22_17-08-42
查看两个目录中记录的lsn,可见增量是在按lsn来记录的
2.4.2 增量恢复
增量恢复的准备阶段需要注意
按时间顺序进行备份合成
除最后一次追加增量数据时,必须带上--redo-only 选项
incremental-dir 使用绝对路径
#对全量数据准备
innobackupex --apply-log --redo-only ./2016-11-22_15-59-24
#追加第一次增量数据
innobackupex --apply-log --redo-only ./2016-11-22_15-59-24 --incremental-dir=/tmp/backup/2016-11-22_17-08-42
#追加第二次增量数据,也是最后一次,不带--redo-only
innobackupex --apply-log ./2016-11-22_15-59-24 --incremental-dir=/tmp/backup/2016-11-22_17-20-25
#恢复数据
innobackupex --copy-back fullbak
chown -R mysql.mysql /var/lib/mysql
至此完成!
2.5 备份压缩
xtrabackup 支持stream流压缩
#备份时开启stream选项压缩
innobackupex --stream=tar ./ | gzip - > backup.tar.gz
innobackupex --stream=tar ./ | bzip2 - > backup.tar.bz2
#解压时注意带上-i 选项
tar -xizf backup.tar.gz -C backup
--- EOF ---