MySQL运维笔记-一种数据定期备份的方法

背景

是在清理某服务器无用数据时发现的,某系统里面,发现新的sql数据。为什么会有人定期备份成sql数据。后面查了下,发现是使用了shell脚本操作,在此记录下,因为感觉很有用。

过程

使用cronab每天凌晨3点备份数据。

bash 复制代码
00 03 * * * /home/xxx/xxx/xxx.sh

备份脚本内容:

bash 复制代码
#!/bin/bash
number=3
backup_dir=/home/xxx/xxx
dd=`date +%Y-%m-%d-%H-%M-%S`
username=xxxx
password=xxxx
mysqldump -u $username -p$password -A > $backup_dir/$dd.sql
delfile=`ls -lcrt $backup_dir/*.sql | awk '{print $9}' | head -1`
count=`ls -lcrt $backup_dir/*.sql | awk '{print $9}' | wc -l`
if [ $count -gt $number]
rm $delfile
fi

说明:

mysqldump -A:中的-A意思是 --all-databases,包含所有库、所有用户权限、所有系统配置

ls -lcrt中:

  • -l:long长格式显示;
  • -t:time-sort按时间排序,默认最新的排前面;
  • -c:--time=ctime --sort=time,与-t搭配,表明按变更时间进行排序。
  • -r:--severse,反转,和-t搭配时,原本是默认最新的排前面,有了-r后,最新的就放最后面了了。

| awk '{print $9}' | head -1命令:

  • 将刚刚ls查到的数据输入给awk命令,按字段处理文本。
  • awk '{print $9}' 提取第9段的信息(ls -lcrt中第9段是文件名),将文件名输入到head命令中。
  • head -1:只留下第一行输出,业务逻辑就是输出,当前sql中,最老的备份文件。

wc -l:

  • wc:word count统计
  • -l:指--lines代码只统计行数。

-gt:Greater Than:大于

优化

这个脚本,搭配crontab在凌晨3点备份整库,能实现功能,但存在一些问题,需要优化和整改。

① 数据太大,可加压缩功能:

bash 复制代码
mysqldump -A | gzip > $backup_dir/$dd.sql.gz 

② 权限问题,使用crontab最好是root权限,并且除了root本身有读写执行权限,其他用户和组都只放执行权限:

711:rwx--x--x

防止密码泄露。

相关推荐
酉鬼女又兒5 分钟前
每天一个Linux命令_printf
linux·运维·服务器
虾说羊9 分钟前
docker容器化部署项目流程
运维·docker·容器
Trouvaille ~11 分钟前
TCP Socket编程实战(三):线程池优化与TCP编程最佳实践
linux·运维·服务器·网络·c++·网络协议·tcp/ip
大大大反派14 分钟前
CANN 生态中的自动化部署引擎:深入 `mindx-sdk` 项目构建端到端 AI 应用
运维·人工智能·自动化
javachen__19 分钟前
mysql新老项目版本选择
数据库·mysql
Dxy123931021637 分钟前
MySQL如何高效查询表数据量:从基础到进阶的优化指南
数据库·mysql
Dying.Light40 分钟前
MySQL相关问题
数据库·mysql
WHD3061 小时前
苏州勒索病毒加密 服务器数据解密恢复
运维·服务器
蜡笔小炘1 小时前
LVS -- 持久链接(Persistent Connection)实现会话粘滞
运维·服务器
Hello_Embed1 小时前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus