目录
在生产环境中,数据可能可能会丢失。
常见数据丢失原因:硬件故障,软件故障,自然灾害,黑客攻击,误操作 (占比最大)
备份的目标:
备份的技术:
优点:不用关闭服务器
缺点:效率低
优点:速度快
缺点:要把服务停止才可以备份
备份的种类:
全量备份:把要备份的数据从头到尾备份一遍
增量备份:备份上次备份后,有变化的数据
差量备份:备份上次全量备份后,有变化的数据,每次备份都是在上次全量备份的基础上备份
工具简介:
简介
它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份,percona是一家老牌的mysql技术咨询公司。
获得软件包:
https://www.percona.com/
进入官网:
用wget命令把percona官方包下载到我们的linux系统上
wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm
安装percona需要的mysql包,直接安装会报错
下载mysql官方源
yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
安装yum工具集(因为我们使用5.7版本,源比较新,所以使用工具集,设置哪些版本开启,可以装,哪些关闭,不装)
yum install -y yum-utils
然后查看
禁用80(不用8.0版本)
yum-config-manager --disable mysql80-community
开启57(开启mysql5.7版本)
yum-config-manager --enable mysql57-community
安装percona需要的mysql包
yum install mysql-community-libs-compat -y
安装percona官方源
yum install -y percona-release-latest.noarch.rpm
yum开始安装percona
yum -y install percona-xtrabackup-24.x86_64
查询安装结果:
rpm -ql percona-xtrabackup-24
到此安装结束
innobackupex - -user=root --password='密码' /xtrabackup/full
说明:innobackex(备份的意思)--user=root(以什么身份进行备份)密码 备份到什么位置(名字随便起,自己好识别就好)
看到下面已经有内容了
查看这个备份的文件夹(里面就是备份的数据库,是/var/lib/mysql下的内容)
开启二进制日志
vim /etc/my.cnf
systemctl restart mysqld #:重启服务,使配置生效。
查看数据库文件的内容(发现已经有了二进制日志了)
删除上一次备份的内容,里面没有二进制,重新备份
重新备份 (每次备份只能到此时此刻,也就是说备份文夹日期之后的数据无法备份)
查看备份内容:
查看二进制日志(记录备份点后,改变的数据,因为数据库的操作都会写入二进制日志,下次查看二进制日志,就知道备份后,有增加了什么数据)154即是备份点
chown -R mysql.mysql /var/lib/msysysql
systemctl restart mysqld
目的:实现周一全量备份,周二,周三增量备份
使用指定数据库,便于后续观察效果
先把上一个实验的全量备份删除,然后修改日期,之后做增量效果就比较明显,容易区分(因为备份文件的名字是按日期来命名的)
开始全量备份(周一)
innobackupex --user=root --password='GEDAN123.com' /etrabackup/
看到这说明全量备份成功
然后查看,可以看到同名时间文件已经备份好
date 09020000 修改时间 (修改时间,等会就回生成和时间相同的备份文件,便于区分)
给数据库插入新数据
开始增量备份
innobackupex --user=root --password='GEDAN123.com' --incremental /etrabackup/ --incremental-basedir=/etrabackup/2021-09-01_00-09-29
说明:--incremental 声明要做增量备份 --incremental-basedir=/etrabac/2021-09-01_00-09-29
声明要在此目录文件的基础上做增量备份
下面说明增量备份成功
修改时间 date 09030000
插入新数据
开始备份
innobackupex --user=root --password='GEDAN123.com' --incremental /etrabackup/ --incremental-basedir=/etrabackup/2021-09-02_00-06-46
可以看到已经备份好了
周二,周三已经备份了,周四,周五就依次类推
systemctl stop mysqld
rm -rf /var/lib/mysql/*
innobackupex --apply-log --redo-only /etrabackup/2021-09-01_00-09-29
说明:发现多了一个 --redo-only的选项,要进行合并
innobackupex --apply-log --redo-only /etrabackup/2021-09-01_00-09-29 --incremental-dir=/etrabackup/2021-09-02_00-06-46
说明:要进行周二的数据恢复,拼接到周一的全量数据里面(意思就是给周一的数据恢复时,加上一部分周二的数据,统一恢复)
进行周一数据恢复:(声明后数据会备份到完整备份,所以只需要恢复完整备份)
innobackupex --copy-back /etrabackup/2021-09-01_00-09-29
进行授权:chown -R mysql.mysql /var/lib/mysql/ #:不授权mysql用户没有访问权限,重启会失败
systemctl restart mysqld
查看是否恢复成功:
发现数据库的文件已经有了
重启mysql,进行验证,我们恢复的是周一,周二原则上数据里面只有周一和周二。
出现下面,验证结果正确
那么如果想把第三天的也恢复怎么办呢?
systemctl stop mysqld
innobackupex --apply-log --redo-only /etrabackup/2021-09-01_00-09-29 --incremental-dir=/etrabackup/2021-09-03_00-02-33
innobackupex --copy-back /etrabackup/2021-09-01_00-09-29
chown -R mysql.mysql /var/lib/mysql/
systemctl restart mysqld
那么如何 直接恢复周一,周二,周三?甚至周四...?
只需要,应用周一的备份,然后把其余的依次,加进周一的完整备份,最后恢复周一的备份