六、备份+实战1
1.关于备份
备份原因
丢:可能是莫名其妙丢失,服务器硬件坏了,或者软件坏了,导致文件丢失
删:不小心删除了
备份目标
数据的一致性
服务的可用性
备份技术
物理备份/冷备份
直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的mysql服务器中。
tar ,cp ,scp
拷贝数据,有点快,缺点需要服务停止
逻辑备份/热备份
备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库
mysqldump ,mydumper
效率相对较低
备份方式
完全备份
增量备份
差异备份
2.实战1
percona-xtrbackup
简介:是一款开源免费的支持Mysql数据库热备份的软件,他能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份。它不暂停服务初见Innodb热备份。 为mysql做增量备份;在mysql服务器之间做在线表迁移;使创建replication更加容易;备份mysql二不增加服务器的负载。
获得软件包
yum install http://repo.percona.com/yum/percona-release-latest.noarch.rpm 如果无法下载可以上网搜至...com/yum/
——————————
安装
观察yum仓库
ls /etc/yum.repos.d/
安装percona需要的mysql包
yum install -y yum-utils yum工具
yum install -y https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm mysql官方源
yum makecache 刷新yum仓库缓存
yum repolist all | grep mysql 查看mysql可用版本
yum-config-manager --disable mysql80-community 禁用80
yum-config-manager --enable mysql57-community 启动57
yum install -y mysql-community-libs-compat 安装mysql
systemctl start mysqld 启动masql
yum安装percona-xtrabackup
ls /etc/yum.repos.d/ 查看yum仓库
yum repolist 查看repo表
yum makecache 刷新yum仓库缓存
yum list | grep percona-xtrabackup 搜索yum库里关于percona-xtrabackup的包
yum install -y percona-xtrabackup-24.x86_64 安装percona-xtrabackup
yum list | grep percona-xtrabackup 检查安装结果,有@说明安装成功
——————————
完全备份流程
innobackupex --uesr=root --passwork='Qianfeng@123' /xtrabackup/full inno数据库引擎backup备份ex执行 账号 密码 备份目录
ls /xtrabackup/full 查看备份目录。数据库,配置文件,日志文件
ls /xtrabackup/full/2022-01-14_00-00-43 查看备份目录
ls /xtrabackup/full/2022-01-14_00-00-43/xtrabackup_binlog_info 查看二进制日志位置,如果mysql没有开二进制日志则无
——————————
完全恢复流程
模拟数据库损坏(在公司不要玩这个)
systemctl stop mysqld 停止数据库
rm -rf /var/lib/mysql/* 模拟文件缺失(别把mysql目录都删没了)
rm -rf /var/log/mysqld.log 模拟文件缺失
生成回滚日志
innobackupex --apply-log /xtrabackup/full/2022-01-14_00-00-43/ 指定备份点(因为不可能只有一个备份文件)
恢复文件
innobackupex --copy-back /xtrabackup/full/2022-01-14_00-00-43/
验证恢复
ls /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql 把mysql目录下的文件属主和属组授权回给员工(不可能每次都用root打开mysql)
systemctl start mysqld
mysql -uroot -p'Qianfeng@123'
如果提示找不到mysql.sock则重启mysqld服务
systemctl restart mysqld
show databases;
use school;
show tables;
select * from student1;
——————————
增量备份流程
简介:既上次完整备份以来增加的数据,是增量数据,对增量数据进行的备份是增量备份。
准备工作
使用指定的数据库
create database testdb;
use testdb;
create table test(id int);
insert into table values(1);
select * from test;
\q
完整备份:周一
rm -rf /xtrabackup/* 不让上次示例影响该示例
date 01100000 把日期调整到周一
date
innobackupex --user=root --password='Qianfeng@123' /xtrabackup 数据库引擎备份执行 账号 密码 备份目录
ll /xrtabackup/ 2022-01-10_00-01-33
当前,该备份中test记录id只有1
增量备份:周二
date 01110000 把日期调整到周二
mysql -uroot -p'Qianfeng@123'
insert into testdb.test values (2); 增加testdb.test的内容
select * from testdb.test;
\q
innobackupex --user=root --password='Qianfeng@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-01-10_00-01-33 数据库引擎备份执行 账号 密码 --增量备份的目录 --增量备份基于完全备份的目录
ls /xtrabackup/ 查看增量备份是否成功
增量备份:周三
date 01120000
mysql -uroot -p'Qianfeng@123' -e 'insert testdb.test values (3)'
innobackupex --user=root --password='Qianfeng@123' --incremental /xtrabackup/ --incremental /xtrabackup/2022-01-11_01-50-27 基于周二的基础上增量备份
ls /xtrabackup/ 查看是否备份成功
周三周四周五都一样,公司一般会在周六或者周日选一天再做一次完全备份,如果是周六做完全备份,那么周日依旧是增量备份。
——————————
增量恢复流程
停止数据库
systemctl stop mysqld
清理环境
rm -rf /var/ilb/mysql/*
回滚合并
innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_00-01-33 周一的只回滚合并
innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_00-01-33 --incremental-dir=/xtrabackup/2022-01-11_01-50-27 周二的增量备份与01-10的回滚 此时01-10回滚增加了01-11的备份
innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_00-01-33 --incremental-dir=/xtrabackup/2022-01-12_00-08-44 周三的增量备份与01-10完全备份回滚
恢复
innobackupex --copy-back /xtrabackup/2022-01-10_00-01-33
chown -R mysql.mysql /var/lib/mysql/*
ll /var/lib/mysql/
检验
systemctl start mysqld
mysql -uroot -p'Qianfeng@123' -e 'select * from testdb.test'
需要恢复到周几的数据就回滚到哪
——————————
差异备份流程
简介
增量备份恢复十分麻烦,差异备份的原理是两个备份文件,一个是完全备份,一个是除了完全备份数据外的其他备份数据。是完全备份和增量备份之间的产品。好处是比增量备份方便快捷,缺点是比较占用空间。
更改日期
date 01100000
清空上次示例的备份
rm -rf /xtrabackup/*
完全备份
mysql -uroot -p'Qianfeng@123' -e 'create table testdb.test2'
mysql -uroot -p'Qianfeng@123' -e 'insert into testdb.test2 values (1)'
mysql -uroot -p'Qianfeng@123' -e 'select * from testdb.test2'
innobackupex --user=root --password='Qianfeng@123' /xtrabackup/
ll /xreabackup/
周二
date 01110000
mysql -uroot -p'Qianfeng@123' -e 'insert into testdb.test2 values (2)'
mysql -uroot -p'Qianfeng@123' -e 'select * from testdb.test2'
innobackupex --user=root --password='Qianfeng@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-01-10_00-02-46 基于0110做增量备份
ll /xreabackup/
周三
date 01120000
mysql -uroot -p'Qianfeng@123' -e 'insert into testdb.test2 values (3)'
mysql -uroot -p'Qianfeng@123' -e 'select * from testdb.test2'
innobackupex --user=root --password='Qianfeng@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-01-10_00-02-46 依旧基于0110做增量备份,这样相对于完全备份数据,周二增量数据依旧是差异数据
周四亦是如此
——————————
差异恢复流程
停止数据库
systemctl stop mysqld
清理环境
rm -rf /var/lib/mysql/*
重演回滚redo log (完全备份,某次差异)
innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_00-02-46
innobackupex --apply-log --redo-only /xtrabackup/2022-01-10_00-02-46 --incremental-dir=/xtrabackup/2022-01-12_00-04-05
innobackupex --copy-back /xtrabackup/2022-01-10_00-02-46
ls /var/lib/mysql/
chown -R mysql.mysql /var/lib/mysql/*
ll /var/lib/mysql/
systemctl start mysqld
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具