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

防止密码泄露。

相关推荐
————A12 小时前
Agent 接收用户上传文件
人工智能·笔记·python·状态模式
奔跑的痕迹12 小时前
如何删除引力画报?
笔记
zbyyd12 小时前
Linux 进程间通信学习笔记
linux·笔记·学习
CDN36013 小时前
节点智能调度实操:解决出海区域访问快慢不均、节点拥堵、跨洋延迟高,CDN 全网择优落地方案
运维·服务器·网络
知产xiao_xin13 小时前
知识产权入门 —— 版权
经验分享·笔记·知识产权
夜雪一千13 小时前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
呆萌很13 小时前
英语 1‑12 月单词联想记忆
笔记
ruleslol14 小时前
MySQL: OR查询为什么会导致索引失效
mysql
白清羽14 小时前
7.3系统安装docker
运维·docker·容器
翼龙云_cloud14 小时前
阿里云国际渠道代理商:如何在ECS上部署Flask应用?
运维·数据库·阿里云·flask·云计算