使用xtrabackup对MySQL热备份、增量备份(仅支持:innodb引擎表)
一、MySQL数据备份方式(物理备份、逻辑备份)
对于数据库的备份重要性不必多言,为了防止数据以各种方式丢失、损坏,所以必须对数据库进行定期备份。
首先,应考虑数据备份时对数据库业务的影响情况,选择相应备份场景:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。热备:读写操作均可正常进行的状态下进行备份(多数情形下都是场景);
温备:可读但不可写状态下进行的备份;
冷备:读写操作均不可进行的状态下所做的备份。
其次,如果定期进行备份,每次都进行全量备份,显然一部分数据是重复,而且浪费大量磁盘空间,选择合适备份方式:
完全备份:每次备份数据库中全量数据;
差异备份:仅备份自上一次完全备份以来变化的那部分数据,是按完全备份那一刻的备份数据为起点,进行备份;
增量备份:仅备份自上一次完全备份或增量备份以来变化的那部分数据,是按上一次备份那一刻的备份数据为起点,进行备份。
备份数据两种方法:
物理备份:复制数据文件进行备份,即通过cp或scp等shell命令,或第三方软件,如:xtrabackup,cp或scp等shell命令将数据存储目录下:ibdata1、ib_logfile0、ib_logfile1文件拷贝,此方法效率比较低,对数据库运行影响低一些;
逻辑备份:从数据库中导出数据到文件中,可选择需要备份的数据库,备份粒度更精细,此备份方法会存在数据差异。
逻辑备份使用mysql自带的命令:mysqldump进行逻辑备份,例:mysqldump -uroot -p -B db1 db2 > /tmp/mysql/dump.sql
二、物理备份方法:xtrabackup工具,对 Innodb引擎的表可进行热备,增量备份,但对MyISAM引擎就不支持这些特性了
1、安装xtrabackup工具,安装成功后使用:innobackupex命令
https://www.percona.com/software/mysql-database/percona-xtrabackup 下载官网
#yum install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm #yum安装rpm包
#rpm -qa |grep percona-xtrabackup #查看安装是否成功
2、先通过innobackupex命令进行全量备份,
mysql> grant reload,lock tables,replication client on *.* to 'cxq'@'localhost' identified by '123456'; #授权用户、密码进行数据备份
mysql> flush privileges;(可选操作)
1)数据备份操作:
#innobackupex --defaults-file=/etc/my.cnf --user=cxq --password="123456" --backup /tmp/mysql/backup/ #执行备份操作,报以下错误,提示是缺少PROCESS权限
mysql> grant process on *.* to 'cxq'@'localhost'; #赋予权限后再执行,问题解决
2)apply-log参数生成应用日志:
#innobackupex --apply-log /tmp/mysql/backup/2019-04-18_16-46-25/ #使相关数据性文件保持一致性状态
3)测试,登录数据库,执行删除操作:
3、数据恢复, 使用--copy-back参数:
1)将前面备份的数据导入到数据库指定存储目录,注:此时数据库存储目录必须为空方可执行数据恢复工作:
#innobackupex --defaults-file=/etc/my.cnf --copy-back /tmp/mysql/backup/2019-04-18_16-46-25/
#chown -R mysql.mysql /usr/local/mysql/data/ #记得修改mysql数据库所有者、所属组为mysql用户
清空数据库存储目录,再执行数据恢复动作,成功:
数据恢复完成后,必须重启数据库服务,否则无法显示已恢复的数据:
2)重启mysql数据服务:
/etc/init.d/mysqld restart
3)再查询表数据,数据成功恢复。
