自助购物网站怎么做,2003系统网站建设,asp做招聘网站流程,郑州网站制作怎么样目录
环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本#xff08;完全备份#xff09; 星期一运备份脚本#xff08;增量备份#xff09; 星期二备份数据#xff08;其他天--增量备份#xff09; 星期三备份数据#xff08;差异备…目录
环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本完全备份 星期一运备份脚本增量备份 星期二备份数据其他天--增量备份 星期三备份数据差异备份 使用第三方工具percona-xtrabackup 基于Innobackupex的MySQL备份脚本
环境准备
操作系统: LinuxCentOS 7.9。MySQL: 已安装并运行着MySQL 5.7.35。Innobackupex: Percona XtraBackup套件的一部分用于物理备份InnoDB和MyISAM表。Shell脚本: 将编写的自动化脚本。
增量备份 具体要求 1、周日全备 2、周一至周六增量备份 3、备份使用backup用户 标题自动化的MySQL数据库备份策略结合Shell脚本与Innobackupex的实践
引言
在现代数据驱动的世界里定期备份数据库是维护业务连续性和数据安全不可或缺的一环。本文将介绍一种利用Shell脚本和Percona XtraBackup工具中的innobackupex命令来实现MySQL数据库自动化备份的策略。我们的目标是设置一个灵活的备份计划其中周日执行全量备份而其他日子则执行增量备份从而高效地管理存储空间并加快恢复速度。
Shell脚本详解 首先让我们深入理解所提供的脚本。该脚本主要包含以下几个部分
日期变量设置:
whichday$(date %u) # 获取当前是一周中的第几天1-7
today$(date %F) # 设置今日日期格式为YYYY-MM-DD
yesterday$(date -d -1 day %F) # 计算昨日日期
Login--userbackup --passwordOpenlab123! --no-timestamp # 定义备份用户认证信息
定义备份功能:
FULL(): 执行全量备份使用innobackupex命令备份保存到/db/full_YYYY-MM-DD目录。INCR(): 执行增量备份需要指定基于哪个目录的增量这里使用前一天的全量或增量备份作为基础。
逻辑判断:
如果今天是周日 (whichday 等于7)执行FULL()函数创建全量备份。如果今天是周一 (whichday 等于1)执行INCR()函数基于上周日的全量备份进行增量备份。其他日子同样执行INCR()函数但基于前一天的增量备份。
脚本执行与监控
执行脚本: 将上述脚本保存为可执行文件例如inno_bak.sh并通过cron定时任务在每天的固定时间执行。日志与监控: 确保innobackupex的执行过程中产生的日志得到妥善保存和监控以便于及时发现并解决问题。
注意事项
权限与安全性: 确保用于备份的用户具有足够的权限同时注意保护好备份脚本中的敏感信息比如数据库用户名和密码。备份验证: 定期检查备份文件的完整性和可恢复性避免灾难发生时才发现备份不可用。 完整代码
#!/bin/bash# 获取今天是一周中的第几天1代表星期一7代表星期日
whichday$(date %u)# 获取今天的日期格式为YYYY-MM-DD
today$(date %F)# 计算并获取昨天的日期
yesterday$(date -d -1 day %F)# 设置备份时使用的MySQL登录信息包括用户名、密码及不使用时间戳的选项
Login--userbackup --passwordOpenlab123! --no-timestamp# 定义函数执行全量备份
function FULL()
{# 使用innobackupex命令执行全量备份备份存放路径包含今天的日期innobackupex ${Login} /db/full_${today}
}# 定义函数执行增量备份
function INCR()
{# 使用innobackupex命令执行增量备份指定增量备份的存储路径和基于哪个目录的增量innobackupex --incremental ${Login} /db/incr_${today} --incremental-basedir$1
}# 根据今天是周中的哪一天来决定执行哪种备份
if [ ${whichday} -eq 7 ] # 如果是周日
thenFULL # 执行全量备份
elif [ ${whichday} -eq 1 ] # 如果是周一
thenINCR /db/full_${yesterday} # 执行增量备份基于上周日的全量备份
elseINCR /db/incr_${yesterday} # 其他日子执行增量备份基于前一天的增量备份
fi [rootlocalhost db] ls --检查要备份的目录是否有文件存在 要想进行增量备份的前提是要有一次完全备份
先从周天开始
[rootlocalhost script] date -s $(date -d 1 day %F %T)
2024年 06月 02日 星期日 00:00:05 CST# 该命令的目的是通过Shell脚本调整系统当前时间到明天的同一时刻。
# 为了实现这个目的采用了两步走的策略
# 第一步计算明天的日期和当前时间
# 第二步使用计算出的日期时间设置系统时钟。# 1. 使用 date -d 1 day 计算明天的日期
# - date -d: 是date命令中的一个选项允许我们指定一个相对时间字符串来计算新的日期和时间。
# - 1 day: 指定了时间偏移量即从当前时间起加1天用来计算明天的日期。# 2. 结合 %F %T 格式化输出日期和时间
# - %F: 代表完整的日期格式即年-月-日例如2024-06-02。
# - %T: 代表时间格式即小时:分钟:秒例如00:00:05。
# 这意味着我们不仅需要明天的日期还需要保持当前的时间部分不变。# 3. 使用命令替换命令嵌套
# - $(...) 是命令替换结构它允许我们把一个命令的输出作为另一个命令的参数。
# 在这里我们用明天的日期和时间由内部的date命令计算得出作为外部date命令的参数。# 4. 最终执行 date -s 设置系统时间
# - date -s: 用于设置系统时间的选项后面跟具体的日期和时间字符串。
# - 通过前面的命令替换我们现在有了一个精确的日期时间字符串明天的日期加上当前时间
# 并将其传递给这个选项从而实现设置系统时间为明天相同时间的目的。# 综上所述整个命令的作用是将当前系统时间设置为明天此刻的时间即在不影响当前时间的情况下将日期向前推进一天。运行脚本 查看是否成功备份
[rootlocalhost db] ls
full_2024-06-02更改时间为星期一
[rootlocalhost script] date -s $(date -d 1 day %F %T)
2024年 06月 03日 星期一 00:02:42 CST#再次运行脚本
[rootlocalhost script] bash inno_bak.sh
full_2024-06-02 incr_2024-06-03#星期二
[rootlocalhost script]# date -s $(date -d 1 day %F %T)
2024年 06月 04日 星期二 00:31:40 CST[rootlocalhost db]# ls
full_2024-06-02 incr_2024-06-03 incr_2024-06-04增量备份和差异备份
要求二 周日完全备份 周1-2增量备份 周3差异备份 周4-6增量备份 # 备份脚本
[rootlocalhost script] cp inno_bak.sh inno_bak_v2.sh
[rootlocalhost script] vim inno_bak_v2.sh
完整代码如下
判断语句改为case语句因为是同一个变量判断不同值
#!/bin/bash# 获取今天是一周中的第几天1表示星期一7表示星期日
whichday$(date %u)# 获取今天的日期格式为YYYY-MM-DD
today$(date %F)# 计算并获取昨天的日期
yesterday$(date -d -1 day %F)# 设置数据库备份时使用的登录信息包括用户名、密码以及禁用时间戳的选项
Login--userbackup --passwordOpenlab123! --no-timestamp# 定义全量备份函数
function FULL() {# 使用innobackupex执行全量备份到/db目录下以今天的日期为名称的子目录中innobackupex ${Login} /db/full_${today}
}# 定义增量备份函数需要传入上次备份的目录作为增量基础
function INCR() {# 执行增量备份到/db目录下以今天的日期为名称的子目录中并指定增量的基准目录innobackupex --incremental ${Login} /db/incr_${today} --incremental-basedir$1
}# 根据今天是一周中的哪一天来选择执行相应的备份操作
case ${whichday} in7) # 如果是周日FULL # 执行全量备份;;1) # 如果是周一INCR /db/full_${yesterday} # 执行基于上周日全量备份的增量备份;;3) # 如果是周三INCR /db/full_$(date -d -3 day %F) # 执行基于上上周五全量备份的增量备份;;*) # 其他日子INCR /db/incr_${yesterday} # 执行基于前一天增量备份的增量备份;;
esac
该脚本设计了一套策略来自动执行MySQL数据库备份 周日执行一次全量备份这是一周的起始点为后续的增量备份提供基础。 周一执行基于上周日全量备份的增量备份。 周三特殊调整执行基于上上周五的全量备份的增量备份这个设定可能根据特定的业务需求或备份窗口制定。 其余日子执行基于前一天增量备份的增量备份保持每天的数据变化得到记录。 测试脚本是否正常
星期天运行脚本完全备份
# 设置时间
[rootlocalhost script] date -s $(date -d 1 day %F %T)
2024年 06月 02日 星期日 01:09:02 CST
# 删除之前备份的数据
[rootlocalhost script] rm -rf /db/
[rootlocalhost script] bash inno_bak_v2.sh # 查看是否备份成功
[rootlocalhost script] ls /db/
full_2024-06-02星期一运备份脚本增量备份
增加数据
mysql insert into aa(id) values(11);
Query OK, 1 row affected (0.00 sec)mysql select * from aa;
------
| id |
------
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
------# 设置时间
[rootlocalhost script] date -s $(date -d 1 day %F %T)
2024年 06月 03日 星期一 01:18:10 CST# 运行脚本
[rootlocalhost script] bash inno_bak_v2.sh# 检查是否备份成功
[rootlocalhost script] ls /db/
full_2024-06-02 incr_2024-06-03星期二备份数据其他天--增量备份
增加数据
mysql insert into aa(id) values(12);
Query OK, 1 row affected (0.00 sec)运行脚本
# 设置时间
[rootlocalhost script] date -s $(date -d 1 day %F %T)
2024年 06月 04日 星期二 01:22:29 CST# 运行脚本
[rootlocalhost script] bash inno_bak_v2.sh# 查看是否备份成功
[rootlocalhost script] ls /db/
full_2024-06-02 incr_2024-06-03 incr_2024-06-04星期三备份数据差异备份
增加数据
mysql insert into aa(id) values(13);
Query OK, 1 row affected (0.00 sec)
运行脚本
# 设置时间
[rootlocalhost script] date -s $(date -d 1 day %F %T)
2024年 06月 05日 星期三 01:25:39 CST# 运行脚本
[rootlocalhost script] bash inno_bak_v2.sh# 查看脚本是否备份成功
[rootlocalhost script] ls /db/
full_2024-06-02 incr_2024-06-03 incr_2024-06-04 incr_2024-06-05